NVIC嵌套向量中断控制器--使用归纳

  中断建立一般为三个步骤:                                                                        

1.建立优先级组

2.为该中断指定优先级(抢占级和响应级)

3.使能该中断

分步骤归纳:                                                                                              

一、建立优先级组                                                  

SCB->AIRCR寄存器和NVIC->IP[]寄存器组这两个相关:

首先说明IP寄存器组是一个由240个8bit的寄存器组成,每个可屏蔽中断占用8bit(即一个8bit寄存器配置一个中断的优先级)。但实际只用到这8bit寄存器的高四位[7:4],这四位又分为抢占优先级和子优先级(响应优先级)。抢占优先级在前,子优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组设置来决定。

先设置 SCB->AIRCR的分组,分配关系如图          


执行步骤:

	u32 temp,temp1;	  
	temp1 = (~NVIC_Group) & 0x07; //读取分组
	temp1 <<= 8; //左移到[10:8]
	temp = SCB->AIRCR;  //读取寄存器原先值,后续修改
	temp &= 0X0000F8FF; //清空原有分组
	temp |= 0X05FA0000; //修改寄存器内容,需要写入0x05FA密钥
	temp |= temp1;	  //添加分组信息 
	SCB->AIRCR=temp;  //写入寄存器,设置分组	

二、为该中断指定优先级(抢占级和响应级)     

上一步已设置好分组,接着设置中断的优先级

(例如分组2,强占优先级3,子优先级3,设置串口1的中断优先级,串口在中断和异常向量表中位置为37)

NVIC->IP[37] = ((3 << 2) | (3 & (0xf  >> 2))) << 4;

三、使能该中断                                                  

ISER[8] 由8个32位寄存器组成,每个位控制一个中断。

NVIC->ISER[37 / 32] = 1 << (37 % 32);

你可能感兴趣的:(stm32f103,arm开发)