General Purpose Input Output (GPIO) trên Linux

GPIO là viết tắt của General Purpose Input Output (vào ra cơ bản), là chân có thể được sử dụng tùy vào mục đích của người dùng. Nó có thể thiết lập là chân đọc dữ liệu (chân vào), chân xuất dữ liệu (chân ra). Giống với chân vào/ra của vi điều khiển.

Đặc trưng của GPIO:

– Có thể cấu hình vào/ra

– Có thể cho phép sử dụng hoặc vô hiệu hóa cho sử dụng mục đích khác

– Giá trị vào có thể đọc

– Giá trị xuất ra có thể đọc hoặc ghi

– Giá trị vào thường được sử dụng như là yêu cầu ngắt IRQ

GPIO thường được nhóm thành các cổng, mỗi cổng có 8 chân hoặc 32 chân.

Trong Linux, mỗi chân gpio có tương ứng một thư mục /sys/class/gpio/gpioXXX/ (XXX là thứ tự chân trong gpio) trong root filesystem, cho phép cấu hình chức năng, xuất dữ liệu,…

Thứ tự chân trong gpio được tính như sau:

XXX = ((Số thứ tự cổng-1) * số chân của cổng) + số thứ tự chân

Ví dụ: với chân 1 của cổng 5 (gpio5_01), mỗi cổng gpio có 32 chân thì XXX = (5-1)*32 + 1= 129.

Vậy thư mục trong root filesystem dành cho gpio5_01 là /sys/class/gpio/gpio129

Trong thư mục gpio có các file là direction, value, edge dùng để cấu hình hoặc và vào/ra dữ liệu, ý nghĩa của các tệp như sau:

Tham sốGiá trịÝ nghĩa
directionin hoặc outCấu hình chân là vào/ra, in là chân vào, out là chân ra
value0 hoặc 1Xuất giá trị ra/Đọc giá trị ở chân trong trường hợp chân được cấu hình Ra/Vào tương ứng
edgenone, rising, falling, bothCấu hình cạnh ngắt cho chân:- none: chân không tạo ngắt- rising: chân tạo ngắt khi có cạnh lên- falling: chân tạo ngắt khi có cạnh xuống- both: chân tạo ngắt khi có bất kì một cạnh lên hoặc xuống

Lập trình ouput (xuất dữ liệu):

Với chức năng của các file trong thư mục gpio như trên, để xuất dữ liệu (output) ra một chân gpio bất kì ta làm như sau:

TTNội dungThiết lập tương ứng trong thư mục gpio
1Thiết lập chân gpio là chân outputthiết lập giá trị ‘out’ cho direction
2Xuất giá trị 0 hoặc 1ghi giá trị ‘0’ tới value nếu xuất giá trị 0, ‘1’ nếu xuất giá trị 1

Lập trình input (đọc dữ liệu)

Thủ tục để đọc dữ liệu từ chân gpio phức tạp hơn đối với xuất dữ liệu, cụ thể như sau:

TTNội dungThiết lập tương ứng trong thư mục gpio
1Thiết lập chân gpio là chân inputthiết lập giá trị ‘in’ cho direction
2Thiết lập cạnh ngắtRising, falling hoặc both
3Chờ ngắt bằng hàm poll(…)Mỗi khi có ngắt hàm này sẽ trả về giá trịres = poll(&gpio_poll_fd,1,-1);

Hãy bình luận đầu tiên

Để lại một phản hồi

Thư điện tử của bạn sẽ không được hiện thị công khai.


*