找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2081|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32的NVIC理解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-12 22:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32有43個channel的settable的中斷源;AIRC(Application Interrupt andReset Register)寄存器中有用于指定優(yōu)先級的4bits。這4個bits用于分配preemption優(yōu)先級和sub優(yōu)先級,在STM32的固件庫中定義如下<br><br>#define NVIC_PriorityGroup_0 ((u32)0x700)<br>#define NVIC_PriorityGroup_1 ((u32)0x600)<br>#define NVIC_PriorityGroup_2 ((u32)0x500)<br>#define NVIC_PriorityGroup_3 ((u32)0x400)<br>#define NVIC_PriorityGroup_4 ((u32)0x300)<br><br>形象化的理解是:<br><br>你是上帝,<br>造了43個人,這么多人要分社會階級和社會階層了;<br>因為“階級”的詞性比較重;"階層"比較中性,<br>所以preemption優(yōu)先級-&gt;階級;每個階級內(nèi)部,有一些階層,sub優(yōu)先級-&gt;階層;<br><br>如果按照NVIC_PriorityGroup_4這么分,就分為了16個階級(1個階層就是1個preemption優(yōu)先級),0個階層;高階級的人,可以打斷低階級的正在做事的人(嵌套),最多可以完成1個中斷和15級嵌套。<br>每個階級(每個preemption優(yōu)先級),你來指定這43人中,誰進入該階級;一個人叫EXTI0_IRQChannel,你指定他進入“階級8”,則<br>NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;<br>NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio<wbr>rity = 8; //指定搶占式優(yōu)先級別1,可取0-15<br><br>另外,在同一階級內(nèi)部,一個人在做事的時候,另外一個人不能打斷他;(preemption優(yōu)先級別相同的中斷源之間沒有嵌套關(guān)系)<br>還有,如果他們兩個同時想做事,因為沒有階層,那么就根據(jù)Vector table中的物理排序,讓排名靠前的人去做;<br><br>又有1個人SPI1_IRQChannel,設(shè)定如下<br>NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;<br>NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio<wbr>rity = 0; //指定搶占式優(yōu)先級別1,可取0-15<br><br>SPI1_IRQChannel的階級高,EXTI0_IRQChannel做事的時候可以打斷(嵌套)。<br><br><br><br>如果按照NVIC_PriorityGroup_3這么分,就分為了8個階級(1個階級是1個preemption優(yōu)先級),每個階級內(nèi)有2個階層(sub優(yōu)先級);高階級的人,可以打斷低階級的正在做事的人(嵌套),最多可以完成1個中斷和7級嵌套。<br><br>每個階級(每個preemption優(yōu)先級),你來指定這43人中,誰進入該階級;一個人叫EXTI0_IRQChannel,你指定他進入“階級3”,則:<br>NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;<br>NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio<wbr>rity = 3; //指定搶占式優(yōu)先級別1,可取0-7<br>還需要指定他的階層:<br>NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //指定響應(yīng)優(yōu)先級別0,可取0-1<br><br>另有1個人叫EXTI9_5_IRQChannel,他的階級和階層設(shè)定如下<br>NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;<br>NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio<wbr>rity = 3; //指定搶占式優(yōu)先級別0,可取0-7<br>NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //指定響應(yīng)優(yōu)先級別1<br><br>那么這兩個人是同一階級的兄弟,一個人在做事的時候,另外一個人不能打斷他;(preemption優(yōu)先級別相同的中斷源之間沒有嵌套關(guān)系)<br>如果他們兩個同時想做事,因為前者的階層高,所以前者優(yōu)先。<br><br>還有一個人叫USART1_IRQChannel,他的階級和階層設(shè)定如下<br>NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;<br>NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio<wbr>rity = 2; //指定搶占式優(yōu)先級別0,可取0-7<br>NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //指定響應(yīng)優(yōu)先級別1<br><br>USART1_IRQChannel的優(yōu)先級最高,當(dāng)前面兩個人做事的時候,他都可以打斷(嵌套)。<br><br>以下的類推。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:74145 發(fā)表于 2016-2-15 12:26 | 只看該作者
理解了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表