当前位置: 首页 > news >正文

NVIC相关寄存器

用户中断控制相关寄存器

  • 16~479用户中断
  • 相关寄存器

中断使能、失能寄存器

  • NVIC->ISER[0] ~ NVIC->ISER[15]
  • NVIC->ICER[0] ~ NVIC->ICER[15]
voidNVIC_EnableIRQ(IRQn_Type IRQn);// Enables an interruptvoidNVIC_DisableIRQ(IRQn_Type IRQn);// Disables an interrupt

中断挂起、解挂寄存器

  • NVIC->ISPR[0] ~ NVIC->ISPR[15]
  • NVIC->ICPR[0] ~ NVIC->ICPR[15]
voidNVIC_SetPendingIRQ(IRQn_Type IRQn);// Sets the pending status of an interruptvoidNVIC_ClearPendingIRQ(IRQn_Type IRQn);// Clears the pending status of an interruptuint32_tNVIC_GetPendingIRQ(IRQn_Type IRQn);// Reads the pending status of a interrupt

中断活跃状态寄存器

  • <font style="color:rgb(51,51,51);">NVIC->IABR[0] ~ NVIC->IABR[15]</font>
uint32_tNVIC_GetActive(IRQn_Type IRQn);

中断目标非安全寄存器

  • NVIC->ITNS[0] ~ NVIC->ITNS[15]
uint32_tNVIC_SetTargetState(IRQn_Type IRQn);// Sets interrupt as Non-secureuint32_tNVIC_ClearTargetState(IRQn_Type IRQn);// Sets interrupt as Secureuint32_tNVIC_GetTargetState(IRQn_Type IRQn);// Reads the target security state

优先级寄存器

  • NVIC->IPR[0] ~ NVIC->IPR[495]
voidNVIC_SetPriority(IRQn_Type IRQn,uint32_tpriority);// Sets the priority level of an IRQ/ exceptionuint32_tNVIC_GetPriority(IRQn_Type IRQn);// Obtains the priority level of an interrupt or exception

软件触发中断寄存器(ArmV8-M 独有)

  • NVIC->STIR
NVIC->STIR=3;// Triggers IRQ #3

系统异常相关SCB寄存器

  • 1~15系统异常
  • 相关寄存器

中断控制和状态寄存器

  • SCB->ICSR
  • 设置和清除系统异常的挂起状态
  • 通过读取 VECTACTIVE 字段决定当前执行的异常/中断号
  • 配置SysTick的安全状态

系统中断优先级寄存器

  • SCB->SHP[0] ~ SCB->[11]
  • 只有SVC,PendSV,SysTick异常的优先级能编程

应用中断和复位控制寄存器

  • SCB->AIRCR
  • [10:8] PRIGROUP: 控制优先级分组

//Set Priority GroupvoidNVIC_SetPriorityGrouping(uint32_tPriorityGroup);//Get Priority Groupuint32_tNVIC_GetPriorityGrouping(uint32_tPriorityGroup);//Encodes the priority for an interrupt with the given priority groupuint32_tNVIC_EncodePriority(uint32_tPriorityGroup,uint32_tPreemptPriority,uint32_tSubpriority);//Decodes an interrupt priority value with a given priority group to\ preemptive priority value and subpriority value.voidNVIC_DecodePriority(uint32_tPriority,uint32_tPriorityGroup,uint32_t*constpPreemptPriority,uint32_t*constpSubPriority);

系统处理控制和状态寄存器

  • SCB->SHCSR
  • 配置错误异常的使能和挂起
  • 指示系统异常是否在活跃的状态

异常或中断屏蔽寄存器

PRIMASK

  • 使能后,所有优先级大于等于0的中断都会被屏蔽(除了NMI, HardFault)
void__enable_irq();// Clears PRIMASKvoid__disable_irq();// Sets PRIMASKvoid__set_PRIMASK(uint32_tpriMask);// Sets PRIMASK to valueuint32_t__get_PRIMASK(void);// Reads the PRIMASK value

