




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)原理與實驗 第第7 7章章 Cortex-M3 Cortex-M3 異常和中斷異常和中斷7.1 異常7.2 NVIC 和中斷控制1嵌入式系統(tǒng)原理與實驗 7.1.1 7.1.1 異常類型異常類型 所有能打斷正常執(zhí)行流的事件都稱為異常。CM3支持為數(shù)眾多的系統(tǒng)異常和外部中斷。 編號為115的對應(yīng)系統(tǒng)異常;編號為16255的對應(yīng)外部中斷 大部分的異??删幊虄?yōu)先級,其中很少的一些有固定的優(yōu)先級。 當(dāng)前運行的異常值,是由特殊寄存器IPSR或NVIC的中斷控制狀態(tài)寄存器表示的。27.1 7.1 異常異常嵌入式系統(tǒng)原理與實驗 編號類型優(yōu)先級描述1復(fù)位-3 (最高)復(fù)位2NMI-2 不可屏蔽中斷(外
2、部NMI 輸入)3硬異常-1所有被除能的fault,都將“上訪”(escalation)成硬fault。只要FAULTMASK沒有置位,硬fault服務(wù)例程就被強制執(zhí)行。Fault被除能的原因包括被禁用,或者PRIMASK/BASEPRI被掩蔽。若FAULTMASK也置位,則硬fault也被除能,此時徹底“關(guān)中” 4MemManage fault 可編程存儲器管理fault,MPU訪問違例以及訪問非法位置均可引發(fā)。企圖在“非執(zhí)行區(qū)”取指也會引發(fā)此fault 5總線fault 可編程從總線系統(tǒng)收到了錯誤響應(yīng),原因可以是預(yù)取流產(chǎn)(Abort)或數(shù)據(jù)流產(chǎn),企圖訪問協(xié)處理器也會引發(fā)此fault 6用法
3、(usage) fault可編程由于程序錯誤導(dǎo)致的異常。通常是使用了一條無效指令,或者是非法的狀態(tài)轉(zhuǎn)換,例如嘗試切換到ARM狀態(tài) 3嵌入式系統(tǒng)原理與實驗 編號類型優(yōu)先級描述7-10保留N/A11SVCall可編程執(zhí)行系統(tǒng)服務(wù)調(diào)用指令(SVC)引發(fā)的異常 12調(diào)試監(jiān)視器可編程調(diào)試監(jiān)視器(斷點,數(shù)據(jù)觀察點,或者是外部調(diào)試請求) 13保留N/A14PendSV 可編程為系統(tǒng)設(shè)備而設(shè)的“可懸掛請求”15SysTick 可編程系統(tǒng)滴答定時器16IRQ#0可編程外中斷#0 17IRQ#1可編程外中斷#1255IRQ#239可編程外中斷#2394續(xù)嵌入式系統(tǒng)原理與實驗 7.1.2 7.1.2 優(yōu)先級定義優(yōu)先
4、級定義 在CM3中,優(yōu)先級決定一個異常是否能被掩蔽,以及在未掩蔽的情況下何時可以響應(yīng)。 優(yōu)先級的數(shù)值越小,則優(yōu)先級越高。 CM3支持中斷嵌套,使得高優(yōu)先級異常會搶占(preempt)低優(yōu)先級異常。 3個系統(tǒng)異常:復(fù)位,NMI以及硬fault,它們有固定的優(yōu)先級,并且它們的優(yōu)先級號是負(fù)數(shù),從而高于所有其它異常。 所有其它異常的優(yōu)先級則都是可編程的。 CM3支持3個固定的高優(yōu)先級和多達(dá)256級的可編程優(yōu)先級,并且支持128級搶占。但是,絕大多數(shù)CM3芯片都會精簡設(shè)計,裁掉表達(dá)優(yōu)先級的幾個低端有效位,以減少優(yōu)先級的級數(shù),如8級,16級,32級等。5嵌入式系統(tǒng)原理與實驗 3 3 比特優(yōu)先級比特優(yōu)先級B
5、it 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0用于表達(dá)優(yōu)先級用于表達(dá)優(yōu)先級不使用不使用, 讀出值為讀出值為04 4比特優(yōu)先級比特優(yōu)先級優(yōu)先級寄存器的最小寬度值為3比特。Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0用于表達(dá)優(yōu)先級用于表達(dá)優(yōu)先級不使用不使用, 讀出值為讀出值為06嵌入式系統(tǒng)原理與實驗 3 3位或位或4 4位寬度位寬度的可用優(yōu)先級的可用優(yōu)先級7通過讓優(yōu)先級以MSB對齊,可以簡化程序的跨器件移植。嵌入式系統(tǒng)原理與實驗 分別使用3-bit, 5-bit, 和8-bit 優(yōu)先級寄存器的使用情況:優(yōu)先級異常類型3比特表達(dá)5比
6、特表達(dá)8比特表達(dá)-3 (Highest)復(fù)位-3-3-3-2NMI-2-2-2-1硬件錯誤-1-1-1010 xFF具有優(yōu)先級并且可編程的異常0 x000 x200 xE00 x000 x080 xF80 x00, 0 x010 x02, 0 x030 xFE, 0 xFF8嵌入式系統(tǒng)原理與實驗 搶占優(yōu)先級和亞優(yōu)先級搶占優(yōu)先級和亞優(yōu)先級通過NVIC中“應(yīng)用程序中斷及復(fù)位控制寄存器”的位段“PRIGROUP優(yōu)先級組”設(shè)置。該位段的值對每一個優(yōu)先級可配置的異常都有影響,把其優(yōu)先級分為2個位段:MSB所在的位段(左邊的)對應(yīng)搶占優(yōu)先級,而LSB所在的位段(右邊的)對應(yīng)亞優(yōu)先級。搶占優(yōu)先位段和亞優(yōu)先級
7、位段在優(yōu)先級寄存器中的定義優(yōu)先組搶占優(yōu)先級位段亞優(yōu)先級位段0Bit 7:1Bit 01Bit 7:2Bit 1:02Bit 7:3Bit 2:03Bit 7:4Bit 3:04Bit 7:5Bit 4:05Bit 7:6Bit 5:06Bit 7Bit 6:07NoneBit 7:09嵌入式系統(tǒng)原理與實驗 應(yīng)用程序中斷和復(fù)位控制寄存器應(yīng)用程序中斷和復(fù)位控制寄存器( (地址地址0 xE000ED0C)0 xE000ED0C)Bits名稱類型復(fù)位值描述31:16VECTKEYR/W存取關(guān)鍵字;為了寫入這個寄存器必須向這個位段寫人 0 x05FA15ENDIANNESSR表示數(shù)據(jù)的排列順序: 1 表
8、示大端(BE8) 而0表示小端10:8PRIGROUPR/W0優(yōu)先組2SYSRESETREQW請求芯片控制邏輯產(chǎn)生一個復(fù)位信號1VECTCLRACTIVEW清除異常的所有活躍狀態(tài)信息0VECTRESETW復(fù)位Cortex-M3 處理器。 但不會復(fù)位處理器以外的電路。10嵌入式系統(tǒng)原理與實驗 11Bit 7Bit 6Bit 5Bit 4 Bit 0搶占級亞不使用, 讀出值0嵌入式系統(tǒng)原理與實驗 12Bit 7Bit 6Bit 5Bit 4 Bit 2Bit 1Bit 0搶占級不使用亞優(yōu)先級嵌入式系統(tǒng)原理與實驗 7.1.3 7.1.3 向量表向量表 響應(yīng)異常時,CM3需要定位其服務(wù)例程的入口地址。
9、這些入口地址存儲在所謂的“(異常)向量表”中。 缺省情況下,CM3認(rèn)為該表位于零地址處,且各向量占用4字節(jié)。上電后的異常向量表地址異常號值(大小為“字”)0 x00000000MSP 初始值0 x000000041復(fù)位向量(程序計數(shù)器初始值)0 x000000082NMI 服務(wù)例程的入口地址 0 x0000000C3硬fault服務(wù)例程的入口地址 其它異常服務(wù)例程的入口地址 13嵌入式系統(tǒng)原理與實驗 n通過設(shè)置NVIC中的向量表偏移寄存器向量表偏移寄存器,可以將向量表重定位到其它的內(nèi)存地址。n向量表的起始地址:先求出系統(tǒng)中共有多少個向量,再把這個數(shù)字向上“圓整”到2的整次冪,而起始地址必須對齊
10、到后者的邊界上。n例:如果一共有32個中斷,則共有32+16(系統(tǒng)異常)=48個向量,向上圓整到2的整次冪后值為64,因此向量表重定位的地址必須能被64*4=256整除,合法的起始地址為:0 x0, 0 x100, 0 x200等。14向量表偏移寄存器(地址0 xE000ED08)Bits名類型復(fù)位值描述29TBLBASER/W0表基地址在Code (0) 或RAM (1)28:7TBLOFFR/W0來自CODE區(qū)或RAM區(qū)的表偏移范圍嵌入式系統(tǒng)原理與實驗 7.1.4 中斷輸入和掛起行為n當(dāng)中斷輸入腳被置為有效(assert)后,該中斷就被懸起。即使后來中斷源撤消了中斷請求,已經(jīng)被標(biāo)記成懸起的
11、中斷也被記錄下來。到了系統(tǒng)中它的優(yōu)先級最高的時候,就會得到響應(yīng)。 n如果在某個中斷得到響應(yīng)之前,其懸起狀態(tài)被清除了(例如,在PRIMASK或FAULTMASK置位的時候軟件清除了懸起狀態(tài)標(biāo)志),則中斷被取消。 中斷掛起15中斷在得到處理器響應(yīng)之前被清除懸起狀態(tài) 嵌入式系統(tǒng)原理與實驗 當(dāng)處理器開始執(zhí)行一個中斷,中斷被激活,同時掛起位將被自動清除。在處理器進(jìn)入服務(wù)例程后對中斷活躍狀態(tài)的設(shè)置 16嵌入式系統(tǒng)原理與實驗 如果一個中斷源持續(xù)保持中斷響應(yīng)型號活躍,在中斷服務(wù)程序結(jié)束時,中斷將被再次掛起。在中斷結(jié)束后,連續(xù)中斷請求再次掛起17嵌入式系統(tǒng)原理與實驗 如果一個中斷在處理器執(zhí)行前有多次脈沖,它將被
12、視為一次中斷請求,而不是多次。18嵌入式系統(tǒng)原理與實驗 如果在服務(wù)例程執(zhí)行時,中斷請求釋放了,但是在服務(wù)例程返回前又重新被置為有效,則CM3會記住此動作,重新懸起該中斷。19嵌入式系統(tǒng)原理與實驗 7.1.5 Fault7.1.5 Fault異常異常有若干個系統(tǒng)異常專用于fault處理。CM3中的Faults可分為以下幾類: n總線faults n存儲器管理faults n用法faults n硬faults 20(1 1)總線錯誤)總線錯誤當(dāng)在AHB接口數(shù)據(jù)傳輸過程中一個錯誤響應(yīng)被接收時,產(chǎn)生總線Fault:1. 取指令2. 數(shù)據(jù)讀/寫3. 在中斷進(jìn)程開始的壓棧4. 中斷進(jìn)程結(jié)束時的出棧5. 當(dāng)
13、處理器開始中斷句柄序列時,讀一個中斷向量地址嵌入式系統(tǒng)原理與實驗 欲使能總線fault服務(wù)例程,需要在NVIC的“系統(tǒng)Handler控制及狀態(tài)寄存器”中置位BUSFAULTENA位。發(fā)生了總線fault后,可通過NVIC中的“總線fault狀態(tài)寄存器”(BFSR)確定產(chǎn)生fault的場合。21總線錯誤狀態(tài)寄存器(0 xE000ED29)位段名稱類型復(fù)位值描述7BFARVALID0=1時表示BFAR有效 6:54STKERRR/Wc0入棧時發(fā)生錯誤 3UNSTKERRR/Wc0出棧時發(fā)生錯誤 2IMPREISERRR/Wc0不精確的數(shù)據(jù)訪問沖突1PRECISERRR/Wc0精確的數(shù)據(jù)訪問沖突0I
14、BUSERRR/Wc0指令訪問沖突嵌入式系統(tǒng)原理與實驗 (2 2) 內(nèi)存管理錯誤內(nèi)存管理錯誤常見的內(nèi)存管理錯誤包括:n 訪問了所有MPU regions覆蓋范圍之外的地址 n 訪問了沒有存儲器與之對應(yīng)的空地址 n 往只讀region寫數(shù)據(jù) n 用戶級下訪問了只允許在特權(quán)級下訪問的地址 22位段名稱類型復(fù)位值描述7MMARVALID0=1時表示MMAR有效 6:54MSTKERRR/Wc0入棧時發(fā)生錯誤 3MUNSTKERRR/Wc0出棧時發(fā)生錯誤 21DACCVIOLR/Wc0數(shù)據(jù)訪問沖突0IACCVIOLR/Wc0取指訪問違例 內(nèi)存管理錯誤寄存器MFSR(0 xE000ED28)嵌入式系統(tǒng)原
15、理與實驗 (3 3) 用法錯誤用法錯誤可以引起用法錯誤的有:n執(zhí)行了協(xié)處理器指令。Cortex-M3本身并不支持協(xié)處理器,但是通過fault異常機制,可以建立一套“軟件模擬”的機制,來執(zhí)行一段程序模擬協(xié)處理器的功能,從而可以方便地在其它Cortex處理器間移植。 n執(zhí)行了未定義的指令。同上一點的道理,亦可以軟件模擬未定義指令的功能。 n嘗試進(jìn)入ARM狀態(tài)。因為CM3不支持ARM狀態(tài),所以用法fault會在切換時產(chǎn)生。軟件可以利用此機制來測試某處理器是否支持ARM狀態(tài)。 n無效的中斷返回(LR中包含了無效/錯誤的值) n使用多重加載/存儲指令時,地址沒有對齊。 n另外,可以讓CM3在遇到除數(shù)為零
16、的時候,以及遇到未對齊訪問的時候也產(chǎn)生用法fault。在NVIC中有兩個控制位分別與它們對應(yīng)。通過設(shè)置這兩個控制位,就可以激活它們。 23嵌入式系統(tǒng)原理與實驗 NVIC提供一個用法錯誤寄存器用法錯誤寄存器 (UFSR) 使得用法錯誤異常程序能夠確定錯誤的原因。用法錯誤寄存器(0 xE000ED2A)24位段名稱類型復(fù)位值描述9DIVBYZEROR/Wc0表示除法運算時除數(shù)為零(只有在DIV_0_TRP置位時才會發(fā)生) 8UNALIGNEDR/Wc0未對齊訪問導(dǎo)致的fault 7:43NOCPR/Wc0試圖執(zhí)行協(xié)處理器相關(guān)指令 2INVPCR/Wc0在異常返回時試圖非法地加載EXC_RETURN
17、到PC。包括非法的指令,非法的上下文以及非法的EXC_RETURN值。The return PC指向的指令試圖設(shè)置PC的值1INVSTATER/Wc0試圖切入ARM狀態(tài) 0UNDEFINSTRR/Wc0執(zhí)行的指令其編碼是未定義的解碼不能 嵌入式系統(tǒng)原理與實驗 (4 4) 硬硬FaultFault可以引起硬件錯誤的有:n用法錯誤,總線錯誤,內(nèi)存管理錯誤n獲取向量時產(chǎn)生的總線錯誤硬件錯誤寄存器(0 xE000ED2C)25位段名稱類型復(fù)位值描述31DEBUGEVTR/Wc 0硬fault因調(diào)試事件而產(chǎn)生 30FORCEDR/Wc 0硬fault是被上訪的。上訪者可以是總線fault、存儲器管理fa
18、ult或是用法fault 29:21VECTBLR/Wc 0硬fault是在取向量時發(fā)生的 0嵌入式系統(tǒng)原理與實驗 如何處理錯誤如何處理錯誤在一個真實運行的系統(tǒng)中,在檢查到錯誤的原因后,軟件需要決定下一步要做什么。一些錯誤處理辦法:復(fù)位 通過設(shè)置NVIC“應(yīng)用程序中斷及復(fù)位控制寄存器”中的VECTRESET位,將只復(fù)位處理器內(nèi)核而不復(fù)位其它片上設(shè)施?;謴?fù) 解決產(chǎn)生fault的問題。例如,如果程序嘗試訪問了協(xié)處理器,可以通過一個協(xié)處理器的軟件模擬器來解決此問題。 中止 如果系統(tǒng)運行了一個RTOS,則相關(guān)的任務(wù)可以被終結(jié)或者重新開始。 26嵌入式系統(tǒng)原理與實驗 7.1.6 7.1.6 SVC SV
19、C 和和PendSVPendSVSVCSVC (系統(tǒng)服務(wù)調(diào)用) :用于產(chǎn)生系統(tǒng)函數(shù)的調(diào)用請求。27使用SVC 指令產(chǎn)生SVC SVC 0 x3 ; Call SVC function 3嵌入式系統(tǒng)原理與實驗 28PendSVPendSV (掛起的系統(tǒng)調(diào)用) :用于在不同任務(wù)之間切換(上下文切換)??梢韵衿胀ǖ闹袛嘁粯颖粦移?。兩個任務(wù)間通過SysTick 輪轉(zhuǎn)調(diào)度的簡單模式嵌入式系統(tǒng)原理與實驗 29發(fā)生IRQ 時上下文切換的問題嵌入式系統(tǒng)原理與實驗 30PendSV異常會自動延遲上下文切換的請求,直到其它的ISR都完成了處理后才執(zhí)行PendSV異常。一般需要把PendSV編程為最低優(yōu)先級的異常。
20、嵌入式系統(tǒng)原理與實驗 1. 任務(wù)A呼叫SVC來請求任務(wù)切換(例如,等待某些工作完成) 2. OS接收到請求,做好上下文切換的準(zhǔn)備,并且懸起一個PendSV異常。 3. 當(dāng)CPU退出SVC后,它立即進(jìn)入PendSV,從而執(zhí)行上下文切換。 4. 當(dāng)PendSV執(zhí)行完畢后,將返回到任務(wù)B,同時進(jìn)入線程模式。 5. 發(fā)生了一個中斷,并且中斷服務(wù)程序開始執(zhí)行 6. 在ISR執(zhí)行過程中,發(fā)生SysTick異常,并且搶占了該ISR。 7. OS執(zhí)行必要的操作,然后懸起PendSV異常以作好上下文切換的準(zhǔn)備。 8. 當(dāng)SysTick退出后,回到先前被搶占的ISR中,ISR繼續(xù)執(zhí)行 9. ISR執(zhí)行完畢并退出后
21、,PendSV服務(wù)例程開始執(zhí)行,并且在里面執(zhí)行上下文切換 10. 當(dāng)PendSV執(zhí)行完畢后,回到任務(wù)A,同時系統(tǒng)再次進(jìn)入線程模式。 31嵌入式系統(tǒng)原理與實驗 7.2.1 NVIC 7.2.1 NVIC 概述概述nNVIC:Nested Vectored Interrupt ControllernNVIC 支持1 到240 外部中斷輸入和一個 不可屏蔽中斷 (NMI) 輸入。nNVIC 可以通過內(nèi)存地址0 xE000E000訪問。n大多數(shù)中斷控制/狀態(tài)寄存器只能夠在特權(quán)模式下訪問(例外:軟件觸發(fā)中斷寄存器可以在用戶級下訪問以產(chǎn)生軟件中斷)。n所有的中斷控制狀態(tài)寄存器均可按字半字字節(jié)的方式訪問。3
22、27.2 NVIC 7.2 NVIC 和中斷控制和中斷控制嵌入式系統(tǒng)原理與實驗 7.2.2 7.2.2 基本中斷配置基本中斷配置每個外部中斷有一些相應(yīng)的寄存器,包括:1. 使能和清除使能寄存器2. 設(shè)置掛起和清除掛起寄存器3. 優(yōu)先級寄存器4. 活動狀態(tài)寄存器下列寄存器也可以影響中斷處理1. 異常屏蔽寄存器(PRIMASK, FAULTMASK以及BASEPRI) 2. 向量表偏移寄存器3. 軟件觸發(fā)中斷寄存器4. 優(yōu)先級分組位段33嵌入式系統(tǒng)原理與實驗 34嵌入式系統(tǒng)原理與實驗 7.2.3 7.2.3 中斷使能和清使能中斷使能和清使能n中斷的使能與除能分別使用各自的寄存器來獨立控制:CM3中
23、可以有240對使能位除能位(SETENA位/CLRENA位)。n欲使能一個中斷,寫1到對應(yīng)SETENA的位中;欲除能一個中斷,寫1到對應(yīng)的CLRENA位中。如果往它們中寫0,則不會有任何效果。SETENA: 0 xE000E100-0 xE000E11CCLRENA: 0 xE000E180-0 xE000E19C35嵌入式系統(tǒng)原理與實驗 SETENA/CLRENA寄存器族 名稱類型地址復(fù)位值描述SETENA0R/W0 xE000E10000-31號外部中斷使能SETENA1R/W0 xE000E104032-63號外部中斷使能SETENA7R/W0 xE000E11C0224-239號外部中
24、斷使能CLRENA0R/W0 xE000E18000-31 號外部中斷清使能CLRENA1R/W0 xE000E184032-63號外部中斷清使能CLRENA7R/W0 xE000E19C0224-239號外部中斷清使能36嵌入式系統(tǒng)原理與實驗 7.2.4 中斷掛起和清除如果一個中斷發(fā)生,但是不能夠立刻執(zhí)行,它將被掛起。中斷掛起狀態(tài) 可以通過設(shè)置中斷掛起(SETPEND) 和清除掛起(CLRPEND) 寄存器來控制。SETPEND: 0 xE000E200-0 xE000E21 CLRPEND: 0 xE000E280-0 xE000E29C37名稱類型地址復(fù)位值描述SETPEND0R/W0
25、xE000E2000掛起外部中斷#0-31SETPEND1R/W0 xE000E2040掛起外部中斷#32-63SETPEND7R/W0 xE000E21C0掛起外部中斷 #224-239CLRPEND0R/W0 xE000E2800清除掛起外部中斷#0-31 CLRPEND1R/W0 xE000E2840清除掛起外部中斷#32-63CLRPEND7R/W0 xE000E29C0清除掛起外部中斷#224-239嵌入式系統(tǒng)原理與實驗 優(yōu)先級優(yōu)先級每個外部中斷都有一個對應(yīng)的優(yōu)先級寄存器,每個寄存器占用8位,但是CM3允許只使用最高3位。中斷優(yōu)先級控制寄存器(0 xE000E400-0 xE000E
26、4EF)38名稱類型地址復(fù)位值描述PRI_0R/W0 xE000E4000 (8-bit)外中斷#0的優(yōu)先級 PRI_1R/W0 xE000E4010 (8-bit)外中斷#1的優(yōu)先級 .PRI_239R/W0 xE000E4EF0 (8-bit)外中斷#239的優(yōu)先級 嵌入式系統(tǒng)原理與實驗 活動狀態(tài)活動狀態(tài)每一個外部中斷都有一個活動狀態(tài)位。當(dāng)處理器開始執(zhí)行中斷處理程序時,該位設(shè)置為1;在中斷返回時清零。中斷活動狀態(tài)寄存器(0 xE000E300-0 xE000E31C)39名稱類型地址復(fù)位值描述ACTIVE0R0 xE000E3000中斷#0-31的活動狀態(tài)寄存器ACTIVE1R0 xE00
27、0E3040中斷#32-63的活動狀態(tài)寄存器ACTIVE7R0 xE000E31C0中斷#224-239的活動狀態(tài)寄存器嵌入式系統(tǒng)原理與實驗 PRIMASK PRIMASK 和和 FAULTMASK FAULTMASK 特殊功能寄存器特殊功能寄存器 PRIMASK(1bit)用于除能在NMI和硬fault之外的所有異常,它有效地把當(dāng)前優(yōu)先級改為0(可編程優(yōu)先級中的最高優(yōu)先級)。該寄存器可以通過使用MRS和MSR命令來編程控制。關(guān)中斷: MOV R0, #1 MSR PRIMASK, R0 ; Write 1 to PRIMASK to disable all interrupts開中斷: MO
28、V R0, #0 MSR PRIMASK, R0 ; Write 0 to PRIMASK to allow interruptsFAULTMASK寄存器通過將當(dāng)前的優(yōu)先級改為-1(置1)來除能所有異常。FAULTMASK 會在異常退出時自動清零。40嵌入式系統(tǒng)原理與實驗 BASEPRIBASEPRI特殊功能寄存器特殊功能寄存器BASEPRI 寄存器(最多9bits)能夠屏蔽優(yōu)先級小于特定值的中斷。屏蔽不高于0 x60的中斷: MOV R0, #0 x60 MSR BASEPRI, R0 ; Disable interrupts with priority 0 x60-0 xFF取消對中斷的屏
29、蔽: MOV R0, #0 x0 MSR BASEPRI, R0 ; Turn off BASEPRI masking41嵌入式系統(tǒng)原理與實驗 BASEPRI寄存器可通過BASEPRI_MAX 名稱進(jìn)行訪問:使用BASEPRI時,可以任意設(shè)置新的優(yōu)先級閾值;使用BASEPRI_MAX時只允許新的優(yōu)先級閾值比原來的那個在數(shù)值上更小,也就是說,只能一次次地擴大掩蔽范圍,反之則不行。 MOV R0, #0 x60 MSR BASEPRI_MAX, R0 ; Disable interrupts with priority 0 x60, 0 x61,., etc MOV R0, #0 xF0 MSR
30、BASEPRI_MAX, R0 ; This write will be ignored because ; it is lower level than 0 x60 MOV R0, #0 x40 MSR BASEPRI_MAX, R0 ; This write is allowed and change ; the masking level to 0 x4042嵌入式系統(tǒng)原理與實驗 其它異常的配置寄存器其它異常的配置寄存器用法異常、內(nèi)存管理異常和總線異常通過系統(tǒng)處理控制和狀態(tài)寄存器使能。系統(tǒng)處理控制和狀態(tài)寄存器 (0 xE000ED24)位名稱類型復(fù)位值描述18USGFAULTENAR/W
31、0用法fault服務(wù)例程使能位 17BUSFAULTENAR/W0總線fault服務(wù)例程使能位 16MEMFAULTENAR/W0存儲器管理fault服務(wù)例程使能位 15SVCALLPENDEDR/W0SVC懸起中。本來已經(jīng)要SVC服務(wù)例程,但是卻被更高優(yōu)先級異常取代 14BUSFAULTPENDEDR/W0總線fault懸起中,細(xì)節(jié)同上。 43嵌入式系統(tǒng)原理與實驗 位名稱類型復(fù)位值描述13MEMFAULTPENDEDR/W0存儲器管理fault懸起中,細(xì)節(jié)同上 12USGFAULTPENDEDR/W0用法fault懸起中,細(xì)節(jié)同上 11SYSTICKACTR/W0SysTick異?;顒又?1
32、0PENDSVACTR/W0PendSV異?;顒又?8MONITORACTR/W0Monitor異?;顒又?7SVCALLACTR/W0SVC異?;顒又?3USGFAULTACTR/W0用法fault異?;顒又?1BUSFAULTACTR/W0總線fault異?;顒又?0MEMFAULTACTR/W0存儲器管理fault異常活動中 (Continued)44嵌入式系統(tǒng)原理與實驗 中斷控制和狀態(tài)寄存器(0 xE000ED04)位名稱類型復(fù)位值描述31NMIPENDSETR/W0寫1以懸起NMI28PENDSVSETR/W0寫1以懸起PendSV。讀取它則返回PendSV的狀態(tài) 27PENDSVC
33、LRW0寫1以清除PendSV懸起狀態(tài) 26PENDSTSETR/W0寫1以懸起SysTick。讀取它則返回PendSV的狀態(tài) 25PENDSTCLRW0寫1以清除SysTick懸起狀態(tài) 23ISRPREEMPTR0=1時,則表示一個懸起的中斷將在下一步時進(jìn)入活動狀態(tài)(用于單步執(zhí)行時的調(diào)試目的) 22ISRPENDINGR01=當(dāng)前正有外部中斷被懸起(不包括NMI) 21:12VECTPENDINGR0懸起的ISR的編號11RETTOBASER0如果異常返回后將回到基級(base level),并且沒有其它異常懸起時,此位為19:0VECTACTIVER0當(dāng)前活動的ISR編號45嵌入式系統(tǒng)原理
34、與實驗 7.2.5 7.2.5 中斷建立過程示例中斷建立過程示例中斷設(shè)置步驟:1. 設(shè)置優(yōu)先級組寄存器。2. 如果需要重定位向量表,將硬件故障和NMI處理例程復(fù)制到一個新的矢量表位置。3. 設(shè)置矢量表偏移寄存器,使之指向新的向量表。4. 為該中斷建立中斷向量。5. 設(shè)置中斷優(yōu)先級。6. 使能中斷。46LDR R0, =0 xE000ED0C ; 應(yīng)用程序中斷及復(fù)位控制寄存器LDR R1, =0 x05FA0500 ; 使用優(yōu)先級組5 (2/6) STR R1, R0 ; 設(shè)置優(yōu)先級組. MOV R4, #8 ; ROM中的向量表LDR R5, =(NEW_VECT_TABLE+8) LDMIA R4!, R0-R1 ; 讀取NMI和硬fault的向量STMIA R5!, R0-R1 ; 拷貝它們的向量到新表中嵌入式系統(tǒng)原理與實驗 . LDR R0, =0 xE000ED08 ; 向量表偏移量寄存器的地址LDR R1, =NEW_VECT_TABLE STR R1, R0 ; 把向量表重定位. LDR R0, =IRQ7_Handler ; 取得IRQ #7服務(wù)例程的入口地址LDR R1, =0 xE000ED08 ; 向量表偏移量寄存器的地址LDR R1, R1 ADD R1, R1,#(4*(7+16); 計算IRQ #7服務(wù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資風(fēng)險的識別與防范
- 2025年人力資源共享策劃戰(zhàn)略協(xié)議樣本
- 提升農(nóng)業(yè)科技創(chuàng)新體系的背景意義及必要性
- 春分節(jié)氣的社交媒體營銷
- 10.1 三維繪圖基礎(chǔ)(課件)-高二《Auto+CAD》同步課堂(機工社)
- 小寒節(jié)氣解讀
- 工程維保協(xié)議書范本
- 大蒜兒童美術(shù)課件
- 2025年汽車零部件供應(yīng)協(xié)議
- 2025年越野汽車項目規(guī)劃申請報告模板
- 上海市徐匯區(qū)上海中學(xué)、復(fù)旦附中等八校2024-2025學(xué)年高二下物理期末達(dá)標(biāo)檢測模擬試題含解析
- 如何理解中國人民抗日戰(zhàn)爭勝利對實現(xiàn)中華民族偉大復(fù)興的意義?參考答案三
- 2025-2030中國數(shù)字PCR(DPCR)和QPCR行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- Unit 8 Once upon a Time單元重點單詞變形短語語法句型精練(原卷版)
- 相機全景拍攝與拼接技術(shù)考核試卷
- 職業(yè)暴露與防試題及答案
- 佛山公務(wù)員試題及答案
- 2025年高考政治搶押秘籍(江蘇專用)時政熱點03發(fā)展民營經(jīng)濟-(江蘇專用)(學(xué)生版+解析)
- 2025年四川省成都市錦江區(qū)中考二診物理試題(含答案)
- 2025年安徽高考?xì)v史模擬預(yù)測試卷(含答案解析)
- 扶貧知識考試試題及答案
評論
0/150
提交評論