ARM7比較難理解和控制的就是中斷控制,把自己找的一些資料寫上來。
1、 快速中斷FIQ
⑴在主程序中:
① 在VICIntSelect中將中斷分配為FIQ中斷;
② 在VICIntEnable中使能外設(shè)中斷。
⑵中斷服務(wù)程序中:
① 中斷處理;
② 清除相應(yīng)的中斷標(biāo)志,以響應(yīng)下一次中斷。
2、 向量IRQ
⑴主程序
① 在VICIntSelect中將中斷分配為IRQ中斷;
② 在VICVectCntlx中分配中斷通道(優(yōu)先級(jí));
③ 在VICVectAddrx中設(shè)置中斷服務(wù)程序的地址;
④ 通過VICIntEnable使能外設(shè)中斷。
⑵中斷服務(wù)程序
① 中斷處理;
② 清除相應(yīng)的中斷標(biāo)志,以響應(yīng)下一次中斷;
③ 對(duì)VICVectAddr寄存器執(zhí)行寫操作(通常為0x00),結(jié)束向量中斷,以更新硬件優(yōu)先級(jí)。
3、 非向量IRQ
⑴主程序
① 在VICDefVectAddr中設(shè)置中斷服務(wù)程序的地址;
② 通過VICIntEnable使能外設(shè)中斷。
⑵中斷服務(wù)程序
①中斷處理;
②清除相應(yīng)的中斷標(biāo)志,以響應(yīng)下一次中斷;
③對(duì)VICVectAddr寄存器執(zhí)行寫操作(通常為0x00),結(jié)束向量中斷,以更新硬件優(yōu)先級(jí)。
初始化
1,設(shè)置IRQ/FIQ中斷;
2,若是IRQ中斷,則可以設(shè)置為向量中斷并分配中斷優(yōu)先級(jí),否則為非向量IRQ;
3,然后可以設(shè)置中斷允許
4,以及向量中斷對(duì)應(yīng)地址或非向量中斷默認(rèn)地址
IRQ中斷時(shí)
1,讀取向量地址寄存器,跳轉(zhuǎn)到相應(yīng)代碼
2,退出中斷時(shí),對(duì)向量地址寄存器寫0,通知VIC中斷結(jié)束
當(dāng)發(fā)生中斷時(shí),處理器將會(huì)切換處理器模式,同時(shí)相關(guān)的寄器也將會(huì)映射
LPC2104的中斷管理是由向量中斷控制器(VIC)操作的,向量中斷控制器具有32個(gè)中斷請(qǐng)求輸入(32個(gè)中斷通道,但LPC210X只使用了17個(gè)通道,即0~16),可將它們?cè)O(shè)置為FIQ,向量IRQ和非向量IRQ,通過編程不同外設(shè)的向量IRQ中斷優(yōu)先級(jí),可實(shí)現(xiàn)動(dòng)態(tài)分配調(diào)整。非向量IRQ中斷優(yōu)先級(jí)最低
相關(guān)寄在存器解釋如下:
檢查中斷狀態(tài)或中斷通道
VICIRQStatus:IRQ狀態(tài)請(qǐng)求標(biāo)志。置1的位表示對(duì)應(yīng)的通道號(hào)中斷有效(此通道設(shè)置為IRQ,并已使能。只讀。
VICFIQStatus:FIQ狀態(tài)請(qǐng)求標(biāo)志。同上。
VICRawIntr:所有中斷的狀態(tài)。32個(gè)通道的中斷請(qǐng)求/軟件中斷狀態(tài)(不管是否使能)。只讀。
中斷通道IRQ或FIQ選擇
VICIntSelect:中斷選擇,即選擇IRQ或FIQ中斷。置1時(shí)表示對(duì)應(yīng)通道設(shè)置為FIQ。讀/寫
中斷使能及軟件中斷
VICIntEnable:中斷使能。置1時(shí)表示對(duì)應(yīng)通道使能,否則為禁能。讀/寫。
VICIntEnclr:中斷使能清零。置1時(shí)清除對(duì)應(yīng)通道使能標(biāo)志。只寫。
VICSoftInt:軟件中斷設(shè)置。置1時(shí)表示對(duì)應(yīng)通道產(chǎn)生中斷。只能通過VICSoftClear清除軟件中斷標(biāo)志。讀/寫
VICSoftClear:軟件中斷清零。清除相應(yīng)通道的軟件中斷標(biāo)志。只寫。
IRQ中斷向量
VICVectAddr:向量中斷地址。當(dāng)發(fā)生向量IRQ時(shí),此寄存器是最高優(yōu)先級(jí)IRQ通道的向量地址值。讀/寫。
IRQ向量原地址
VICDefVectAddr:非向量中斷的向量地址。當(dāng)發(fā)生非向量中斷時(shí),即將此寄存器值復(fù)制到VICVectAddr中。讀/寫
VICVectAddr0~15:優(yōu)先級(jí)0~15向量中斷的向量地址。當(dāng)有對(duì)應(yīng)優(yōu)先級(jí)向量IRQ中斷時(shí),將會(huì)把保存的值復(fù)制到VICVectAddr中。讀/寫
向量IRQ中斷優(yōu)先級(jí)設(shè)置
VICVectCntl0~15:向量控制寄存器0~15,即向量優(yōu)先級(jí)寄存器。可以把各個(gè)IRQ中斷通道分配到不同的向量控制寄存器中,使其成為向量中斷,并具有一定的優(yōu)先級(jí)。讀/寫。
設(shè)置向量中斷,即是把中斷通道分配到向量IRQ中斷優(yōu)先級(jí)寄存器中,當(dāng)然對(duì)應(yīng)通道必須設(shè)置為IRQ中斷類型,而不能為FIQ中斷類型。在VIC中,F(xiàn)IQ無中斷優(yōu)先級(jí),也無向量地址,一般只分配一個(gè)通道為FIQ中斷。VICVectCntl0~15寄存器的D5位是控制是否使能此優(yōu)先級(jí)的向量功能,若復(fù)位為0,則關(guān)閉其向量功能,此向量IRQ變?yōu)榉窍蛄縄RQ。
雜項(xiàng)
VICProtection:保護(hù)使能,若最低位為1,則只允許在特權(quán)模式下訪問VIC寄存器。