关于NVIC的使命,能够归纳为三个:
1.装备中止向量表–假如不装备,则不能进入中止 SCB-》VTOR
2.装备体系中止分组–决议了榜首和第二优先级各占用的位数 SCB-》AIRCR
3.装备对应中止优先级和使能中止–中止使能 ISER[0/1] 中止优先级IPR[0:15]
只需依照这样装备,就能够运用中止了
1 /******************************************************
2 *函数: NVIC_Group(u8 group)
3 *功用: 设置中止分组
4 *参数: group-对应分组号 0~4 共5组
5 *回来: 无
6 ******************************************************/
7 void NVIC_Group(u8 group)//设置中止优先级分组寄存器
8 {
9
10 u32 temp,temp1;
11 //设置中止向量表,这儿不装备会导致不能进入中止
12 SCB-》VTOR = NVIC_VectTab_FLASH;
13 temp1=(~group)&0x07;//取后三位
14 temp1《《=8;
15 temp=SCB-》AIRCR; //读取从前的设置
16 temp&=0X0000F8FF; //清空从前分组
17 temp|=0X05FA0000; //写入钥匙
18 temp|=temp1;
19 SCB-》AIRCR=temp; //设置分组 寄存器地址0xe000ed00c 能够看cortex m3威望攻略
20 }
21
22
23 /******************************************************
24 *函数: NVIC_Irq_Config(u8 irq,u8 priority)
25 *功用: 设置中止irq中止优先级
26 *参数: irq–中止号
27 priority–中止优先级,4位有用
28 0组0:4 1组1:3 2组2:2 3组3:1 4组4:0
29 有规则的,不难设置,例如组2,想用榜首优先级1,第二优先级2,则priority=0110B=0x6
30 *回来: 无
31 ******************************************************/
32 void NVIC_Irq_Config(u8 irq,u8 priority)
33 {
34 u8 addr_en,offset_en;
35 u8 addr,offset;
36
37 addr=irq/4;
38 offset=irq%4;
39
40 addr_en=irq/32; //中止使能操控寄存器
41 offset_en=irq%32;//中止使能操控位
42
43 NVIC-》ISER[addr_en]|=1《
44 NVIC-》IPR[addr]=priority《《(offset*8+4);// (优先级设置)《《(offset*8+4);
45 }