×
单片机 > 单片机程序设计 > 详情

NVIC中断控制 函数实现

发布时间:2020-05-16 发布时间:
|

对于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<

45 }




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机的多路AD切换程序设计