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