首页 > 其他分享 >关于CH32V系列MCU中断优先级配置以及硬件压栈

关于CH32V系列MCU中断优先级配置以及硬件压栈

时间:2023-10-11 17:01:34浏览次数:40  
标签:配置 优先级 中断 压栈 硬件 嵌套 CH32V MCU

从下图可以看出,第二列与第三列分别为优先级与优先级类型,优先级类型又分为两种,其一是固定优先级,其二是可编程的优先级。以RTC为例,优先级为5,优先级类型为可编程,代表着在不配置RTC的优先级时默认为5,如果需要,也可以将其配置为更高的优先级进行响应。

下图关于中断优先级配置,针对CH32V20x系列,[4:0]位保留,固定为0,[7:5]位为优先级控制位,若配置2级嵌套,bit7为抢占位,bit5&6为子优先级。

配置有无嵌套,即有无抢占位,应在工程目录下Startup文件夹中对应的.s文件内进行修改,如下图。

配置8级嵌套深度,开启硬件压栈溢出后中断使能,INTSYSCR应配置为0x1F(0001 1111)

配置4级嵌套深度,开启硬件压栈溢出后中断使能,INTSYSCR应配置为0x1B(0001 1011)

配置2级嵌套深度,关闭硬件压栈溢出后中断使能,INTSYSCR应配置为0x07(0000 0111)

配置无嵌套,关闭硬件压栈溢出后中断使能,INTSYSCR应配置为0x03(0000 0011)

抢占优先级分组:

NVIC_PriorityGroup_0对应无嵌套

NVIC_PriorityGroup_1对应2级嵌套深度

NVIC_PriorityGroup_2对应4级嵌套深度

NVIC_PriorityGroup_3对应8级嵌套深度

关于中断系统控制寄存器的介绍,可查看对应的青稞微处理器手册,如下图。

关于硬件压栈和软件压栈,CH32V203/307系列可配置2级、4级、8级深度的中断嵌套,实现1位、2位、3位抢占位的配置。硬件压栈深度最大为3级,超过该深度后,低3(或2)级中断为硬件压栈,其余中断为软件压栈。

例如:CH32V307单片机配置中断嵌套深度为8级时,抢占优先级配置位为3位,最大可配置0~7共8个抢占优先级,其数字越小代表优先级越高。此时抢占优先级为0~4的中断(高5级)为软件压栈,5~7的中断(低3级)为硬件压栈。关于硬件压栈级数以及中断嵌套级数,可查看对应的青稞微处理器手册,如下图。

 此外,在CH32V307 EVT中有关于中断嵌套的例程,如下图,可以参考一下,EVT下载链接如下:

https://www.wch.cn/downloads/CH32V307EVT_ZIP.html

 

标签:配置,优先级,中断,压栈,硬件,嵌套,CH32V,MCU
From: https://www.cnblogs.com/liaigu/p/17757632.html

相关文章

  • 关于CH32V系列MCU 免表中断(VTF)的使用配置方法
    可编程快速中断控制器(PFIC)提供四个免表(VectorTableFree)中断通道,可不经过中断向量表的查表过程,直达中断函数入口。个人简单测试过,当开启VTF后,中断延迟时间大概可缩短2个时钟周期左右。关于VTF的具体介绍,可参考对应青稞微处理器手册3.5小节。QingKeV3手册:https://www.wch.cn/do......
  • 关于CH32V307 PA6、7引脚复用为串口1和串口7配置方法
    1、复用为串口1配置方法关于PA6和PA7,重映射串口1时,最后下标为3,如下图。换算成二进制为11,重映射对应的就是PA6、PA7,如下图。由于库中没有直接定义该位,因此将PA6、PA7复用为USART1时,需要进行如下操作,如下图。可直接调用GPIO_PinRemapConfig函数,先调用该函数复用为USART1高位,再......
  • UAV2101~UAV2105编程与仿真51MCU初学者训练
    练习001:51单片机Proteus仿真:点亮一个灯1、器件清单Proteus关键词元器件CAP固定电容CAP-ELEC电解电容AT89C51AT89C51单片机CRYSTAL晶振BUTTON复位按键RES电阻RESPACK排阻LED-YELLOW黄色发光二极管2、电路3、代码#include<reg51.h>/......
  • MCU第一次使用笔记-STC8H1K08
    计时中断开不起来:需要开启定时器,开启总中断控制ET0=1;EA=1;PWM端口指定,按示例无法使用其他端口更改输出端口需要修改PWMA_CCER1,PWMA_ENO,文档描述看的不是太明白ADC使用时需要配置端口状态,还有上拉电阻,另外实际使用时跳动非常大尝试了很多方法:a......
  • ST方案一个MCU带动两个无刷电机驱动的原生逻辑
    TIM1TIM8两个高级定时器,设置TIM2为启动计数触发源,触发时钟同步,并且设置上,两者错开相。核心思路是错开电流采样和处理的时刻1/*disablemainTIMcountertoensure2*asynchronousstartbyTIM2trigger*/3LL_TIM_DisableCounter(TIMx);45LL_T......
  • 痞子衡嵌入式:MCUBootUtility v5.3发布,利用XMCD轻松使能外部RAM
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v5.0.0)发布过去4个多月了,期间痞子衡也做过三个小版本更新,但不足以单独介绍。这一次痞子衡为大家带来了全新重要版本v5.3.x,这次更新主要是想和大家特别聊聊XMCD这个特性的支持。一、v5.1-v5.3更新记录--v5.1.......
  • 启动文件—RISC-V通用MCU启动文件解释
    _start:是整个bin文件的起始,第一个指令是jhandle_reset,跳转到下文的handle_reset处。 _vectop_base:是中断向量表,用于存放中断函数的入口地址.weak是弱声明,此处把所有的中断函数都写了死循环,1: j1b的意思就是死循环,如果在其它.c文件中有声明则以.c中的函数内容为准,这......
  • CH32V203的USBFS在主机和设备下的低功耗唤醒注意事项
    1.如果使用WFE睡眠,醒来后无需重新打开外设时钟;2.如果使用STOP模式睡眠,醒来后需要重新打开外设时钟。 USBFS_RCC_Init();3.STANDBY需要进入之前设置成IO(PB6.PB7)为外部事件,醒来之后设备复位(待机模式唤醒后复位),重新枚举USB。具体配置如下:voidSleep_WakeUp_Deal(){EXTI_Init......
  • CH32V208以太网IAP修改用户区大小注意事项
    CH32v208以太网IAP修改用户区大小注意事项    CH32v208的以太网IAP程序中将FLASH分为3个区域,boot区40k、用户区44k和备份区44k,通过以太网接收到对端设备发来的以太网数据存到备份区中,之后复制到用户区,然后校验跳转,详细使用方法可以看一下例程中附带的使用教程。   ......
  • 【N76E003AT20】新唐MCU使用记录
    N76E003AT20可用引脚数量18个,内核为51系列,CPU最大主频:16MHz工作电压范围:2.4V~5.5V程序存储容量:18KB程序存储器类型:FLASHRAM总容量:1KB。此前用该单片机做为主控设计了车载感应控制盒,当时没有记录开发过程,现在有个项目,我选择该芯片做设计,在此简单记录一下过程与遇到的......