当前位置:文档之家› 51单片机NVIC中断控制设计

51单片机NVIC中断控制设计

21
22
23/******************************************************
24*函数:NVIC_Irq_Config(u8irq,u8priority)
25*功能:设置中断irq中断优先级
26*参数:irq--中断号
27priority--中断优先级,4位有效
44NVIC-》IPR[addr]=priority《《(offst*8+4);
45}
只要按照这样配置,就可以使用中断了
1/******************************************************
2*函数:NVIC_Group(u8group)
3*功能:设置中断分组
4*参数:group-对应分组号0~4共5组
5*返回:无
6******************************************************/
33{
34u8addr_en,offset_en;
35u8addr,offset;
36
37addr=irq/4;
38offset=irq%4;
39
40addr_en=irq/32;//中断使能控制寄存器
41offset_en=irq%32;//中断使能控制位
42
43NVIC-》ISER[addr_en]|=1《
15temp=SCB-》AIRCR;//读取先前的设置
16temp&=0X0000F8FF;//清空先前分组
17temp|=0X05FA0000;//写入钥匙
18temp|=temp1;
19SCB-》AIRCR=temp;//设置分组寄存器地址0xe000ed00c可以看
cortexm3权威指南
20}
7voidNVIC_Group(u8group)//设置中断优先级分组寄存器
8{
9
10u32temp,temp1;
11//设置中断向量表,这里不配置会导致不能进入中断
12SCB-》VTOR=NVIC_VectTab_FLASH;
13temp1=(~group)&0x07;//取后三位
14temp1《《=8;
51单片机NVIC中断控制设计
对于NVIC的任务,可以概括为三个:
1.配置中断向量表--如果不配置,则不能进入中断SCB-》VTOR
2.配置系统中断分组--决定了第一和第二优先级各占用的位数SCB-》
AIRCR
3.配置对应中断优先级和使能中断--中断使能ISER[0/1]中断优先级
IPR[0:15]
280组0:41组1:32组2:23组3:14组4:0
29有规律的,不难设置,例如组2,想用第一优先级1,第二优先级2,
则priority=0110B=0x6
30*返回:无
31******************************************************/
32voidNVIC_Irq_Config(u8irq,u8priority)
相关主题