電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 69|回復(fù): 0
收起左側(cè)

MCU中斷沒有子優(yōu)先級?

[復(fù)制鏈接]

418

主題

418

帖子

4293

積分

四級會員

Rank: 4

積分
4293
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-12-9 11:45:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
作者 | strongerHuang
微信公眾號 | strongerHuang
看到一個交流群在討論關(guān)于【關(guān)于STM32中斷優(yōu)先級的話題】,其中就有小伙伴提到:為什么有些STM32中斷沒有【子優(yōu)先級】?
比如,有時候你在使用STM32CubeMX配置時,你會發(fā)現(xiàn)只有Preemption Priority【搶占優(yōu)先級】,而沒有Sub Priority【次優(yōu)先級】:

然而,有時候你會發(fā)現(xiàn)又有Sub Priority【次優(yōu)先級】:

這個問題就牽涉到STM32,準(zhǔn)確的來說的是 Cortex-M NVIC 嵌套向量中斷控制器的問題。

下面就展開來說說關(guān)于ARM單片機(jī)NVIC的內(nèi)容。
關(guān)于Cortex-M的NVIC
NVIC:Nested Vectored Interrupt Controller,嵌套向量中斷控制器。
在每個Cortex-M內(nèi)核中都有這么一個NVIC嵌套向量中斷控制器,當(dāng)MCU使用的內(nèi)核不同,其中的NVIC也可能不同。
比如,Cortex-M0和Cortex-M3內(nèi)核中NVIC功能就不同。
其中,中斷優(yōu)先級分組功能就不同。
Cortex-M0的NVIC沒有優(yōu)先級分組功能,Cortex-M3、 M4、M7有分組功能。

所以,你在使用STM32CubeMX配置時,M0/M0+內(nèi)核的STM32是沒有【次優(yōu)先級】那個選項的。
Cortex-M0包含STM32F0、L0、G0等處理器。
對底層感興趣的朋友可以繼續(xù)往下看。
NVIC寄存器
NVIC寄存器,需查看對應(yīng)的內(nèi)核(Cortex-M)手冊,在ARM官網(wǎng)能找到(M3也有對應(yīng)的中文翻譯版,大家可以自己網(wǎng)上搜索)。
內(nèi)核中的寄存器和我們STM32參考手冊中寄存器一樣,不同的Bit位代表含義不同。
但是,對于NVIC來說,由于包含眾多優(yōu)先級相關(guān)配置,寄存器數(shù)量相對較多(NVIC寄存器族)。


拿M3來說,優(yōu)先級分組的配置,位于NVIC的AIRCR應(yīng)用程序中斷及復(fù)位控制寄存器中:

這里推薦閱讀之前我寫過的一篇文章:Cortex-M中斷在RTOS中的應(yīng)用及注意事項
中斷入口
額外提下一個小伙伴問的問題:為什么外部中斷8和9都使用同一個中斷?
  • void EXTI9_5_IRQHandler(void){  if(EXTI_GetITStatus(EXTI_Line8) != RESET)  {    /* 代碼 */    EXTI_ClearITPendingBit(EXTI_Line8);  }  if(EXTI_GetITStatus(EXTI_Line9) != RESET)  {    /* 代碼 */    EXTI_ClearITPendingBit(EXTI_Line9);  }}我想,這個問題應(yīng)該不難。好比一個main程序入口,進(jìn)入之后需要處理很多事情,只是在里面需要區(qū)分事件。
    很多外設(shè)中斷,都會使用同一個中斷入口,有一個原因:節(jié)約中斷入口資源分配。
    像USART發(fā)送和接收中斷,TIM不同通道捕獲中斷等。
    ------------ END ------------

    ●專欄《嵌入式工具●專欄《嵌入式開發(fā)》●專欄《Keil教程》●嵌入式專欄精選教程
    關(guān)注公眾號回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。
    點擊“閱讀原文”查看更多分享。
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表