中断—CH32V系列单片机中断优先级 配置说明
CH32V系列单片机中断优先级
配置说明
CH32V系列中断资源概览:
芯片型号 |
芯片内核 |
硬件堆栈级数 |
中断嵌套级数 |
CH32V103 |
RISC-V3A |
2 |
2 |
CH32V203 |
青稞V4B |
2 |
2 |
CH32V307 |
青稞V4F |
3 |
8 |
CH32V103系列:
2级中断嵌套:1位抢占,3位子优先级,即仅可抢占1次
CH32V203/307系列:
可配置2级、4级、8级深度的中断嵌套,实现1位、2位、3位抢占位的配置。硬件压栈深度最大为3级,超过该深度后,低3(或2)级中断为硬件压栈,其余中断为软件压栈。
例如:CH32V307单片机配置中断嵌套深度为8级时,抢占优先级配置位为3位,最大可配置0~7共8个抢占优先级,其数字越小代表优先级越高。此时抢占优先级为0~4的中断(高5级)为软件压栈,5~7的中断(低3级)为硬件压栈。
嵌套深度配置在启动文件中,软件也需根据嵌套深度修改抢占优先级分组。超过3级嵌套深度使用软件压栈时,中断声明应对"WCH-Interrupt-fast"(包含" ")进行注释。
中断系统控制寄存器(INTSYSCR):
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
- |
- |
- |
0/1 |
00/01/10/11 |
0/1 |
0/1 |
位4 硬件压栈溢出后中断使能
位3:2 中断嵌套深度配置
位1 中断嵌套使能
位0 硬件压栈使能
例如:
配置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级嵌套深度
注意事项:使能中断,但不配置优先级,则默认是最高优先级,无法抢占,例如我们的USB例程中只使能了USB中断,没有配置优先级,当需要在USB中断中等待其它中断时,则需要将USB的抢占优先级降低,让其它中断能够抢占。
中断声明规范:
硬件压栈 void WWDG_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
软件压栈 void EXTI1_IRQHandler(void) __attribute__((interrupt()));