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

发布时间 2023-10-11 16:59:18作者: ZaiLi

从下图可以看出,第二列与第三列分别为优先级与优先级类型,优先级类型又分为两种,其一是固定优先级,其二是可编程的优先级。以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