stm32f407之NVIC
五、NVIC 中断向量嵌套控制器是用来管理所有中断和事件的,包括中断的使能和除能,中断的优先级。这个是属于内核的东西,所以ST的参考手册上对它的描述较少,但他又是十分重要的东西,要了解它就要看ARM的《Cortex?-M4 Devices Generic User Guide》。
相关寄存器
译自《Cortex?-M4 Devices Generic UserGuide》,若有错误,请以原文为准。
中断使能寄存器NVIC_ISER[8]
中断使能寄存器共有8个,ISER[0]设置0~31号中断的使能,ISER[1]设置32~63号中断的使能,如此类推。以下以ISER[0]为例:[31:0] SETENA中断设置使能位。 写:
0 =无影响
1 =使能中断。
读:
0 =中断是禁止的
1=中断已经被使能
如果要使能0号中断,就向该寄存器的0位写1,如果要使能38号中断,就向NVIC_ISER[1]的6位写1,如此类推,至于哪个中断对应哪个中断号,请参见参考手册《RM0090 Reference manual》中的第9章Table 30. Vector table的Position一列。
中断除能寄存器NVIC_ICER[8]
中断除能寄存器共有8个,ICER[0]设置0~31号中断除能,ICER[1]设置32~63号中断的使能,如此类推。以下以ICER[0]为例:[31:0] SETENA中断设置使能位。 写:
0 =无影响
1 =除能中断。 读:
0 =中断是禁止的
1=中断已经被使能
以下寄存器均为8个,仅以***R[0]为例
中断挂起设置寄存器NVIC_ISPR[8][31:0]SETPEND中断挂起设置位。 写:
0 =无影响
1 =改变中断状态为挂起。 读:
0 =中断没有挂起
1 =中断正在等待处理。
解除中断挂起寄存器NVIC_ICPR[8][31:0] CLRPEND中断清除挂起位。 写:
0 =无影响
1 =删除中断的挂起状态。 读:
0 =没有挂起的中断
1 =中断正在等待处理。
中断激活位寄存器NVIC_IABR[8][31:0]中断活跃的标志:
0 =中断不活跃
1 =中断活跃。
如果相应的中断的状态是作为一个活跃的或活跃和正被挂起的,读该位将会读出1。
中断优先级寄存器NVIC_IPR[60] 中断优先级寄存器为60个32位寄存器,st的结构体中用了240个8位的字节数组NVIC->IP[240]来映射,每一个对应一个中断的优先级。
ARM的中断优先级分两种,抢占优先级和响应优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中