十八、中断之独立按键
一、簡介
中斷:是指 CPU 在執(zhí)行程序的過程中, 出現(xiàn)突發(fā)事件去處理, CPU 需要停止當(dāng)前程序的執(zhí)行, 轉(zhuǎn)去處理突發(fā) 事件, 處理完成之后再返回原程序部分。
?
中斷源:是指引發(fā)中斷的原因。
?
硬件中斷:一般指外設(shè)發(fā)出的中斷請求以及內(nèi)部硬件產(chǎn)生的中斷(計算溢出, 除數(shù)為 0, 掉電等)
軟件中斷:?典型的是中斷處理程序的下半部操作.
?
硬件中斷的分類
內(nèi)部中斷: 內(nèi)部硬件產(chǎn)生的中斷(例如: 除數(shù)為 0)
外部中斷: 外設(shè)產(chǎn)生的中斷(重點)
?
外部中斷的觸發(fā)方式
上升沿觸發(fā)和下降沿觸發(fā)電平觸發(fā)
?
中斷優(yōu)先級
系統(tǒng)根據(jù)中斷事件的重要性和緊迫程度, 將中斷源分為若干個等級, 優(yōu)先級高的先執(zhí)行。
中斷處理函數(shù)
中斷產(chǎn)生之后執(zhí)行的一段代碼。
中斷向量號
中斷源的識別標(biāo)志, 是跳往中斷程序的“入口地址”。
中斷向量和非中斷向量
硬件提供中斷處理函數(shù)的地址
軟件通過判斷之后, 提供中斷處理函數(shù)的最終地址
向量中斷和非向量中斷的判斷方法
一般一個中斷號對應(yīng)一個中斷函數(shù)就是向量中斷(獨立按鍵) 多個中斷函數(shù)共用一個中斷號(矩陣鍵盤)
?
中斷處理程序架構(gòu)
操作系統(tǒng)中會產(chǎn)生很多中斷, 如果每一個中斷都全部處理完之后再向后執(zhí)行, 是不可能的, 所以就將中斷處理程序分解為上半部和下半部。上半部一般是和硬件緊密相關(guān)的代碼, 下半部一般是耗時的一些操作。
例如給 PC 插入 U 盤會產(chǎn)生中斷, 接收之后, 硬件會馬上響應(yīng), 中斷操作會很快執(zhí)行上半部分, 然后就向上半部分通知系統(tǒng)調(diào)用對應(yīng)的驅(qū)動程序。 后面調(diào)用驅(qū)動的這個過程可以稱之為下半部分。
二、按鍵原理圖
?三、驅(qū)動代碼
中斷申請函數(shù)
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)
有下面幾個參數(shù)。
參數(shù) unsigned int irq: irq 是中斷號
參數(shù) irq_handler_t handler: handler 是向系統(tǒng)登記的處理函數(shù)
參數(shù) unsigned long flags: irqflags 是觸發(fā)標(biāo)志位(
????????????????????????????????????????????????????????????????????????????????/IRQ_TYPE_EDGE_RISING(上升沿)
????????????????????????????????????????????????????????????????????????????????/IRQ_TYPE_EDGE_BOTH(上升、下降沿)
????????????????????????????????????????????????????????????????????????????????/IRQ_TYPE_LEVEL_HIGH(高電平)
????????????????????????????????????????????????????????????????????????????????/?IRQ_TYPE_LEVEL_LOW(低電平)
????????????????????????????????????????????????????????????????????????????????/IRQ_TYPE_SIMPLE(Simple中斷)
????????????????????????????????????????????????????????????????????????????????/IRQ_TYPE_PERCPU(Per CPU中斷):
)
參數(shù) const char *name: devname 是中斷名稱, 可以通過注冊之后可以通過“cat /proc/interrupts”查看
參數(shù) void *dev: dev_id 是設(shè)備
和上面中斷申請函數(shù)對應(yīng)的就是中斷釋放函數(shù) free_irq, 卸載驅(qū)動的時候需要調(diào)用, 如下圖所示, 也是在頭文件“include/linux/interrupt.h”中。
四、添加設(shè)備
vim arch/arm/mach-exynos/mach-itop4412.c
?
?五、運行
??cat /proc/interrupts (查看中斷)
?
總結(jié)
以上是生活随笔為你收集整理的十八、中断之独立按键的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十七、字符类 GPIOS
- 下一篇: 十九、I2C驱动及应用