24小時(shí)聯(lián)系電話:18217114652、13661815404
中文
技術(shù)專題
單片機(jī)開(kāi)發(fā)中斷ISR的原因和條件
單片機(jī)開(kāi)發(fā)中斷的ISR與其他用戶軟件程序不同,屬于特殊的功能類別。原因如下:
1. 單片機(jī)開(kāi)發(fā)中斷的ISR必須是無(wú)效類型的無(wú)參數(shù)傳遞函數(shù),不可見(jiàn)參數(shù)沒(méi)有返回值;
2. 單片機(jī)開(kāi)發(fā)中斷ISR運(yùn)行時(shí)間必須盡可能短,以確保外設(shè)中斷的實(shí)時(shí)性能;
3. 單片機(jī)開(kāi)發(fā)中斷ISR是由硬件外設(shè)而不是其他函數(shù)調(diào)用觸發(fā)的,其運(yùn)行時(shí)序具有隨機(jī)不確定性和硬件實(shí)時(shí)性
在中斷的ISR中需要完成以下工作
1. 處理外設(shè)中斷事件,例如定時(shí)計(jì)數(shù),通信外設(shè)RX數(shù)據(jù)接收或MCU??數(shù)據(jù)緩沖區(qū)填充;
2. 清除引起中斷請(qǐng)求的外設(shè)中斷標(biāo)志,以確保外設(shè)不會(huì)由于中斷ISR操作而丟失下一個(gè)中斷,并且在中斷退出后CPU可以處理其他任務(wù);
為了確保中斷的實(shí)時(shí)性,被中斷的ISR程序應(yīng)盡可能短,并且在中斷ISR中應(yīng)放置條件等待語(yǔ)句或無(wú)限循環(huán)語(yǔ)句。建議用戶通常只將關(guān)鍵處理放在中斷的ISR中,而其他相關(guān)的常規(guī)工作則在主程序中執(zhí)行。典型示例(例如CAN數(shù)據(jù)接收)放置在CAN RX中斷ISR中,并且全局變量通知主程序以執(zhí)行相關(guān)的診斷協(xié)議(例如UDS)。
中斷優(yōu)先級(jí)和中斷嵌套
中斷優(yōu)先級(jí)是指內(nèi)核CPU響應(yīng)硬件外圍設(shè)備中斷的順序。當(dāng)產(chǎn)生不同的硬件外設(shè)中斷時(shí),中斷優(yōu)先級(jí)高的外設(shè)首先由內(nèi)核執(zhí)行;
中斷嵌套意味著外圍中斷具有不同的優(yōu)先級(jí)。當(dāng)CPU響應(yīng)低優(yōu)先級(jí)中斷時(shí)(即,運(yùn)行中斷ISR時(shí)),將打開(kāi)CPU全局中斷。如果到達(dá)更高優(yōu)先級(jí)的中斷,則CPU具有響應(yīng)高優(yōu)先級(jí)中斷而停止當(dāng)前中斷處理區(qū)域的能力,可確保高優(yōu)先級(jí)任務(wù)外設(shè)對(duì)實(shí)時(shí)條件作出響應(yīng):
總結(jié)一下中斷嵌套的必要條件:
1. 不同的外設(shè)中斷源必須具有不同的優(yōu)先級(jí)
單片機(jī)開(kāi)發(fā)中某些MCU的中斷優(yōu)先級(jí)是固定的且不可配置。例如,S12G系列MCU??具有固定的外設(shè)中斷優(yōu)先級(jí),并且中斷向量地址越高,優(yōu)先級(jí)越高。其他MCU的中斷優(yōu)先級(jí)可以靈活配置。例如,S12XE系列MCU的外設(shè)中斷具有8個(gè)優(yōu)先級(jí)設(shè)置,而Qorivva MPC56xx系列MCU的外設(shè)中斷具有16個(gè)優(yōu)先級(jí)。所有MCU的默認(rèn)優(yōu)先級(jí)都相同,因此需要中斷嵌套。根據(jù)外圍任務(wù)的重要性,需要為相應(yīng)的外圍設(shè)備配置不同的優(yōu)先級(jí)。
2. 必須在中斷ISR中打開(kāi)CPU全局中斷
推送中斷時(shí),幾乎所有嵌入式MCU都會(huì)關(guān)閉CPU全局中斷,即默認(rèn)情況下禁用了中斷嵌套。要啟用中斷嵌套,用戶必須在可嵌套的外設(shè)中中斷ISR。手動(dòng)打開(kāi)CPU的全局中斷。
下圖顯示了S12核心CPU中斷堆棧過(guò)程,按下CCR?寄存器,關(guān)閉全局中斷處理,箭頭中的紅色圓圈,硬件設(shè)置了I-BIT(禁用I位外設(shè)中斷),S-BIT(禁止),低功耗指令STOP)和X位(禁止XIRQ中斷)(注:此過(guò)程是用戶無(wú)法控制且不可中斷的“原子”操作)
需要根據(jù)特定任務(wù)確定打開(kāi)全局中斷的時(shí)間。通常建議打開(kāi)中斷ISR,并清除當(dāng)前的外設(shè)中斷標(biāo)志。
請(qǐng)注意,在某些先進(jìn)的MCU(例如Qorivva MPC56xx和基于ARM Cortex M4F內(nèi)核的第一款汽車級(jí)MCU)中,S32K系列MCU還集成了DMA,它們還可以響應(yīng)大多數(shù)片上外圍中斷,然后在通過(guò)DMA清除中斷標(biāo)志,然后移動(dòng)外設(shè)數(shù)據(jù)(不寫入外設(shè)中斷ISR),從而減少了外設(shè)中斷CPU的頻率并提高了CPU效率。