NVIC嵌套向量中斷控制器 本文當(dāng)由個人編制,方便查閱使用,王均偉天津第四項(xiàng)目部宿舍 這個控制器和內(nèi)核捆綁在一起,是控制中斷的。 下面是他吹的: ● 高達(dá)68中斷
●一個0-15的可編程每個中斷的優(yōu)先級。一個更高的層次對應(yīng)一個
低優(yōu)先級的,所以0級是最高的中斷優(yōu)先級
●等級和脈沖中斷信號的檢測
●動態(tài)的優(yōu)先次序加以重訂的中斷
●成組的優(yōu)先級和次優(yōu)先領(lǐng)域的優(yōu)先級值分組
●中斷尾部鏈接
●外部非屏蔽中斷(NMI)
處理器自動進(jìn)入異常堆棧其狀態(tài)和unstacks這種狀態(tài)上
異常退出,無需額外指令開銷。這提供了低延遲的異常處理。 說別的沒用底下這個表的重要程度在于不看他都很難理解寄存器啥意思,記住Table34 使用中要用這個表和底下的寄存器進(jìn)行對比,佐照。才會發(fā)現(xiàn)要的東西 看了這個表請不要問這些寄存器都是那個中斷的啊? 就相當(dāng)于你看了一個坑你還向里跳一樣愚蠢! 上面的這個表非常重要!。。。。。。。。。。。!
1.
中斷設(shè)置啟用寄存器(NVIC_ISERx) SETENA[31:0]:中斷使能位 Write: 0: No effect 1: Enable interrupt Read: 0: Interrupt disabled 1: Interrupt enabled. 如果待處理的中斷使能,NVIC激活基于其優(yōu)先級的中斷。如果一個
中斷被禁止,聲稱其中斷信號改變中斷狀態(tài)為掛起,
但從未激活了NVIC中斷,無論其優(yōu)先級 這才明白啥叫掛起,原來如此 2. 中斷關(guān)閉使能寄存器(NVIC_ICERx) Bits 31:0 CLRENA[31:0]: Interrupt clear-enable bits. Write: 0: No effect 1: Disable interrupt Read: 0: Interrupt disabled 1: Interrupt enabled. 3. 中斷掛起開啟寄存器(NVIC_ISPRx) Bits 31:0 SETPEND[31:0]: Interrupt set-pending bits Write: 0: No effect 1: Changes interrupt state to pending Read: 0: Interrupt is not pending 1: Interrupt is pending 4. 中斷掛起關(guān)閉寄存器 (NVIC_ICPRx) Bits 31:0 CLRPEND[31:0]: Interrupt clear-pending bits Write: 0: No effect 1: Removes the pending state of an interrupt Read: 0: Interrupt is not pending 1: Interrupt is pending 5. 中斷標(biāo)志寄存器(NVIC_IABRx) Bits 31:0 ACTIVE[31:0]: Interrupt active flags 0: Interrupt not active 1: Interrupt active 6. 中斷優(yōu)先級寄存器(NVIC_IPRx) 這個圖表示17個字,每個字32位,每8位表示一個中斷的優(yōu)先級代碼,共68個中斷。 每個中斷的優(yōu)先級的值范圍是0~255,值越低,相應(yīng)的優(yōu)先級越高,值得注意的的是CORTEX-M3 只有16個優(yōu)先級,所以當(dāng)設(shè)置優(yōu)先級時(shí)只有位【7:4】有效,而【3:0】保持為0.以此類推。 總結(jié):中斷優(yōu)先級寄存器通俗的說就是: Cortex-m3不是有68個中斷嗎,那么把這68個中斷分成17組,一組是4個中斷,然后再把一個中斷賦予8位數(shù)據(jù)值,就是4*8=32位,正好一個“字”,也就是說4個中斷要一個字,那么68個中斷要68/4=17個字,然后看下圖18,正好是IPR0~IPR16,17個字。 你分組為了啥?不就是要設(shè)置中斷優(yōu)先級嗎!那么他的值有多大?0~255,8bit嗎!但是問題是這個處理器他沒有這么多的優(yōu)先級,他有多少?只有0~15個,咋辦?他是采取了表35的做法,一個中斷優(yōu)先級的值是8位,我屏蔽低4位,保留高4位,哎!正好,4位可以表示0~15之間的數(shù)據(jù),正好和我們要的不沖突,真好吻合。就是這個結(jié)果。我的理解是這樣的。。! 7. 軟件觸發(fā)中斷寄存器(NVIC_STIR) INTID【8-0】:這個就是說你可以設(shè)置軟件中斷的中斷號,比如說你向里面寫入“000000011”就產(chǎn)生一個IRQ3的軟件中斷,但是這個中斷值是0~239之間的!! 附表:
完 于天津第四項(xiàng)目部 //
|