OpenWrt 之 MT7628 使用GPIO中斷

在支持設備樹的系統中使用中斷一般有2種方式。

一、DTS配置interrupt節點

這裏有個挺好的博客,鏈接地址:https://biscuitos.github.io/blog/DTS-interrupt/ 

也即,找到dts文件中的GPIO中斷控制器節點,然後在你的dts驅動節點中根據interrupt cells數量做下聲明。

二、通過宏 gpio_to_irq 獲取

我在實驗中是通過這個方式實現的中斷功能。gpio_to_irq 函數的參數傳入對應的 gpio 序號,這裏我用的是 GPIO0,所以傳入的參數就是0,然後系統會自動幫你計算得到處理器真實的中斷編號;

三、申請中斷

1、int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id)

2、int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags,const char *devname, void *dev_id);

實際上2者底層實現是類似的,request_irq 可以看作爲 request_threaded_irq 的 thread_fn 函數置成了 NULL;

方法2是在實現時會調用 kthread_create 創建一個內核線程來實現中斷線程化,目的就是爲了可以給像線程一樣管理中斷,賦予不同優先級,保證實時性。

有疑問可以Mail或評論哦~:-D

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章