NVIC中斷控制 函數(shù)實現(xiàn)
對于NVIC的任務,可以概括為三個:
1.配置中斷向量表--如果不配置,則不能進入中斷 SCB->VTOR
2.配置系統(tǒng)中斷分組--決定了第一和第二優(yōu)先級各占用的位數(shù) SCB->AIRCR
3.配置對應中斷優(yōu)先級和使能中斷--中斷使能 ISER[0/1] 中斷優(yōu)先級IPR[0:15]
只要按照這樣配置,就可以使用中斷了
1 /******************************************************
2 *函數(shù): NVIC_Group(u8 group)
3 *功能: 設置中斷分組
4 *參數(shù): group-對應分組號 0~4 共5組
5 *返回: 無
6 ******************************************************/
7 void NVIC_Group(u8 group)//設置中斷優(yōu)先級分組寄存器
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 *函數(shù): NVIC_Irq_Config(u8 irq,u8 priority)
25 *功能: 設置中斷irq中斷優(yōu)先級
26 *參數(shù): irq--中斷號
27 priority--中斷優(yōu)先級,4位有效
28 0組0:4 1組1:3 2組2:2 3組3:1 4組4:0
29 有規(guī)律的,不難設置,例如組2,想用第一優(yōu)先級1,第二優(yōu)先級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);// (優(yōu)先級設置)<<(offset*8+4); 45 }