Cortex-M3基础
(一)寄存器
1 寄存器組?????
R0-R12: 通用寄存器?
-----------------------------------------------------------------------------------------
R13: 堆棧寄存器?
有兩個(gè),MSP和PSP,同時(shí)只能看見一個(gè),引用R13時(shí),引用的是正在使用的那個(gè)?
MSP:可用于異常服務(wù)和應(yīng)用程序?
PSP:只能用于應(yīng)用程序?
系統(tǒng)復(fù)位后,用的堆棧指針是MSP。??
------------------------------------------------------------------------------------------
R14: 連接寄存器,又名LR,存儲(chǔ)返回地址?
R15: 程序計(jì)數(shù)寄存器,又名PC?
-------------------------------------------------------------------------------------------
2 特殊功能寄存器?
程序狀態(tài)字寄存器組(PSRs)
中斷屏蔽寄存器組(PRIMASK, FAULTMASK, BASEPRI)
控制寄存器(CONTROL) *****☆
程序狀態(tài)字寄存器組(PSRs)分為?
應(yīng)用程序 PSR(APSR)?
中斷號(hào) PSR(IPSR)?
執(zhí)行 PSR(EPSR)?
每個(gè)都是32位,由于這3個(gè)寄存器有效位是錯(cuò)開的,因此可以組合訪問。?
中斷屏蔽寄存器組(PRIMASK, FAULTMASK, BASEPRI) ,這三個(gè)寄存器用于控制異常的使能和除能。
----------------------------------------------------------------------------------------
控制寄存器(CONTROL)它有兩個(gè)作用:?
1.定義特權(quán)級(jí)別
2.選擇當(dāng)前使用哪個(gè)堆棧指針
3.3 操作模式和特權(quán)極別
操作模式: 處理者模式和線程模式
異常處理:處理者模式
?? 主程序:線程模式
對(duì)于ucosii,不區(qū)分特權(quán)級(jí)和用戶級(jí),程序始終工作在特權(quán)級(jí)
MSP、PSP兩個(gè)堆棧指針的切換是全自動(dòng)的,就在出入異常服務(wù)例程時(shí)由硬件處理。
-------------------------------------------------------------------
3.3.8 復(fù)位序列?
0x00000000 MSP初值
0x00000004 PC? 初值 復(fù)位向量
(二)異常
1 異常類型?
分為系統(tǒng)異常(編號(hào)1-15)和外部中斷(大于15)?
2 優(yōu)先級(jí)?
CM3支持3個(gè)固定的高優(yōu)先級(jí)和多達(dá)256級(jí)的可編程優(yōu)先級(jí)。?
----------------------------------------------------------------------------------------------------------
NVIC 中,每個(gè)中斷都有一個(gè)優(yōu)先級(jí)配置寄存器(1 個(gè) byte) ,用來配置該中斷的優(yōu)先級(jí)。但該寄存器并不是每個(gè)位都被
使用,不同制造商生產(chǎn)的芯片不相同,譬如stm32使用 4位,也就是說stm32支持16個(gè)可編程優(yōu)先級(jí)(參考:chapter9) 。
注意該寄存器是以MSB對(duì)齊的,因此stm32每個(gè)中斷的優(yōu)先級(jí)配置寄存器7:4位有效,3:0位無效。?
對(duì)于優(yōu)先級(jí), CM3又分為搶占優(yōu)先級(jí)和亞優(yōu)先級(jí),? NVIC中的應(yīng)用程序中斷及復(fù)位控制寄存器(AIRCR)的優(yōu)先級(jí)分組(10:8)
描述了如何劃分搶占優(yōu)先級(jí)和亞優(yōu)先級(jí)。?
什么意思?以 stm32 為例,優(yōu)先級(jí)配置寄存器不是 7:4 位有效嗎,如果 AIRCR 中的優(yōu)先級(jí)分組值為 4,則優(yōu)先級(jí)配置寄
存器的7:5位確定搶占優(yōu)先級(jí),位4確定亞優(yōu)先級(jí)。此時(shí)所有中斷有8個(gè)搶占優(yōu)先級(jí),每個(gè)搶占優(yōu)先級(jí)有2個(gè)亞優(yōu)先級(jí)。?
搶占優(yōu)先級(jí)高的中斷可以搶占搶占優(yōu)先級(jí)低的中斷,即搶占優(yōu)先級(jí)決定了中斷是否可以嵌套。?
相同搶占優(yōu)先級(jí)的中斷不能嵌套,但當(dāng)搶占優(yōu)先級(jí)相同的異常有不止一個(gè)到來時(shí),就優(yōu)先響應(yīng)亞優(yōu)先級(jí)最高的異常。?
參考附錄D??
表D.9 中斷優(yōu)先級(jí)寄存器陣列 0xE000_E400 - 0xE000_E4EF 共240個(gè)。?
表D.16系統(tǒng)異常優(yōu)先級(jí)寄存器 0xE000_ED18 - 0xE000_ED23 共12個(gè)。?
優(yōu)先級(jí)相同,看中斷號(hào),中斷號(hào)小的優(yōu)先。
3 向量表???
初始在0x00000000處,可以通過向量表偏移量寄存器(VTOR)(地址:0xE000_ED08)更改,一般無需更改。
------------------------------------------------------------------------------------------------------
(三)SVC和PendSV??
SVC?
SVC主要用在分特權(quán)級(jí)和用戶級(jí)的操作系統(tǒng),ucosii不區(qū)分特權(quán)級(jí)和用戶級(jí),可以不管這個(gè)東西。
這里說點(diǎn)題外話,一開始我很奇怪為什么會(huì)提供這種中斷,因?yàn)檫@種中斷一般都是用在大型的操作系統(tǒng)上,如linux系
統(tǒng)上,可 CM3 又不提供 MMU,應(yīng)該是無法移植 linux 系統(tǒng)。后來我才知道 uclinux 是針對(duì)沒有 MMU 的嵌入式系統(tǒng)而設(shè)計(jì)的,
不過還是很懷疑有人會(huì)在像stm32這種芯片上用uclinux。
PendSV?
PendSV中斷主要做上下文切換,也就是任務(wù)切換,是ucosii移植過程中最重要的中斷。?
主要有兩點(diǎn):?
1.PendSV中斷是手工往NVIC 的PendSV懸起寄存器中寫1 產(chǎn)生的(由OS 寫) 。?
2.PendSV中斷優(yōu)先級(jí)必須設(shè)為最低。?
在講移植代碼時(shí)會(huì)介紹具體是如何做的。 對(duì)于7.6的PendSV部分應(yīng)認(rèn)真研讀一下。
(四)?NVIC 與中斷控制?
NVIC負(fù)責(zé)芯片的中斷管理,它和CM3內(nèi)核緊密相關(guān)。?
(五)中斷的具體行為
1 中斷/異常的響應(yīng)序列?
當(dāng)CM3開始響應(yīng)一個(gè)中斷時(shí)?
1.xPSR, PC, LR, R12以及R3‐R0入棧?
2.取向量??????
3.選擇堆棧指針MSP/PSP,更新堆棧指針SP,更新連接寄存器LR,更新程序計(jì)數(shù)器PC?
對(duì)移植ucosii 來說,需要注意1,3?
2 異常返回?
在CM3中,進(jìn)入中斷時(shí),LR寄存器的值會(huì)被自動(dòng)更新。9.6節(jié)對(duì)更新后的值進(jìn)行說明。這里統(tǒng)稱EXC_RETURN。返回時(shí)通
過把EXC_RETURN往PC里寫來識(shí)別返回動(dòng)作的。因?yàn)镋XC_RETURN是一個(gè)特殊值,所以對(duì)于CM3,匯編語言就不需要類似reti
這種指令,而用 C 語言開發(fā)時(shí),不需要特殊編譯器命令指示一個(gè)函數(shù)為中斷服務(wù)程序。實(shí)際上,中斷服務(wù)程序如果是 c 代碼
編寫,匯編成匯編代碼,函數(shù)結(jié)尾一般是reti。
3 嵌套的中斷?
只要注意:中斷嵌套不能過深即可。
(六)Cortex-M3 的低層編程?
匯編與C 的接口?
有兩點(diǎn)需要知道:?
1.當(dāng)主調(diào)函數(shù)需要傳遞參數(shù)(實(shí)參)時(shí),它們使用R0‐R3。其中R0傳遞第一個(gè),R1 傳遞第2個(gè)……在返回時(shí),把返回
值寫到R0中。?
2.在函數(shù)中,用匯編寫代碼時(shí),R0-R3, R12可以隨便使用,而使用R4‐R11,則必須先PUSH(入棧),后POP(出棧)。??
?
----
?組別:0>1>2>3>4
? 組別優(yōu)先順序(第0組優(yōu)先級(jí)最強(qiáng),第4組優(yōu)先級(jí)最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4
及號(hào)越小優(yōu)先級(jí)越高
-------
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;??// 指定搶占式優(yōu)先級(jí)別1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;? ?// 指定響應(yīng)優(yōu)先級(jí)別1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;? ?// 指定響
如上,NVIC_IRQChannelPreemptionPriority 和 NVIC_IRQChannelSubPriority 兩個(gè)主要指什么呢?有什么區(qū)別,如我把兩個(gè)中斷的 // 指定響應(yīng)優(yōu)先級(jí)別都設(shè)置相同的.會(huì)不會(huì)沖突呢?
它們的值是越大優(yōu)先級(jí)越高還是越小越高呢??
取值范圍又是如何的?
能不能詳細(xì)介紹下NVIC中斷的設(shè)置嗎? 楓兒?(2009-1-18 11:32:41) 看了這個(gè)有少少明白,
但理解不清,如何才算是嵌套?stm32的中斷設(shè)置優(yōu)點(diǎn)突出在哪里?
STM32(Cortex-M3)中的優(yōu)先級(jí)概念
STM32(Cortex-M3)中有兩個(gè)優(yōu)先級(jí)的概念——搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),有人把響應(yīng)優(yōu)先級(jí)稱作'亞優(yōu)先級(jí)'或'副優(yōu)先級(jí)',每個(gè)中斷源都需要被指定這兩種優(yōu)先級(jí)。
具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中斷處理過程中被響應(yīng),即中斷嵌套,或者說高搶占式優(yōu)先級(jí)的中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。
當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒有嵌套關(guān)系,當(dāng)一個(gè)中斷到來后,如果正在處理另一個(gè)中斷,這個(gè)后到來的中斷就要等到前一個(gè)中斷處理完之后才能被處理。如果這兩個(gè)中斷同時(shí)到達(dá),則中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級(jí)高低來決定先處理哪一個(gè);如果他們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相等,則根據(jù)他們?cè)谥袛啾碇械呐盼豁樞驔Q定先處理哪一個(gè)。
既然每個(gè)中斷源都需要被指定這兩種優(yōu)先級(jí),就需要有相應(yīng)的寄存器位記錄每個(gè)中斷的優(yōu)先級(jí);在Cortex-M3中定義了8個(gè)比特位用于設(shè)置中斷源的優(yōu)先級(jí),這8個(gè)比特位可以有8種分配方式,如下:
所有8位用于指定響應(yīng)優(yōu)先級(jí)
最高1位用于指定搶占式優(yōu)先級(jí),最低7位用于指定響應(yīng)優(yōu)先級(jí)
最高2位用于指定搶占式優(yōu)先級(jí),最低6位用于指定響應(yīng)優(yōu)先級(jí)
最高3位用于指定搶占式優(yōu)先級(jí),最低5位用于指定響應(yīng)優(yōu)先級(jí)
最高4位用于指定搶占式優(yōu)先級(jí),最低4位用于指定響應(yīng)優(yōu)先級(jí)
最高5位用于指定搶占式優(yōu)先級(jí),最低3位用于指定響應(yīng)優(yōu)先級(jí)
最高6位用于指定搶占式優(yōu)先級(jí),最低2位用于指定響應(yīng)優(yōu)先級(jí)
最高7位用于指定搶占式優(yōu)先級(jí),最低1位用于指定響應(yīng)優(yōu)先級(jí)
這就是優(yōu)先級(jí)分組的概念。
--------------------------------------------------------------------------------
Cortex-M3允許具有較少中斷源時(shí)使用較少的寄存器位指定中斷源的優(yōu)先級(jí),因此STM32把指定中斷優(yōu)先級(jí)的寄存器位減少到4位,這4個(gè)寄存器位的分組方式如下:?
第0組:所有4位用于指定響應(yīng)優(yōu)先級(jí)
第1組:最高1位用于指定搶占式優(yōu)先級(jí),最低3位用于指定響應(yīng)優(yōu)先級(jí)
第2組:最高2位用于指定搶占式優(yōu)先級(jí),最低2位用于指定響應(yīng)優(yōu)先級(jí)
第3組:最高3位用于指定搶占式優(yōu)先級(jí),最低1位用于指定響應(yīng)優(yōu)先級(jí)
第4組:所有4位用于指定搶占式優(yōu)先級(jí)
可以通過調(diào)用STM32的固件庫中的函數(shù)NVIC_PriorityGroupConfig()選擇使用哪種優(yōu)先級(jí)分組方式,這個(gè)函數(shù)的參數(shù)有下列5種:
NVIC_PriorityGroup_0 => 選擇第0組
NVIC_PriorityGroup_1 => 選擇第1組
NVIC_PriorityGroup_2 => 選擇第2組
NVIC_PriorityGroup_3 => 選擇第3組
NVIC_PriorityGroup_4 => 選擇第4組?
接下來就是指定中斷源的優(yōu)先級(jí),下面以一個(gè)簡(jiǎn)單的例子說明如何指定中斷源的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí):
// 選擇使用優(yōu)先級(jí)分組第1組
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
??
// 使能EXTI0中斷
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定搶占式優(yōu)先級(jí)別1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定響應(yīng)優(yōu)先級(jí)別0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
??
// 使能EXTI9_5中斷
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定搶占式優(yōu)先級(jí)別0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定響應(yīng)優(yōu)先級(jí)別1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
--------------------------------------------------------------------------------
要注意的幾點(diǎn)是:
1)如果指定的搶占式優(yōu)先級(jí)別或響應(yīng)優(yōu)先級(jí)別超出了選定的優(yōu)先級(jí)分組所限定的范圍,將可能得到意想不到的結(jié)果;
2)搶占式優(yōu)先級(jí)別相同的中斷源之間沒有嵌套關(guān)系;
3)如果某個(gè)中斷源被指定為某個(gè)搶占式優(yōu)先級(jí)別,又沒有其它中斷源處于同一個(gè)搶占式優(yōu)先級(jí)別,則可以為這個(gè)中斷源指定任意有效的響應(yīng)優(yōu)先級(jí)別。 binglin?(2009-1-18 23:39:17) 呵呵,進(jìn)來一看,楓兒應(yīng)該是很明白了(至少比我要明白)。 楓兒?(2009-1-19 09:20:08) 不是吧..你太慮心了.
大家交流一下吧..
可以通過調(diào)用STM32的固件庫中的函數(shù)NVIC_PriorityGroupConfig()選擇使用哪種優(yōu)先級(jí)分組方式,這個(gè)函數(shù)的參數(shù)有下列5種:
NVIC_PriorityGroup_0 => 選擇第0組
NVIC_PriorityGroup_1 => 選擇第1組
NVIC_PriorityGroup_2 => 選擇第2組
NVIC_PriorityGroup_3 => 選擇第3組
NVIC_PriorityGroup_4 => 選擇第4組\
要注意的幾點(diǎn)是:
1)如果指定的搶占式優(yōu)先級(jí)別或響應(yīng)優(yōu)先級(jí)別超出了選定的優(yōu)先級(jí)分組所限定的范圍,將可能得到意想不到的結(jié)果;
我想問下.這分組是如何的呢?怎才算超出,如分組是4,那么其NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 值不能大于4嗎?
```
應(yīng)該不會(huì)吧? stm32中斷源可有許多的哦~~~ binglin?(2009-1-19 09:45:21) 第0組:所有4位用于指定響應(yīng)優(yōu)先級(jí)
第1組:最高1位用于指定搶占式優(yōu)先級(jí),最低3位用于指定響應(yīng)優(yōu)先級(jí)
第2組:最高2位用于指定搶占式優(yōu)先級(jí),最低2位用于指定響應(yīng)優(yōu)先級(jí)
第3組:最高3位用于指定搶占式優(yōu)先級(jí),最低1位用于指定響應(yīng)優(yōu)先級(jí)
第4組:所有4位用于指定搶占式優(yōu)先級(jí)
由上面可知,當(dāng)選擇分組4時(shí),所有4位用于指定搶占式優(yōu)先級(jí),四位二進(jìn)制能表示的最大值是什么?請(qǐng)楓兒自已算.
它是用來設(shè)置中斷優(yōu)先級(jí),與多少個(gè)中斷無關(guān).
在程序中合理按排中斷優(yōu)先級(jí)可以達(dá)到具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中斷處理過程中被響應(yīng),即中斷嵌套,或者說高搶占式優(yōu)先級(jí)的中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。 楓兒?(2009-1-19 09:55:20) 哈哈,謝謝,我想糊了...
2*2*2*2=16
它是用來設(shè)置中斷優(yōu)先級(jí),與多少個(gè)中斷無關(guān).
在程序中合理按排中斷優(yōu)先級(jí)可以達(dá)到具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中斷處理過程中被響應(yīng),即中斷嵌套,或者說高搶占式優(yōu)先級(jí)的中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。
這個(gè)我還想不明白. yjphyjp02?(2009-5-21 22:20:00) 優(yōu)先級(jí)2正在處理事件,而優(yōu)先級(jí)1這時(shí)有事件處理,優(yōu)先級(jí)2暫停,讓優(yōu)先級(jí)1立即處理后,優(yōu)先級(jí)2再處理事件;這是搶占優(yōu)先。
優(yōu)先級(jí)2正在處理事件,優(yōu)先級(jí)3排隊(duì)有事件處理,而優(yōu)先級(jí)1這時(shí)有事件處理,等優(yōu)先級(jí)1處理后,優(yōu)先級(jí)2立即處理事件;這是響應(yīng)優(yōu)先。 yjphyjp02?(2009-5-21 22:23:01) 優(yōu)先級(jí)2正在處理事件,而優(yōu)先級(jí)1這時(shí)有事件處理,優(yōu)先級(jí)2暫停,讓優(yōu)先級(jí)1立即處理后,優(yōu)先級(jí)2再處理事件;這是搶占優(yōu)先。
優(yōu)先級(jí)2正在處理事件,優(yōu)先級(jí)3排隊(duì)有事件處理,而優(yōu)先級(jí)1這時(shí)有事件處理,等優(yōu)先級(jí)2處理后,優(yōu)先級(jí)3才處理事件;這是響應(yīng)優(yōu)先。 catwill?(2009-5-23 10:25:52) 沒怎么看帖子,不過推薦樓主參考一下“權(quán)威指南”
那本書很神級(jí),不知道出紙板了沒有 xdz?(2009-5-23 15:21:06) [i=s] 本帖最后由 xdz 于 2009-5-23 15:24 編輯?
既然已經(jīng)設(shè)置了先占優(yōu)先級(jí)那么為什么還要再設(shè)置響應(yīng)優(yōu)先級(jí),老是把這兩個(gè)弄混。還有就是誰比較理解系統(tǒng)優(yōu)先級(jí)介紹一下。?
void NVIC_SystemHandlerPriorityConfig(u32 SystemHandler, u8??
SystemHandlerPreemptionPriority, u8 SystemHandlerSubPriority)??Handler??1??SystemHandler Handler??SectionSystemHandler??2??SystemHandlerPreemptionPriority Handler??SectionSystemHandlerPreemptionPriority??3??SystemHandlerSubPriority Handler??SectionSystemHandlerSubPriority? ?? ?? ?
SystemHandler Handler Table 308.?
Table 308. SystemHandler?
NVIC_ VectTab??
SystemHandler_MemoryManage??Handler 存儲(chǔ)器管理
SystemHandler_BusFault??Handler? ?? ?? ? 總線錯(cuò)誤
SystemHandler_UsageFault??Handler? ???使用錯(cuò)誤
SystemHandler_SVCall??SVCall Handler? ?SVCall
SystemHandler_DebugMonitor??Handler??除錯(cuò)監(jiān)控
SystemHandler_PSV??PSV Handler? ?? ?? ???PSV
SystemHandler_SysTick??Handler? ?? ???系統(tǒng)滴答時(shí)鐘 xdz?(2009-5-24 02:01:28) 頂一下!!! yunfei7370?(2009-5-24 07:54:55) 這個(gè)問題總是暈,還沒看明白!誰能更詳細(xì)的介紹一下! binglin?(2009-5-24 09:20:15) 如果相同的先占優(yōu)先級(jí)別,就看誰響應(yīng)優(yōu)先級(jí)優(yōu)級(jí)先,如果響應(yīng)優(yōu)先級(jí)也相同,就看誰的中斷號(hào)小。 yunfei7370?(2009-5-24 12:55:40)
QUOTE:
如果相同的先占優(yōu)先級(jí)別,就看誰響應(yīng)優(yōu)先級(jí)優(yōu)級(jí)先,如果響應(yīng)優(yōu)先級(jí)也相同,就看誰的中斷號(hào)小。binglin 發(fā)表于 2009-5-24 09:20? 是不是號(hào)小的就優(yōu)先呢? binglin?(2009-5-24 14:34:58) 印象中似乎是小號(hào)的有更高的優(yōu)先權(quán). xdz?(2009-5-25 11:37:52) 炳哥哥有沒有試過中斷優(yōu)先級(jí)啊!我用了兩個(gè)外部中斷,設(shè)置了其中一個(gè)為先占優(yōu)先級(jí),在其中一個(gè)中斷里面設(shè)置了死循環(huán),另一個(gè)設(shè)置成先占優(yōu)先級(jí),然后觸發(fā)它就是不進(jìn)設(shè)有先占優(yōu)先級(jí)的那個(gè)中斷。 binglin?(2009-5-25 14:58:18) 兩個(gè)都要設(shè)置優(yōu)先級(jí),一個(gè)高一個(gè)低再試試。
提示:如果死循環(huán)那一個(gè)不設(shè)置,它的默義優(yōu)先級(jí)別多少? xdz?(2009-5-25 16:55:35) 這是我設(shè)置的兩個(gè)優(yōu)先級(jí),也看了不少例子但是實(shí)際并不像我們想象的那樣。高手們都發(fā)表一下自己的看法吧!?
/* Enable the EXT5-9 Interrupt on PD.3 */
??NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
??NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
??NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
??NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
??NVIC_Init(&NVIC_InitStructure);
? ?? ?/* Enable the EXTI10-15 Interrupt on PD.3 */
??NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel ;
??NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
??NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
??NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
??NVIC_Init(&NVIC_InitStructure); binglin?(2009-5-25 18:47:35) 當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒有嵌套關(guān)系,當(dāng)一個(gè)中斷到來后,如果正在處理另一個(gè)中斷,這個(gè)后到來的中斷就要等到前一個(gè)中斷處理完之后才能被處理。
如果這兩個(gè)中斷同時(shí)到達(dá),則中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級(jí)高低來決定先處理哪一個(gè);如果他們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相等,則根據(jù)他們?cè)谥袛啾碇械呐盼豁樞驔Q定先處理哪一個(gè)。
當(dāng)兩個(gè)中斷源搶占式優(yōu)先級(jí)不同時(shí),當(dāng)正在處理的中斷的搶占式優(yōu)先級(jí)比后來的低,則后來的中斷將會(huì)打斷前一個(gè)中斷處理,先處理后來的搶占式優(yōu)先級(jí)較高的中斷。
搶占式優(yōu)先級(jí)與響應(yīng)優(yōu)先級(jí),搶占式優(yōu)先級(jí)是用于占先即可以中斷比它較低搶占式優(yōu)先級(jí)的中斷處理過程。而響應(yīng)優(yōu)先級(jí)只在兩個(gè)或多個(gè)中斷源到達(dá)時(shí),中斷響應(yīng)時(shí)起作用。
因此我在13樓的描述是不正確的。
?
?
?
?
?
?
?
?
?
摘錄
?
總結(jié)
以上是生活随笔為你收集整理的Cortex-M3基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地址总线与内存大小的关系(待续…)
- 下一篇: 微信公众平台开发——在线点歌