當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 嵌入式學(xué)習(xí)筆記:arm按鍵中斷實(shí)現(xiàn)流程
下面就來(lái)用按鍵K2實(shí)現(xiàn)中斷的詳細(xì)流程
1> 確定想用哪個(gè)按鍵(自己定,比如K2)
2> 看板子,找到那個(gè)按鍵,板子上印的名字是K2 3> 查看原理圖找到K2對(duì)應(yīng)的GPIO管腳
a> 看開(kāi)發(fā)板的原理圖,在開(kāi)發(fā)板原理圖里面找K2,發(fā)現(xiàn)對(duì)應(yīng)的接線UART_RING
b> 查找UART_RING,發(fā)現(xiàn)接的是CON4的58腳
c> 知道CON4是開(kāi)發(fā)板與核心板之間的接口,開(kāi)發(fā)板的CON4對(duì)應(yīng)核心板的CON3 (此信息來(lái)源可以咨詢硬件工程師,或者自己從板子上找,可能需要把核心板和開(kāi)發(fā)板分離才看得到)
d> 去核心板的原理圖去繼續(xù)找UART_RING,能找到它對(duì)應(yīng)的是GPX1_1管腳,此管腳對(duì)應(yīng)XEINT9
4> 查看芯片手冊(cè),看GPX1是怎么用的
配置GPX1CON,需要把GPX1_1配置成外部中斷模式,即選擇EXT_INT41[1],對(duì)應(yīng)的是EXT_INT41 (通過(guò)學(xué)習(xí)芯片手冊(cè),或者通過(guò)參考別人的程序,或者參考芯片公司提供的參考方案,或者請(qǐng)教有經(jīng)驗(yàn)的人)
5> 查看芯片手冊(cè),看EXT_INT41是怎么用的
配置EXT_INT41CON,設(shè)置外部中斷的觸發(fā)方式,比如設(shè)置成下降沿觸發(fā)
配置EXT_INT41_MASK,打開(kāi)中斷開(kāi)關(guān) (通過(guò)學(xué)習(xí)芯片手冊(cè),或者通過(guò)參考別人的程序,或者參考芯片公司提供的參考方案,或者請(qǐng)教有經(jīng)驗(yàn)的人)
6> 查看芯片手冊(cè),看XEINT9是怎么用的,第9章
查看中斷源表 Table 9-2,查到外部中斷EINT9對(duì)應(yīng)的是SPI25號(hào),ID
是57
(通過(guò)學(xué)習(xí)芯片手冊(cè),或者通過(guò)參考別人的程序,或者參考芯片公司提供的參考方案,或者請(qǐng)教有經(jīng)驗(yàn)的人)
7> 編寫程序
a> 先搭框架:一個(gè)初始化函數(shù),一個(gè)中斷處理函數(shù) b> 具體實(shí)現(xiàn)
配置:
第一階段: 1 6.2.3.198 GPX1CON 配置GPX1_1管腳為外部中斷
26.2.3.211EXT_INT41CON配置中斷的觸發(fā)方式
36.2.3.223EXT_INT41_MASK打開(kāi)管腳中斷(使能中
斷)
(GIC)第二階段:
19.5.1.16 ICDISER_CPU使能相應(yīng)(57號(hào))中斷
29.5.1.21 ICDIPR_CPU設(shè)置中斷優(yōu)先級(jí)
3 9.5.1.22 ICDIPTR_CPU 把57號(hào)中斷交給那個(gè) CPU處理(CPU0)
49.5.1.12 ICDDCR使能CPU0中斷
59.5.1.2 ICCPMR_CPUn設(shè)置CPU0的中斷優(yōu)先級(jí)掩碼為不屏
蔽
69.5.1.1 ICCICR_CPUn使能GIC中斷總開(kāi)關(guān)
處理:
第三階段:
19.5.1.4 ICCIAR_CPUn得到中斷號(hào)57
處理中斷
26.2.3.227 EXT_INT41_PEND 清除管腳中斷標(biāo)志(必須清)
3 9.5.1.19 ICDICPR_CPU 清除GIC控制器的57號(hào)中斷標(biāo)志
4 9.5.1.5 ICCEOIR_CPUn 結(jié)束中斷
中斷處理函數(shù)
1. 匯編部分
保護(hù)現(xiàn)場(chǎng)調(diào)用C部分恢復(fù)現(xiàn)場(chǎng)
2. C部分
提取中斷ID號(hào),ICCIAR_CPU0
根據(jù)ID號(hào)做不同的處理
清除中斷標(biāo)志位,ICDICPR1_CPU0,EXT_INT41_PEND
中斷結(jié)束,ICCEOIR_CPU0 c> 編譯程序 make
d> 下載編譯好的程序到板子的內(nèi)存里運(yùn)行
配置K2為中斷源
一、接線:
1、在開(kāi)發(fā)板上找到K2連接的是UART_RING
二、查芯片手冊(cè)
配置:
1、配置GPX1_1管腳為外部中斷
2、配置中斷觸發(fā)方式為下降沿觸發(fā)
3、打開(kāi)管腳中斷,使能中斷
4、使能相應(yīng)中斷
ICDISER1_CPU0=ICDISER1_CPU0|(1<(57-32))
6、把中斷57交給CPU0處理
每個(gè)中斷交給那個(gè)CPU處理由8個(gè)bit位描述,例如交給核心0處理,那么對(duì)應(yīng)的8bit位為0b00000001,一共160個(gè)中斷源,160*8/32=40,所以每個(gè)核心需要40個(gè)對(duì)應(yīng)的寄存器
ICDIPTR14_CPU0=ICDIPTR14_CPU0&~(0xFF<<8)|(1<<8)
5、設(shè)置中斷優(yōu)先級(jí)
ICDIPR14_CPU0=ICDIPR14_CPU0&~(0xFF<<8)|(12<<8) 7、打開(kāi)CPU0中斷
ICDDCR=1
8、設(shè)置CPU0的中斷優(yōu)先級(jí)掩碼為不屏蔽
中斷優(yōu)先級(jí)掩碼默認(rèn)為0,屏蔽所有中斷,需要設(shè)置0-7bit位為0XFF,響應(yīng)所有中斷。ICCPMR_CPU0=0xFF 9、使能GIC中斷總開(kāi)關(guān)
ICCICR_CPU0=1
中斷處理:
1、得到中斷號(hào)
ICCIAR_CPU0 & (0x3FF)
2、清除管腳中斷標(biāo)志
EXT_INT41_PEND |= 1 << 1
3、清除GIC控制器的SPI 25(57)中斷標(biāo)志
ICDICPR1_CPU0 |=1<< (57-32)
4、結(jié)束中斷
ICCEORIR_CPU0 = ICCEORIR_CPU0 & ~(0x3FF) | iNum