|
作者 | strongerHuang
微信公眾號 | strongerHuang
看到一個交流群在討論關(guān)于【關(guān)于STM32中斷優(yōu)先級的話題】,其中就有小伙伴提到:為什么有些STM32中斷沒有【子優(yōu)先級】?
比如,有時候你在使用STM32CubeMX配置時,你會發(fā)現(xiàn)只有Preemption Priority【搶占優(yōu)先級】,而沒有Sub Priority【次優(yōu)先級】:
sissh55b3u064088250331.png (179.69 KB, 下載次數(shù): 0)
下載附件
保存到相冊
sissh55b3u064088250331.png
2024-12-10 08:32 上傳
然而,有時候你會發(fā)現(xiàn)又有Sub Priority【次優(yōu)先級】:
aikkg00ma5064088250431.png (214 KB, 下載次數(shù): 1)
下載附件
保存到相冊
aikkg00ma5064088250431.png
2024-12-10 08:32 上傳
這個問題就牽涉到STM32,準確的來說的是 Cortex-M NVIC 嵌套向量中斷控制器的問題。
下面就展開來說說關(guān)于ARM單片機NVIC的內(nèi)容。
關(guān)于Cortex-M的NVIC
NVIC:Nested Vectored Interrupt Controller,嵌套向量中斷控制器。
在每個Cortex-M內(nèi)核中都有這么一個NVIC嵌套向量中斷控制器,當MCU使用的內(nèi)核不同,其中的NVIC也可能不同。
比如,Cortex-M0和Cortex-M3內(nèi)核中NVIC功能就不同。
其中,中斷優(yōu)先級分組功能就不同。
Cortex-M0的NVIC沒有優(yōu)先級分組功能,Cortex-M3、 M4、M7有分組功能。
zgdlyy4nixk64088250531.jpg (147.3 KB, 下載次數(shù): 0)
下載附件
保存到相冊
zgdlyy4nixk64088250531.jpg
2024-12-10 08:32 上傳
所以,你在使用STM32CubeMX配置時,M0/M0+內(nèi)核的STM32是沒有【次優(yōu)先級】那個選項的。
Cortex-M0包含STM32F0、L0、G0等處理器。
對底層感興趣的朋友可以繼續(xù)往下看。
NVIC寄存器
NVIC寄存器,需查看對應的內(nèi)核(Cortex-M)手冊,在ARM官網(wǎng)能找到(M3也有對應的中文翻譯版,大家可以自己網(wǎng)上搜索)。
內(nèi)核中的寄存器和我們STM32參考手冊中寄存器一樣,不同的Bit位代表含義不同。
但是,對于NVIC來說,由于包含眾多優(yōu)先級相關(guān)配置,寄存器數(shù)量相對較多(NVIC寄存器族)。
pno0d3yb4nn64088250632.jpg (350.32 KB, 下載次數(shù): 0)
下載附件
保存到相冊
pno0d3yb4nn64088250632.jpg
2024-12-10 08:32 上傳
拿M3來說,優(yōu)先級分組的配置,位于NVIC的AIRCR應用程序中斷及復位控制寄存器中:
een44dgwwha64088250732.jpg (285.79 KB, 下載次數(shù): 0)
下載附件
保存到相冊
een44dgwwha64088250732.jpg
2024-12-10 08:32 上傳
這里推薦閱讀之前我寫過的一篇文章:Cortex-M中斷在RTOS中的應用及注意事項
中斷入口
額外提下一個小伙伴問的問題:為什么外部中斷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); }}我想,這個問題應該不難。好比一個main程序入口,進入之后需要處理很多事情,只是在里面需要區(qū)分事件。
很多外設(shè)中斷,都會使用同一個中斷入口,有一個原因:節(jié)約中斷入口資源分配。
像USART發(fā)送和接收中斷,TIM不同通道捕獲中斷等。
------------ END ------------
0fcp0w51lmw64088250832.gif (71.87 KB, 下載次數(shù): 0)
下載附件
保存到相冊
0fcp0w51lmw64088250832.gif
2024-12-10 08:32 上傳
●專欄《嵌入式工具》●專欄《嵌入式開發(fā)》●專欄《Keil教程》●嵌入式專欄精選教程
關(guān)注公眾號回復“加群”按規(guī)則加入技術(shù)交流群,回復“1024”查看更多內(nèi)容。
點擊“閱讀原文”查看更多分享。 |
|