Cách dùng GPIO IRQ trên Linux Sysfs như thế nào?

Hi all,
Mình đang tìm cách check interrupt gpio trên linux userspace thông qua sysfs, có một example trên github như sau: https://github.com/TrongDungEmb98/gpioIrq/blob/master/gpioIrq.c

Tuy nhiên khi mình chạy thử thì thấy nó không đúng, nó luôn detect cả 2 edge của interrupt ngay cả khi mình chỉ set interrupt là “falling”.

Mong các cao nhận chỉ bảo mình cách xử lý ạ.

Xạo :rage:

6 Likes

đoạn này là code example, mình lấy về sửa lại chỗ ấy thay “both” bằng “falling” vẫn chạy cả falling và rising ^^image

Okay, hướng dẫn bạn 3 bước debug đơn giản:

  1. Bỏ system("echo 66 > /sys/class/gpio/unexport"); đi
  2. Change gpio_set_edge(gpio, "falling") sang gpio_set_edge(gpio, "none")
    • Nếu nó vẫn interrupt -> Bạn setting sai gpio, hoặc bị overwrite permission/value bởi kernel.
    • Nếu nó không interrupt -> Chân gpio bị nhiễu nút nhấn -> Cần chống nhiễu bằng tụ điện.
  3. lscat hết các files /gpio66/edge, /gpio66/value , /gpio66/direction , export xem thử value có thay đổi trước và trong lúc chương trình chạy không.

Debug hardware cần kiên nhẫn và thử nhiều cách. Vì chỉ mỗi mình bạn có hardware đó.

  • Disclaim: mình chưa bao giờ làm cái này =]] :zipper_mouth_face:
  • Dislike: code post ở bài đầu và code chạy khác nhau mà kêu người ta debug :rage:
6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?