對(duì)于中斷優(yōu)先級(jí)配置的需求實(shí)際上主要體現(xiàn)在系統(tǒng)存在多個(gè)可能的中斷源情況下,這時(shí)為了保證代碼的可靠執(zhí)行,我們不得不考慮很現(xiàn)實(shí)的兩個(gè)問(wèn)題,一個(gè)是如果兩個(gè)以上中斷同時(shí)發(fā)生,pending請(qǐng)求到CPU,CPU決策該先進(jìn)哪一個(gè)相應(yīng)的中斷服務(wù)Routine,第二個(gè)問(wèn)題是CPU當(dāng)前已經(jīng)在響應(yīng)某個(gè)中斷服務(wù),此時(shí)來(lái)了另一個(gè)中斷請(qǐng)求,是否允許其打斷當(dāng)前中斷服務(wù)轉(zhuǎn)而響應(yīng)新的中斷請(qǐng)求即我們常說(shuō)的中斷嵌套問(wèn)題,不要告訴我沒(méi)考慮過(guò)哈(如果真是這樣,我只能不客氣的說(shuō),這樣搞單片機(jī)是不負(fù)責(zé)任的,很可能給項(xiàng)目帶來(lái)潛在的風(fēng)險(xiǎn)bug),那樣的話俺也白寫(xiě)了,呵呵。那正題來(lái)了,對(duì)現(xiàn)在紅紅火火的ARM Cortex-M4和M0+兩個(gè)核來(lái)說(shuō),他們是如何解決這兩個(gè)問(wèn)題的呢,因?yàn)檫@兩個(gè)核在中斷優(yōu)先級(jí)管理上略有些區(qū)別(雖然都是NVIC和SCB兩個(gè)寄存器來(lái)管理),所以下面我分開(kāi)來(lái)說(shuō),另外由于中斷優(yōu)先級(jí)管理屬于內(nèi)核問(wèn)題,所以這方面的信息你不會(huì)在各大半導(dǎo)體廠家的官方手冊(cè)中找到,我們只能追根溯源直接到內(nèi)核的老家ARM官網(wǎng)去找,建議大家有興趣的到ARM官網(wǎng)把M4和M0+的內(nèi)核手冊(cè)下載下來(lái)簡(jiǎn)單瞅瞅,可能會(huì)有意想不到的收獲哦,呵呵:
ARM Cortex-M0+中斷優(yōu)先級(jí)和嵌套
無(wú)論是M0+或者是M4內(nèi)核,實(shí)際上他們兩個(gè)的中斷優(yōu)先級(jí)都是由NVIC和SCB兩個(gè)寄存器來(lái)管理的,在這里我默認(rèn)大家都知道ARM的中斷源分為內(nèi)核中斷和IRQ中斷了哈(我怕再細(xì)講下去又沒(méi)完了,呵呵),而對(duì)IRQ的中斷管理是由NVIC來(lái)主導(dǎo)的,內(nèi)核的中斷管理則是由SCB來(lái)主導(dǎo)的,我們先講IRQ中斷的優(yōu)先級(jí)問(wèn)題(關(guān)于中斷使能和禁能不在本篇討論范圍內(nèi)哈),打開(kāi)M0+的內(nèi)核手冊(cè)找到NVIC_IPR寄存器(Interrupt Priority Registers)如下圖所示:
注意觀察我高亮標(biāo)注的幾塊,從這幾塊中可以抽象出核心的幾個(gè)問(wèn)題,第一個(gè)是NVICIPR一共有8個(gè)寄存器,而每個(gè)寄存器管理4個(gè)IRQ中斷,乘法口訣算一下,我們就明白了為啥M0+的IRQ中斷源最多只支持32個(gè)了,再加上16個(gè)內(nèi)核中斷,加法口訣再算一下,也就是說(shuō)M0+最多就是48個(gè)中斷源,所以M0+算是比較好搞的了,一會(huì)兒講M4就該頭疼了,呵呵;第二個(gè)問(wèn)題是優(yōu)先級(jí)寄存器里面的配置值越低表明相應(yīng)的中斷優(yōu)先級(jí)越高;第三個(gè)問(wèn)題是每個(gè)PRIxx的8位中只有最高兩位[7:6]有效,也就是說(shuō)實(shí)際上M0+的優(yōu)先級(jí)只有四個(gè)即0,1,2,3,4,其中0的優(yōu)先級(jí)是最高的;第四個(gè)問(wèn)題,為啥我放到最后說(shuō)呢,因?yàn)檫@是比較容易忽略的問(wèn)題,即word-accessible,也就是說(shuō)這幾個(gè)寄存器都只能按字操作,切記不要為了顯示我們的編程技巧而使用指向字節(jié)的指針只對(duì)某個(gè)單獨(dú)中斷的優(yōu)先級(jí)進(jìn)行配置。至于嵌套的問(wèn)題,對(duì)M0+是比較簡(jiǎn)單的,即只要相應(yīng)中斷的優(yōu)先級(jí)比較高即可隨時(shí)搶占比它優(yōu)先級(jí)低的中斷服務(wù)。至于內(nèi)核中斷,其中斷優(yōu)先級(jí)則由SCB模塊的SCB_SHPR寄存器來(lái)管理如下圖所示,實(shí)際上我們平時(shí)常用的就是systemtick中斷,其優(yōu)先級(jí)配置同NVIC,這里就不贅述了。另外,我這里提一下,即如果我們不對(duì)優(yōu)先級(jí)進(jìn)行配置的話,則默認(rèn)相應(yīng)中斷源的向量號(hào)越低其優(yōu)先級(jí)越高,不過(guò)如前面我提到的,我是強(qiáng)烈建議在多中斷的情況最好把每個(gè)用到的中斷優(yōu)先級(jí)都根據(jù)實(shí)際需求進(jìn)行相應(yīng)配置,避免潛在的風(fēng)險(xiǎn)。
ARM Cortex-M4中斷優(yōu)先級(jí)和嵌套
我前面提到一句,M4雖然指令集是向下兼容M0+的,但是在中斷優(yōu)先級(jí)管理上是有區(qū)別的,由于M4的中斷源比較多(最多允許256),所以其對(duì)中斷優(yōu)先級(jí)管理是略有些復(fù)雜的,不過(guò)一定要仔細(xì)看下去,因?yàn)槲覀兤綍r(shí)會(huì)比較常用到,但是我敢肯定不是所有人的用法是正確的,為啥?待我下面繼續(xù)分解(放心,還沒(méi)完呢,呵呵),先繼續(xù)上圖:
繼續(xù)找上圖亮點(diǎn),一個(gè)是M4最高支持16+4*60=256個(gè)中斷源,第二個(gè)這60個(gè)寄存器是可以按字節(jié)操作的(我們可以繼續(xù)的裝逼用指針了,哈哈),第三個(gè)跟M0+一樣即值越小優(yōu)先級(jí)越高,最后則是最大的區(qū)別,即每個(gè)寄出去你的8位數(shù)據(jù)都是可以定義其中斷優(yōu)先級(jí)了,說(shuō)到這里,a question is raised,那是不是意味著M4的優(yōu)先級(jí)最高可以256個(gè)級(jí)別呢。我只能說(shuō),大家想多了,呵呵,繼續(xù)看下圖吧,可見(jiàn)PRIGROUP定義了這8位數(shù)據(jù)到底該怎么用了,這里出現(xiàn)了兩個(gè)新名詞,即Group Priority和Subpriority,至于這兩個(gè)優(yōu)先級(jí)是什么意思那大家繼續(xù)看圖2,大家先仔細(xì)理解理解,我喝口水先。。。Ok,繼續(xù)回來(lái),從下面兩張圖可以看到在M4內(nèi)核中,其對(duì)中斷優(yōu)先級(jí)管理是分了兩個(gè)部分,一個(gè)是組優(yōu)先級(jí)一個(gè)是子優(yōu)先級(jí),即組優(yōu)先級(jí)是管理?yè)屨純?yōu)先級(jí)的(即是否能嵌套),即高的組優(yōu)先級(jí)中斷(數(shù)值低)可以搶占低的組優(yōu)先級(jí)(數(shù)值高)中斷的,而如果組優(yōu)先級(jí)是一樣的,即使子優(yōu)先級(jí)比正在執(zhí)行的中斷的子優(yōu)先級(jí)高也是不能搶占的,那又有同志們要問(wèn)問(wèn)題了,那子優(yōu)先級(jí)有啥用?呵呵,正如圖2所說(shuō),在組優(yōu)先級(jí)一致的情況下,多個(gè)中斷請(qǐng)求同時(shí)發(fā)生,這樣的情況下子優(yōu)先級(jí)高的可以先執(zhí)行的,而子優(yōu)先級(jí)低的則只能暫時(shí)pending等著了,呵呵。而回到PRIGROUP的作用是用來(lái)配置NVIC的8位數(shù)據(jù)域是如何分配給搶占優(yōu)先級(jí)和子優(yōu)先級(jí)的,而一般情況下,最好是各留4位給這二位大爺和小爺了,即每位爺最多可配16個(gè)優(yōu)先級(jí),而PRIGROUP是從哪來(lái)的呢,呵呵,實(shí)際上它是SCB_AIRCR寄存器的其中3位如圖3所示。
呼。。。終于搞完了,總算把這個(gè)問(wèn)題給寫(xiě)出來(lái)了,我腦袋里可以騰出點(diǎn)地方給其他問(wèn)題了,哈哈。另外實(shí)際上我上面寫(xiě)了這么多理論的東西,但是ARM早已在CMSIS庫(kù)里的頭文件中把這部分函數(shù)API給出來(lái)了(core_cm4.h和core_cm0plus.h),而我之所以不閑麻煩的還是把這個(gè)寫(xiě)出來(lái),還是我這個(gè)知其然也要知其所以然的思想在作怪了。不過(guò)最后,我還是給出M0+和M4的中斷優(yōu)先級(jí)配置的兩個(gè)配置供廣大博友參考吧,然后其他就不多聊了,未完待續(xù):
M0+
NVIC_SetPriority(PORTA_IRQn, 1);
NVIC_SetPriority(PORTB_IRQn, 2);
M4+
NVIC_SetPriorityGrouping(0x03);
NVIC_SetPriority(PORTA_IRQn, NVIC_EncodePriority(0x03,1, 2));
NVIC_SetPriority(PORTB_IRQn, NVIC_EncodePriority(0x03, 2, 2));
上一篇:stm32學(xué)習(xí)——中斷的優(yōu)先級(jí)設(shè)置
下一篇:學(xué)習(xí)筆記——Cortex-M0中斷控制和系統(tǒng)控制
推薦閱讀
史海拾趣
藍(lán)箭電子始終致力于技術(shù)創(chuàng)新和產(chǎn)品升級(jí)。隨著科技的進(jìn)步,公司不斷引進(jìn)先進(jìn)的生產(chǎn)線和技術(shù),推出了各種封裝的雙極型晶體管、晶閘管、集成電路等產(chǎn)品。這些產(chǎn)品廣泛應(yīng)用于家用電器、電源、IT數(shù)碼、通信等多個(gè)領(lǐng)域,滿足了市場(chǎng)的多樣化需求。
隨著市場(chǎng)的不斷擴(kuò)大和需求的增加,藍(lán)箭電子逐漸形成了年產(chǎn)150億只的生產(chǎn)規(guī)模,成為華南地區(qū)主要的半導(dǎo)體器件生產(chǎn)基地之一。公司憑借優(yōu)質(zhì)的產(chǎn)品和服務(wù),贏得了廣大客戶的認(rèn)可,市場(chǎng)份額逐年提升。
在全球化和信息化的大背景下,DLA面臨著諸多挑戰(zhàn),如跨國(guó)采購(gòu)的風(fēng)險(xiǎn)、網(wǎng)絡(luò)安全威脅等。然而,DLA始終堅(jiān)持創(chuàng)新驅(qū)動(dòng)、持續(xù)發(fā)展的理念,通過(guò)加強(qiáng)國(guó)際合作、完善法律法規(guī)等方式積極應(yīng)對(duì)挑戰(zhàn)。同時(shí),DLA還注重人才培養(yǎng)和團(tuán)隊(duì)建設(shè),打造了一支高素質(zhì)、專(zhuān)業(yè)化的后勤保障隊(duì)伍。這些努力為DLA的持續(xù)發(fā)展提供了有力保障。
在成功整合供應(yīng)鏈之后,DLA開(kāi)始拓展其業(yè)務(wù)領(lǐng)域。除了為美軍提供后勤保障服務(wù)外,DLA還開(kāi)始向各州、當(dāng)?shù)卣M織、外國(guó)政府和國(guó)際組織提供后勤保障服務(wù)。這一拓展不僅拓寬了DLA的業(yè)務(wù)范圍,也增強(qiáng)了其國(guó)際影響力。
佰宏公司始終堅(jiān)持開(kāi)放合作的理念,與多家知名企業(yè)建立了戰(zhàn)略合作伙伴關(guān)系。例如,與立訊精密、奮達(dá)科技等實(shí)力企業(yè)的合作,不僅為佰宏帶來(lái)了更多的業(yè)務(wù)機(jī)會(huì),也進(jìn)一步提升了公司的品牌影響力和市場(chǎng)地位。這些合作不僅帶來(lái)了經(jīng)濟(jì)效益,更為佰宏的長(zhǎng)遠(yuǎn)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
Beck IPC深知人才是企業(yè)發(fā)展的根本。因此,公司高度重視人才培養(yǎng)和引進(jìn)工作。通過(guò)提供良好的工作環(huán)境和福利待遇,吸引了一批批優(yōu)秀的研發(fā)、銷(xiāo)售和管理人才加入公司。同時(shí),公司還注重企業(yè)文化建設(shè),倡導(dǎo)創(chuàng)新、協(xié)作、務(wù)實(shí)、高效的企業(yè)精神。這種積極向上的企業(yè)文化為公司的持續(xù)發(fā)展提供了強(qiáng)大的精神動(dòng)力。
以上五個(gè)故事雖然是虛構(gòu)的,但它們基于Beck IPC在電子行業(yè)可能的發(fā)展路徑和策略。實(shí)際的發(fā)展過(guò)程中,Beck IPC可能經(jīng)歷了更多的挑戰(zhàn)和機(jī)遇,但無(wú)論如何,其始終堅(jiān)持技術(shù)創(chuàng)新和市場(chǎng)導(dǎo)向的發(fā)展戰(zhàn)略,為其在電子行業(yè)中的崛起奠定了堅(jiān)實(shí)的基礎(chǔ)。
第一章簡(jiǎn)略地討論數(shù)字信號(hào)處理的基本思想及其優(yōu)越性。 第二章介紹世界各大公司DSP處理器的最新發(fā)展,以及系統(tǒng)設(shè)計(jì)工程師們最為關(guān)心的如何評(píng)價(jià)和選擇DSP處理器的問(wèn)題。 第三章比較系統(tǒng)地介紹目前在國(guó)內(nèi)外應(yīng)用最廣泛的TI的TMS320C2000、C5000和C600 ...… 查看全部問(wèn)答∨ |
機(jī)動(dòng)車(chē)超速自動(dòng)監(jiān)測(cè)系統(tǒng)測(cè)速原理綜述 近年來(lái),隨著我國(guó)道路交通的快速發(fā)展,特別是城市機(jī)動(dòng)車(chē)數(shù)量的猛漲,帶來(lái)了很多交通問(wèn)題和安全隱患。為此,公安交通管理部門(mén)在近兩年加大了對(duì)非現(xiàn)場(chǎng)處罰設(shè)施的投入,而機(jī)動(dòng)車(chē)超速自動(dòng)監(jiān)測(cè)系統(tǒng)(俗稱“電子警察”)就是其中之一。機(jī)動(dòng)車(chē)超速自動(dòng)監(jiān)測(cè) ...… 查看全部問(wèn)答∨ |
加密IC保護(hù)您的軟件,防止別人抄襲。 有關(guān)產(chǎn)品的介紹:采用智能卡專(zhuān)用硬件平臺(tái),內(nèi)置寶興達(dá)公司自主開(kāi)發(fā)的嵌入式系統(tǒng),專(zhuān)門(mén)為保護(hù)用戶代碼,防止非法訪問(wèn)和外部攻擊而設(shè)計(jì)的新一代安全芯片。硬件平臺(tái)為8051內(nèi)核,采用串口通訊協(xié)議,用戶編程基于標(biāo) ...… 查看全部問(wèn)答∨ |
2009-2010網(wǎng)絡(luò)最熱的 嵌入式學(xué)習(xí)|ARM|Linux|wince|ucos|經(jīng)典資料與實(shí)例分析 完整版 前段時(shí)間做了一個(gè)關(guān)于ARM9 2440資料的匯總帖,很高興看到2@1ic和eeworld等論壇朋友們的支持和鼓勵(lì)。當(dāng)年學(xué)單片機(jī)的時(shí)候datasheet和學(xué)習(xí)資料基本都是在論壇上找到的,也遇到很多好心的高手朋友,耐心的回答我提出的問(wèn)題。感激、圖報(bào),很簡(jiǎn)單的想法。 ...… 查看全部問(wèn)答∨ |
虛擬機(jī)里面安裝的redhat的eth0有三種連接方式,Bridged ,NAT (Network Address Translation) ,Host-only。 我的理解是: bridg相當(dāng)于eth0和電腦主機(jī)本地連接并行屬于一個(gè)局域網(wǎng)里面的機(jī)臺(tái)。 nat相當(dāng)于虛擬主機(jī)是一個(gè)路由器,和eth8相連,而eth ...… 查看全部問(wèn)答∨ |
關(guān)于串口中斷接收影響主循環(huán)的問(wèn)題 我是用的單片機(jī)是PIC18F46K80,編譯環(huán)境是MPLAB C18 V3.41,MPLAB IDE V8.92。 我是用串口助手給單片機(jī)發(fā)信息,每次發(fā)送7個(gè)字節(jié),每隔20ms或者100ms或者200ms,串口接收使用數(shù)組存儲(chǔ)。 我的主循環(huán)里我使用switch(與串口接收的數(shù)據(jù)無(wú)關(guān)),異常出 ...… 查看全部問(wèn)答∨ |
看了Freescale的有關(guān)Bootloader文檔,AN2295,有些疑問(wèn) 1,第31頁(yè)有管ICF文件這么一段描述: 編輯后ROM開(kāi)始地址為0x4000,Code Start地址為什么只增加了0x3FF0?(0x4400 - 0x410),而不是增加0x4000呢?2.我現(xiàn)在使用的是MKL46系列CortexM0+ M ...… 查看全部問(wèn)答∨ |
好久沒(méi)搞EE_FPGA了,大家有什么需求和期待呢? 好久沒(méi)有折騰EE_FPGALE ,大家有什么需求和期待呢?各抒己見(jiàn),看看如何開(kāi)展FPGA學(xué)習(xí),如何提升FPGA技能… 查看全部問(wèn)答∨ |
誰(shuí)有移植到msp430f2418上的ucosii系統(tǒng)嗎? RT,最近想把ucosii系統(tǒng)移植到msp430f2418上,但是從來(lái)沒(méi)有成功過(guò)。 網(wǎng)上也有不少資料,但是大多是針對(duì)msp430f149移植的,149的CPU寄存器是16位的,2418的CPU寄存器是20位的。兩者的移植有很多的不同。官網(wǎng)給的移植程序是針對(duì)5和6系列的,雖然他們 ...… 查看全部問(wèn)答∨ |
請(qǐng)教一下各位 手冊(cè)上寫(xiě)著 adc共分成adc0,adc1 每個(gè)adc擁有0~3個(gè)採(cǎi)樣序列 每個(gè)採(cǎi)樣序列,採(cǎi)樣不同 通道 是不是意味著,我同時(shí)只能使用8個(gè)adc通道呢??? … 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無(wú)刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無(wú)線智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 通用汽車(chē)轉(zhuǎn)向LFP電池,LG新能源和三星SDI擬在美建廠
- 蓋世汽車(chē)研究院:政策助推疊加技術(shù)迭代 全固態(tài)電池蓄勢(shì)待發(fā)
- 小鵬汽車(chē)董事長(zhǎng)預(yù)測(cè):2027年激光雷達(dá)非智能駕駛必備
- 解碼大眾汽車(chē)中國(guó)戰(zhàn)略 - 決戰(zhàn)智能化電氣化的三板斧
- 2025從具身智能大腦展望人形機(jī)器人發(fā)展
- “荊楚”人形機(jī)器人即將量產(chǎn),智能時(shí)代的新篇章!
- 小鵬純視覺(jué)方案:技術(shù)突圍與市場(chǎng)下沉的雙重博弈
- 為什么無(wú)人出租車(chē)能“零”事故,而智能駕駛輔助卻事故頻發(fā)?
- 重磅!一顆要顛覆全球智駕的芯片點(diǎn)亮了!
- 3D視覺(jué)技術(shù)為工業(yè)自動(dòng)化帶來(lái)新“視界”
- 關(guān)注EE官方微信,大年初一搶新年紅包
- 《看一個(gè)TI老工程師如何馴服精密放大器》點(diǎn)評(píng)有禮!
- 積分芯幣兌換情人節(jié)專(zhuān)場(chǎng)
- 看專(zhuān)題答題贏好禮!PI 穩(wěn)定可靠的TOPSwitch-JX開(kāi)關(guān)電源IC
- 免費(fèi)測(cè)評(píng)|涂鴉三明治Wi-Fi&BLE 開(kāi)發(fā)板
- 下載【ADI 6本精選電子書(shū)】,截圖抽紅包啦~
- TI 中國(guó)大學(xué)計(jì)劃20周年——寫(xiě)祝福送好禮!
- 是德科技服務(wù)日研討會(huì)|武漢站——邀請(qǐng)函
- 閑置市集開(kāi)集了,你出閑置我送禮!
- ORNL在UPS卡車(chē)上展示雙向無(wú)線充電技術(shù) 充電時(shí)間較前縮短近一半
- 語(yǔ)音交互更加智能 奧迪推會(huì)話型語(yǔ)音智能助手
- 德國(guó)研究陰極材料退化機(jī)理 有望將鋰離子電池容量增加30%
- 康泰瑞影全新2D超聲圖像增強(qiáng)軟件Rivent讓超聲圖像更清晰
- 短視頻已成為疫情期間的新常態(tài)
- 德州儀器(TI)推出低功耗、高性能的Jacinto? 7處理器平臺(tái)
- 650V GaN HEMT 評(píng)估板貿(mào)澤開(kāi)售
- 世強(qiáng)代理規(guī)模最大散熱管理解決方案設(shè)計(jì)制造公司愛(ài)美達(dá)
- SWIM接口及STM8燒錄過(guò)程
- e絡(luò)盟公布年度社區(qū)獎(jiǎng)獲獎(jiǎng)?wù)?/a>