近期在开发过程中,尝试了中断嵌套的一些实验,有些地方感觉到有点疑惑,实验情况如下:
启动汇编文件中,CSR寄存器设定为“0x1F”,按照《QingkeV4》手册,这个是4级嵌套,硬件压栈,高优先级的中断处理函数配置为软件压栈,低优先级配置为硬件压栈。
启用“SysTick”,“Software”,“Uart1”三个中断处理函数。均设定为硬件压栈(“Software”来自RTT的汇编源代码,我看不出来是不是启用了硬件压栈)。软件有使用RT-Thread操作系统。
现在的实验结果是:
NVIC_SetPriority(Software_IRQn, 0xE0); NVIC_SetPriority(USART1_IRQn, 0x00); 时,系统正常。
NVIC_SetPriority(Software_IRQn, 0x00); NVIC_SetPriority(USART1_IRQn, 0xE0); 时,系统启动正常,但当串口中断发生之后,系统挂死。
多次修改数据实验之后,发现,只要“Software”中断的等级调高(比串口中断的优先级更高),那么系统启动正常,串口中断发生后,必定挂死。不知道是什么原因呢?可否得到一些讲解?谢谢。