关于NVIC中断设置
NVIC是stm32内核的中断,下面给出在cm3权威指南中关于nvic的描述:
8.2 中断配置基础 每个外部中断都在 NVIC 的下列寄存器中“挂号”:
使能与除能寄存器
悬起与“解悬”寄存器
优先级寄存器
活动状态寄存器
另外,下列寄存器也对中断处理有重大影响
异常掩蔽寄存器(PRIMASK, FAULTMASK 以及 BASEPRI)
向量表偏移量寄存器
软件触发中断寄存器
优先级分组位段
说明在nvic中有一张表(一连串的地址),记录了每一个中断的使能位,优先位
下面再来看看中断初始化的函数nvic的初始化结构体nvic_inittypedef和初始化函数nvic_init
typedef struct {u8 NVIC_IRQChannel;//中断号u8 NVIC_IRQChannelPreemptionPriority;//抢占优先级u8 NVIC_IRQChannelSubPriority;//响应优先级FunctionalState NVIC_IRQChannelCmd;//使能与否
} NVIC_InitTypeDef;
void NVIC_Init(NVIC_InitTypeDef* init_struct)
{if (init_struct->NVIC_IRQChannelCmd != DISABLE) {u32 pri = (SCB_AIRCR_PRIGROUP & ~(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk)) >> SCB_AIRCR_PRIGROUP_Pos;pri = (((u32)init_struct->NVIC_IRQChannelPreemptionPriority << (0x4 - pri)) |(init_struct->NVIC_IRQChannelSubPriority & (0x0F >> pri)))<< 0x04;NVIC->IP[init_struct->NVIC_IRQChannel] = pri;NVIC->ISER[init_struct->NVIC_IRQChannel >> 0x05] = 0x01 << (init_struct->NVIC_IRQChannel & 0x1F);}else {NVIC->ICER[init_struct->NVIC_IRQChannel >> 0x05] = 0x01 << (init_struct->NVIC_IRQChannel & 0x1F);}}
typedef struct {__IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */uint32_t RESERVED0[24U];__IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */uint32_t RSERVED1[24U];__IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */uint32_t RESERVED2[24U];__IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */uint32_t RESERVED3[24U];__IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */uint32_t RESERVED4[56U];__IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */uint32_t RESERVED5[644U];__OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */
} NVIC_Type;
一个感性的认知,就不细究了,顺便一提,中断优先组最好设置为组4,无响应优先级,os里面可能会用到
关于NVIC中断设置相关推荐
- (四)STM32F407总线架构、时钟系统配置相关的函数,IO 引脚复用器和映射,NVIC中断管理,寄存器地址映射
基础知识 一.GPIO输入输出各种模式 二.STM32F407总线架构 三.STM32F407时钟系统 (1) STM32F4 时钟树概述 (2)STM32F4 时钟初始化配置 (3)STM32F4 ...
- U24 NVIC中断配置
2022.5.4 U24 NVIC中断配置 (是什么)NVIC优先级分组 怎么用: 1.中断优先级分组函数(main函数前面声明): 2.设置单个中断的抢占优先级和响应优先级(c文件中单独设置) 总结 ...
- stm32中断设置(寄存器讲解)
与51对比 对比51来说,51的中断就那么几个,但中断的分类大体都差不多,分为内部中断和外部中断. 51的内部中断是定时器中断,串口中断,外部中断是外部中断0和1. 而stm32的中断就比51多太多了 ...
- Omap3530 的GPIO中断设置
Omap3530 的GPIO中断设置: 1.配置成GPIO,申请GPIO中断 omap_cfg_reg(OMAP3_KBD_GPIO);配置成gpio if (gpio_request(OMAP3_K ...
- STM32 NVIC中断
STM32 NVIC中断 注意事项 抢占优先级允许中断嵌套,响应优先级不允许中断嵌套. 配置参数 /*** @brief Configures the priority grouping: pre-e ...
- stm32关定时器_STM32定时器中断设置方法
今天调试了STM32的定时器功能,STM32定时器比较多,但调试都是一样的,寄存器都是一一对应的.就拿TIM2举例说明.在网上搜了好多关于定时器的设置,但大多数都是一个版本,而且都是针对库函数操作的, ...
- N76E003中断设置流程
首先说明N76E003所有引脚都可用于中断 N76E003为每个1/O引脚提供引脚中断输入,如果使用按钮或小键盘集,则检测引脚状态.通过l/O端口共享,可以分配一个最大8通道引脚中断检测.当键盘或小键 ...
- STM32高级定时器TIM1TIM8中断设置提醒
最近要用STM32F103RCT6的TIM8做输入捕获,网上不好找到可以直接搬运的代码,然后就移植TIM2的输入捕获做,然后一直遇到匪夷所思的问题! 出现的问题就是,在主函数进入while循环前配置好 ...
- synchronized 与 Reentrant均为可重入锁 区别后者比前者增加了长时等待可中断 设置是否公平锁 绑定多个条件
① 两者都是可重入锁 两者都是可重入锁."可重入锁"概念是:自己可以再次获取自己的内部锁.比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时 ...
最新文章
- KitKat系统发现BUG:付费输入法更新后自动停用
- c#与科学计算之一:发掘 C# 特性赋予科学计算项目以威力(转贴)
- 金山卫士UI原理解析(2)CBkWindow
- adb devices 里面有很多 emulator-XXXX的解决方法
- 通过数组和枚举简化GPIO操作编码
- 不懂代码,如何做出实时刷新的数据大屏?
- java 线程 free_Java进阶05 多线程
- Outlook2010新建域内Exchang邮箱的另一种方法
- bash 别名_必不可少的Bash别名
- 监听套接字是非阻塞的,accept()返回的连接套接字是否也是阻塞的?
- 有赞团队:SaaS公司的系统稳定与安全机制,附Saas研报
- 阿里巴巴JAVA编码规范考试
- 数字图像处理(极简) 第一章 概述(docx)
- CSS3_04_弹性盒子_多媒体
- three.js实现世界地图城市迁徙图
- 对论文中模型进行编程实现时的注意要求和总结
- 鹤林全集·闲情志友 | 第一篇——阿鑫
- 手把手带你撸一个校园APP(八):校园通讯录模块
- 在使用firefly的RK3308的SDK使用buildroot构造文件系统时,遇到OEM分区和userdata不能挂在成功的问题
- MPLS之LDP协议
热门文章
- 浅析关系数据库和NoSql非关系数据库
- 上海科技馆 计算机,上海科技馆地图及各楼层介绍
- 智能催收系统中自然语言理解模块设计
- matlab观察函数logax,若a》1,函数fx=loga(x)-sinx恰有3个零点,则a的取值范围是?
- 自行拆包,疯狂魔改(jar)
- zemax学习笔记-光学系统中如何查询单个透镜的焦距
- python对数字排序_Python中数据的排序
- 海思IVE遮挡报警算法(OD)
- 3ds max文件导出osg或者ive格式
- 屏幕录制软件怎么用?录制电脑屏幕的技巧