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