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

来源:互联网 发布:淘宝网站模板下载 编辑:程序博客网 时间:2024/06/15 23:45

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

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);

阅读全文
0 0
原创粉丝点击