FAULTMASK

  • 只有ArmV8-M(Cortex-M33)和 ArmV7-M(Cortex-M3/M4//M7)有此寄存器
  • 使能后,比PRIMASK寄存器多屏蔽了HardFault中断
void__enable_fault_irq(void);// Clears FAULTMASKvoid__disable_fault_irq(void);// Sets FAULTMASK to disable interruptsvoid__set_FAULTMASK(uint32_tfaultMask);// Sets FAULTMASKuint32_t__get_FAULTMASK(void);// Reads FAULTMASK

BASEPRI

  • 只有ArmV8-M(Cortex-M33)和 ArmV7-M(Cortex-M3/M4//M7)有此寄存器
  • 设置值为优先级,设置后,屏蔽优先级≥设置优先级的中断
void__set_BASEPRI(uint32_tpriMask);//Sets the BASEPRI registeruint32_t__get_BASEPRI(void);//Reads the BASEPRI register

VTOR

  • Vector Table Offset Resgister 向量表偏移量寄存器,用于向量表重定位
  • $VectorAddress = Exception Number * 4 + Vector Table Offset$
  • 向量表重定向可能的用途:
    • 把向量表从FLASH重定位到RAM,加快访问速度
    • 向量表重定位到RAM,可以动态修改向量表中的中断处理程序地址
    • 代码区存在不同的运行代码(比如用户boot 和 用户APP),需要各自的向量表
  • 向量表偏移后的起始地址,必须是128字节的倍数(M23核)或256字节的倍数(M33核)

外设中断处理流程

  • 声明一个中断处理函数,函数名需要和启动代码中的中断处理函数名一样
  • 确保中断处理函数清除了中断请求,如果是脉冲方式的中断请求,这个操作不是必须的
  • 确保下面的软件初始化步骤
    • 设置中断优先级
    • 从NVIC中使能中断
    • 初始化外设功能
    • 外设中断使能
// Set Timer0_IRQn priority level to 0xC0 (4 bit priority)NVIC_SetPriority(Timer0_IRQn,0xC0);//Shift to 0xC0 by CMSIS function// Enable Timer 0 interrupt at NVICNVIC_EnableIRQ(Timer0_IRQn);Timer0_initialize();// Device specific code to initialize timer 0...voidTimer0_Handler(void){...// timer 0 interrupt processing...// Clear timer 0 IRQ request (needed for level triggered IRQs)return;}
http://www.jsqmd.com/news/465835/

相关文章:

  • AI写教材新玩法!掌握低查重技巧,高效完成教材编写任务
  • 直接上干货!今天咱们聊聊怎么用Matlab实现基于动态窗口法(DWA)的机器人避障。这个算法特别适合处理突发障碍物,先扔个可以直接运行的代码框架
  • 网站被挂马、后台被入侵处理全流程
  • OpenClaw好部署吗?2026年OpenClaw(Clawdbot)新手1分钟搭建超简单指南
  • 如何快速将天虹提货券回收变现?一文带你了解操作流程! - 团团收购物卡回收
  • 腾讯云OpenClaw(Clawdbot)2026年小白2分钟保姆级集成教程
  • 为什么 AutoClaw 能成为 OpenClaw 的 “最优平替”?
  • 模板整理
  • 网站被黑跳转广告、恶意链接清理方法
  • 阿里云OpenClaw(Clawdbot)2026年10分钟萌新安装保姆级方法
  • Python基于flask+uniapp微信小程序的茶益游 茶叶茶友圈文化分享交流 Android的茶文化宣传平台
  • 2026年Q1防火电缆加工厂五强深度解析 - 2026年企业推荐榜
  • ThinkPHP和PHP的区别
  • Python基于flask+uniapp微信小程序的高校学科竞赛参赛申请管理系统
  • 华为云OpenClaw(Clawdbot)2026年4分钟喂奶级安装流程指南
  • 京东云怎么部署OpenClaw?OpenClaw(Clawdbot)2026年8分钟保姆级安装流程指南
  • Python基于flask+uniapp微信小程序的的酒店预订系统的设计与实现
  • 基于深度学习框架基于YOLOV8中草药识别检测系统 YOLOV8模型如何训练中草药检测数据集
  • 轻量化GE-GRU-VAE:多维时间序列异常检测的工业级突破与前沿探索
  • Python基于flask+uniapp微信小程序的的饮食健康管理系统
  • 射频定向耦合器:原理、设计与工程实践
  • 重庆火锅新选择:本地人亲测好吃的火锅店TOP榜,特色美食/社区火锅/火锅店/火锅/美食,火锅品牌排行 - 品牌推荐师
  • 网站Class think\XXX not found(类找不到)错误怎么办|已解决
  • Python基于flask+uniapp微信小程序的福建畲族文创商城文化交流与交易平台
  • 微波放大器核心参数详解:功率、增益、匹配与稳定性
  • Python基于flask+uniapp微信小程序的的计算机精品课程在线学习互动系统演示 聊天
  • 2026年离子交换设备源头厂家盘点,优质选择看这里,反渗透设备/离子交换设备/净水机,离子交换设备实力厂家推荐 - 品牌推荐师
  • 产业园区如何降低科技服务平台建设成本?
  • 微波射频中的非线性效应:分析、应用与抑制
  • jenkins有何特性?jenkins常用功能介绍