24小时联系电话:18217114652、13661815404
中文
技术专题
单片机开发中断ISR的原因和条件
单片机开发中断的ISR与其他用户软件程序不同,属于特殊的功能类别。原因如下:
1. 单片机开发中断的ISR必须是无效类型的无参数传递函数,不可见参数没有返回值;
2. 单片机开发中断ISR运行时间必须尽可能短,以确保外设中断的实时性能;
3. 单片机开发中断ISR是由硬件外设而不是其他函数调用触发的,其运行时序具有随机不确定性和硬件实时性
在中断的ISR中需要完成以下工作
1. 处理外设中断事件,例如定时计数,通信外设RX数据接收或MCU 数据缓冲区填充;
2. 清除引起中断请求的外设中断标志,以确保外设不会由于中断ISR操作而丢失下一个中断,并且在中断退出后CPU可以处理其他任务;
为了确保中断的实时性,被中断的ISR程序应尽可能短,并且在中断ISR中应放置条件等待语句或无限循环语句。建议用户通常只将关键处理放在中断的ISR中,而其他相关的常规工作则在主程序中执行。典型示例(例如CAN数据接收)放置在CAN RX中断ISR中,并且全局变量通知主程序以执行相关的诊断协议(例如UDS)。
中断优先级和中断嵌套
中断优先级是指内核CPU响应硬件外围设备中断的顺序。当产生不同的硬件外设中断时,中断优先级高的外设首先由内核执行;
中断嵌套意味着外围中断具有不同的优先级。当CPU响应低优先级中断时(即,运行中断ISR时),将打开CPU全局中断。如果到达更高优先级的中断,则CPU具有响应高优先级中断而停止当前中断处理区域的能力,可确保高优先级任务外设对实时条件作出响应:
总结一下中断嵌套的必要条件:
1. 不同的外设中断源必须具有不同的优先级
单片机开发中某些MCU的中断优先级是固定的且不可配置。例如,S12G系列MCU 具有固定的外设中断优先级,并且中断向量地址越高,优先级越高。其他MCU的中断优先级可以灵活配置。例如,S12XE系列MCU的外设中断具有8个优先级设置,而Qorivva MPC56xx系列MCU的外设中断具有16个优先级。所有MCU的默认优先级都相同,因此需要中断嵌套。根据外围任务的重要性,需要为相应的外围设备配置不同的优先级。
2. 必须在中断ISR中打开CPU全局中断
推送中断时,几乎所有嵌入式MCU都会关闭CPU全局中断,即默认情况下禁用了中断嵌套。要启用中断嵌套,用户必须在可嵌套的外设中中断ISR。手动打开CPU的全局中断。
下图显示了S12核心CPU中断堆栈过程,按下CCR 寄存器,关闭全局中断处理,箭头中的红色圆圈,硬件设置了I-BIT(禁用I位外设中断),S-BIT(禁止),低功耗指令STOP)和X位(禁止XIRQ中断)(注:此过程是用户无法控制且不可中断的“原子”操作)
需要根据特定任务确定打开全局中断的时间。通常建议打开中断ISR,并清除当前的外设中断标志。
请注意,在某些先进的MCU(例如Qorivva MPC56xx和基于ARM Cortex M4F内核的第一款汽车级MCU)中,S32K系列MCU还集成了DMA,它们还可以响应大多数片上外围中断,然后在通过DMA清除中断标志,然后移动外设数据(不写入外设中断ISR),从而减少了外设中断CPU的频率并提高了CPU效率。