STM32F429寄存器_NVIC

我就喜欢用寄存器操作 , 敲代码很爽很爽~~!! 工作中为方便查阅 , 把各个外设整理成了表格 .


SCB

  • 分组号决定: 抢占级和优先级的位数. SCB_AIRCR[10:8]的值, 决定NVIC_IP[x]高四位中, 几位抢占级,几位优先级. 低4位无效.
  • 这寄存器中我们只需写入 分组号 , 0~7. 写值时,要同时写密匙.下面代码有例子,简单.

NVIC

  • NVIC 芯片内处理中断优先级关系的内部小系统, 也简单,系统在内部都安排好了. 只理解3项: 向量表, 寄存器IP, 寄存器ISER
  • 优先级嵌套向量表 ,名词很唬, 人话 : 主级和子级的优先关系默认排序表 , 详表: DataSheet的237页.
  • NVIC_IP[x] , x : 向量表中的中断通道编号 , NVIC_IP[37]=xx; //USART1中断通道写入主级和子级优先值.
  • NVIC_ISER , 通道使能, 3组32位,顺序 对应 向量表 , 每一位代表一个通道, 写入要计算好位置 .

没了 , 就这四个知识点, NVIC就是优先级分级,分主级和子级, 各种教程吹得太深而已

在这里插入图片描述

NVIC的寄存器表没有, 有点难查, 没整理好, 好了再补全吧

/***************************************************************************** 
  * @brief  中断优先级
  * @note   默认设置为组2,即IP[]中,[7:6]抢占, [5:4]响应
  *         @arg     [Channel]    中断通道预设值, 值在 stm32f4xx.h文件 86行
  *         @art     [Preemption] 抢占级 <=3
  *         @arg     [SUB]        响应级 <=3
  *         @retval   None
  *         @data     2019-4-1
  **/
  
void NVIC_Config(uint8_t NVIC_Channel,uint8_t Preemption,uint8_t SUB)
 {	    
     // 全局分级设置,统一为组2, 主级2位, 子级2位         
     SCB->AIRCR = ((u32)0x05FA0000)|(0x05<<8);      	           // 优先级分组设置		               
     
     // 通道中断优先级设置
     NVIC->IP[NVIC_Channel] &= ~(0xF<<4);                          // 清空 ,  		 
     NVIC->IP[NVIC_Channel]  =  (Preemption&0x3)<<6|(SUB&0x3)<<4;  // 写入抢占级\优先级
     
     // 通道中断使能
     NVIC->ISER[NVIC_Channel/32] |= 1 << (NVIC_Channel % 32);      // 使能中断通道		 
 }
发布了44 篇原创文章 · 获赞 20 · 访问量 9561

猜你喜欢

转载自blog.csdn.net/zhouml_msn/article/details/92070766