NVIC是矢量嵌入中断控制,包括:1) ISER;2) ICER; 3) ISPR; 4) ICPR; 5) IABR; 6)IPR 这几个寄存器。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
typedef struct
{
vu32 ISER[2];
u32 RESERVED0[30];
vu32 ICER[2];
u32 RSERVED1[30];
vu32 ISPR[2];
u32 RESERVED2[30];
vu32 ICPR[2];
u32 RESERVED3[30];
vu32 IABR[2];
u32 RESERVED4[62];
vu32 IPR[15];
} NVIC_TypeDef;
首先分析为什么定义。这是因为ISER的地址是从E000E100开始的,ICER是从E000E180开始的,依次类推;可见从0xE000E100到0xE000E180间隔128个8位,也就是32个32位的数据;这就是vu32 XXX[2]+u32 RESERVED0[30]总的位数。
1)
ISER包括ISER[0]和ISER[1],它们的每位值依次对应一个中断的开启和关闭。例如ISER[0]中的第0位对应
WWDG 窗口定时器中断;第25位对应TIM1_UP TIM1更新中断。---用来开中断
ICER写响应的位为1则对应的中断禁止,默认全0,读如果该位为1则相应的中断允许--用来关中断。
2)
ISPR中某位为1则挂起相应中断;
ICPR中某位为1则清除挂起的中断;
3)
IABR只读用来指示是否有中断发生或要处理;
4)
IPR用来设置优先级别;
下面是参考手册的理解
顺便把参考手册上传到这里DDI0337G_cortex_m3_r2p0_trm.pdf
搞了一天,才知道原子的程序中的一段
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
{
u32 temp,temp1;
temp1=(~NVIC_Group)&0x07;//取后三位
为什么NVIC_Group要求反,
用户414196 2012-1-29 14:29