




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)原理與實(shí)驗(yàn) 第第7 7章章 Cortex-M3 Cortex-M3 異常和中斷異常和中斷7.1 異常7.2 NVIC 和中斷控制1嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.1.1 7.1.1 異常類型異常類型 所有能打斷正常執(zhí)行流的事件都稱為異常。CM3支持為數(shù)眾多的系統(tǒng)異常和外部中斷。 編號(hào)為115的對(duì)應(yīng)系統(tǒng)異常;編號(hào)為16255的對(duì)應(yīng)外部中斷 大部分的異常可編程優(yōu)先級(jí),其中很少的一些有固定的優(yōu)先級(jí)。 當(dāng)前運(yùn)行的異常值,是由特殊寄存器IPSR或NVIC的中斷控制狀態(tài)寄存器表示的。27.1 7.1 異常異常嵌入式系統(tǒng)原理與實(shí)驗(yàn) 編號(hào)類型優(yōu)先級(jí)描述1復(fù)位-3 (最高)復(fù)位2NMI-2 不可屏蔽中斷(外
2、部NMI 輸入)3硬異常-1所有被除能的fault,都將“上訪”(escalation)成硬fault。只要FAULTMASK沒(méi)有置位,硬fault服務(wù)例程就被強(qiáng)制執(zhí)行。Fault被除能的原因包括被禁用,或者PRIMASK/BASEPRI被掩蔽。若FAULTMASK也置位,則硬fault也被除能,此時(shí)徹底“關(guān)中” 4MemManage fault 可編程存儲(chǔ)器管理fault,MPU訪問(wèn)違例以及訪問(wèn)非法位置均可引發(fā)。企圖在“非執(zhí)行區(qū)”取指也會(huì)引發(fā)此fault 5總線fault 可編程從總線系統(tǒng)收到了錯(cuò)誤響應(yīng),原因可以是預(yù)取流產(chǎn)(Abort)或數(shù)據(jù)流產(chǎn),企圖訪問(wèn)協(xié)處理器也會(huì)引發(fā)此fault 6用法
3、(usage) fault可編程由于程序錯(cuò)誤導(dǎo)致的異常。通常是使用了一條無(wú)效指令,或者是非法的狀態(tài)轉(zhuǎn)換,例如嘗試切換到ARM狀態(tài) 3嵌入式系統(tǒng)原理與實(shí)驗(yàn) 編號(hào)類型優(yōu)先級(jí)描述7-10保留N/A11SVCall可編程執(zhí)行系統(tǒng)服務(wù)調(diào)用指令(SVC)引發(fā)的異常 12調(diào)試監(jiān)視器可編程調(diào)試監(jiān)視器(斷點(diǎn),數(shù)據(jù)觀察點(diǎn),或者是外部調(diào)試請(qǐng)求) 13保留N/A14PendSV 可編程為系統(tǒng)設(shè)備而設(shè)的“可懸掛請(qǐng)求”15SysTick 可編程系統(tǒng)滴答定時(shí)器16IRQ#0可編程外中斷#0 17IRQ#1可編程外中斷#1255IRQ#239可編程外中斷#2394續(xù)嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.1.2 7.1.2 優(yōu)先級(jí)定義優(yōu)先
4、級(jí)定義 在CM3中,優(yōu)先級(jí)決定一個(gè)異常是否能被掩蔽,以及在未掩蔽的情況下何時(shí)可以響應(yīng)。 優(yōu)先級(jí)的數(shù)值越小,則優(yōu)先級(jí)越高。 CM3支持中斷嵌套,使得高優(yōu)先級(jí)異常會(huì)搶占(preempt)低優(yōu)先級(jí)異常。 3個(gè)系統(tǒng)異常:復(fù)位,NMI以及硬fault,它們有固定的優(yōu)先級(jí),并且它們的優(yōu)先級(jí)號(hào)是負(fù)數(shù),從而高于所有其它異常。 所有其它異常的優(yōu)先級(jí)則都是可編程的。 CM3支持3個(gè)固定的高優(yōu)先級(jí)和多達(dá)256級(jí)的可編程優(yōu)先級(jí),并且支持128級(jí)搶占。但是,絕大多數(shù)CM3芯片都會(huì)精簡(jiǎn)設(shè)計(jì),裁掉表達(dá)優(yōu)先級(jí)的幾個(gè)低端有效位,以減少優(yōu)先級(jí)的級(jí)數(shù),如8級(jí),16級(jí),32級(jí)等。5嵌入式系統(tǒng)原理與實(shí)驗(yàn) 3 3 比特優(yōu)先級(jí)比特優(yōu)先級(jí)B
5、it 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0用于表達(dá)優(yōu)先級(jí)用于表達(dá)優(yōu)先級(jí)不使用不使用, 讀出值為讀出值為04 4比特優(yōu)先級(jí)比特優(yōu)先級(jí)優(yōu)先級(jí)寄存器的最小寬度值為3比特。Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0用于表達(dá)優(yōu)先級(jí)用于表達(dá)優(yōu)先級(jí)不使用不使用, 讀出值為讀出值為06嵌入式系統(tǒng)原理與實(shí)驗(yàn) 3 3位或位或4 4位寬度位寬度的可用優(yōu)先級(jí)的可用優(yōu)先級(jí)7通過(guò)讓優(yōu)先級(jí)以MSB對(duì)齊,可以簡(jiǎn)化程序的跨器件移植。嵌入式系統(tǒng)原理與實(shí)驗(yàn) 分別使用3-bit, 5-bit, 和8-bit 優(yōu)先級(jí)寄存器的使用情況:優(yōu)先級(jí)異常類型3比特表達(dá)5比
6、特表達(dá)8比特表達(dá)-3 (Highest)復(fù)位-3-3-3-2NMI-2-2-2-1硬件錯(cuò)誤-1-1-1010 xFF具有優(yōu)先級(jí)并且可編程的異常0 x000 x200 xE00 x000 x080 xF80 x00, 0 x010 x02, 0 x030 xFE, 0 xFF8嵌入式系統(tǒng)原理與實(shí)驗(yàn) 搶占優(yōu)先級(jí)和亞優(yōu)先級(jí)搶占優(yōu)先級(jí)和亞優(yōu)先級(jí)通過(guò)NVIC中“應(yīng)用程序中斷及復(fù)位控制寄存器”的位段“PRIGROUP優(yōu)先級(jí)組”設(shè)置。該位段的值對(duì)每一個(gè)優(yōu)先級(jí)可配置的異常都有影響,把其優(yōu)先級(jí)分為2個(gè)位段:MSB所在的位段(左邊的)對(duì)應(yīng)搶占優(yōu)先級(jí),而LSB所在的位段(右邊的)對(duì)應(yīng)亞優(yōu)先級(jí)。搶占優(yōu)先位段和亞優(yōu)先級(jí)
7、位段在優(yōu)先級(jí)寄存器中的定義優(yōu)先組搶占優(yōu)先級(jí)位段亞優(yōu)先級(jí)位段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)原理與實(shí)驗(yàn) 應(yīng)用程序中斷和復(fù)位控制寄存器應(yīng)用程序中斷和復(fù)位控制寄存器( (地址地址0 xE000ED0C)0 xE000ED0C)Bits名稱類型復(fù)位值描述31:16VECTKEYR/W存取關(guān)鍵字;為了寫(xiě)入這個(gè)寄存器必須向這個(gè)位段寫(xiě)人 0 x05FA15ENDIANNESSR表示數(shù)據(jù)的排列順序: 1 表
8、示大端(BE8) 而0表示小端10:8PRIGROUPR/W0優(yōu)先組2SYSRESETREQW請(qǐng)求芯片控制邏輯產(chǎn)生一個(gè)復(fù)位信號(hào)1VECTCLRACTIVEW清除異常的所有活躍狀態(tài)信息0VECTRESETW復(fù)位Cortex-M3 處理器。 但不會(huì)復(fù)位處理器以外的電路。10嵌入式系統(tǒng)原理與實(shí)驗(yàn) 11Bit 7Bit 6Bit 5Bit 4 Bit 0搶占級(jí)亞不使用, 讀出值0嵌入式系統(tǒng)原理與實(shí)驗(yàn) 12Bit 7Bit 6Bit 5Bit 4 Bit 2Bit 1Bit 0搶占級(jí)不使用亞優(yōu)先級(jí)嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.1.3 7.1.3 向量表向量表 響應(yīng)異常時(shí),CM3需要定位其服務(wù)例程的入口地址。
9、這些入口地址存儲(chǔ)在所謂的“(異常)向量表”中。 缺省情況下,CM3認(rèn)為該表位于零地址處,且各向量占用4字節(jié)。上電后的異常向量表地址異常號(hào)值(大小為“字”)0 x00000000MSP 初始值0 x000000041復(fù)位向量(程序計(jì)數(shù)器初始值)0 x000000082NMI 服務(wù)例程的入口地址 0 x0000000C3硬fault服務(wù)例程的入口地址 其它異常服務(wù)例程的入口地址 13嵌入式系統(tǒng)原理與實(shí)驗(yàn) n通過(guò)設(shè)置NVIC中的向量表偏移寄存器向量表偏移寄存器,可以將向量表重定位到其它的內(nèi)存地址。n向量表的起始地址:先求出系統(tǒng)中共有多少個(gè)向量,再把這個(gè)數(shù)字向上“圓整”到2的整次冪,而起始地址必須對(duì)齊
10、到后者的邊界上。n例:如果一共有32個(gè)中斷,則共有32+16(系統(tǒng)異常)=48個(gè)向量,向上圓整到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來(lái)自CODE區(qū)或RAM區(qū)的表偏移范圍嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.1.4 中斷輸入和掛起行為n當(dāng)中斷輸入腳被置為有效(assert)后,該中斷就被懸起。即使后來(lái)中斷源撤消了中斷請(qǐng)求,已經(jīng)被標(biāo)記成懸起的
11、中斷也被記錄下來(lái)。到了系統(tǒng)中它的優(yōu)先級(jí)最高的時(shí)候,就會(huì)得到響應(yīng)。 n如果在某個(gè)中斷得到響應(yīng)之前,其懸起狀態(tài)被清除了(例如,在PRIMASK或FAULTMASK置位的時(shí)候軟件清除了懸起狀態(tài)標(biāo)志),則中斷被取消。 中斷掛起15中斷在得到處理器響應(yīng)之前被清除懸起狀態(tài) 嵌入式系統(tǒng)原理與實(shí)驗(yàn) 當(dāng)處理器開(kāi)始執(zhí)行一個(gè)中斷,中斷被激活,同時(shí)掛起位將被自動(dòng)清除。在處理器進(jìn)入服務(wù)例程后對(duì)中斷活躍狀態(tài)的設(shè)置 16嵌入式系統(tǒng)原理與實(shí)驗(yàn) 如果一個(gè)中斷源持續(xù)保持中斷響應(yīng)型號(hào)活躍,在中斷服務(wù)程序結(jié)束時(shí),中斷將被再次掛起。在中斷結(jié)束后,連續(xù)中斷請(qǐng)求再次掛起17嵌入式系統(tǒng)原理與實(shí)驗(yàn) 如果一個(gè)中斷在處理器執(zhí)行前有多次脈沖,它將被
12、視為一次中斷請(qǐng)求,而不是多次。18嵌入式系統(tǒng)原理與實(shí)驗(yàn) 如果在服務(wù)例程執(zhí)行時(shí),中斷請(qǐng)求釋放了,但是在服務(wù)例程返回前又重新被置為有效,則CM3會(huì)記住此動(dòng)作,重新懸起該中斷。19嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.1.5 Fault7.1.5 Fault異常異常有若干個(gè)系統(tǒng)異常專用于fault處理。CM3中的Faults可分為以下幾類: n總線faults n存儲(chǔ)器管理faults n用法faults n硬faults 20(1 1)總線錯(cuò)誤)總線錯(cuò)誤當(dāng)在AHB接口數(shù)據(jù)傳輸過(guò)程中一個(gè)錯(cuò)誤響應(yīng)被接收時(shí),產(chǎn)生總線Fault:1. 取指令2. 數(shù)據(jù)讀/寫(xiě)3. 在中斷進(jìn)程開(kāi)始的壓棧4. 中斷進(jìn)程結(jié)束時(shí)的出棧5. 當(dāng)
13、處理器開(kāi)始中斷句柄序列時(shí),讀一個(gè)中斷向量地址嵌入式系統(tǒng)原理與實(shí)驗(yàn) 欲使能總線fault服務(wù)例程,需要在NVIC的“系統(tǒng)Handler控制及狀態(tài)寄存器”中置位BUSFAULTENA位。發(fā)生了總線fault后,可通過(guò)NVIC中的“總線fault狀態(tài)寄存器”(BFSR)確定產(chǎn)生fault的場(chǎng)合。21總線錯(cuò)誤狀態(tài)寄存器(0 xE000ED29)位段名稱類型復(fù)位值描述7BFARVALID0=1時(shí)表示BFAR有效 6:54STKERRR/Wc0入棧時(shí)發(fā)生錯(cuò)誤 3UNSTKERRR/Wc0出棧時(shí)發(fā)生錯(cuò)誤 2IMPREISERRR/Wc0不精確的數(shù)據(jù)訪問(wèn)沖突1PRECISERRR/Wc0精確的數(shù)據(jù)訪問(wèn)沖突0I
14、BUSERRR/Wc0指令訪問(wèn)沖突嵌入式系統(tǒng)原理與實(shí)驗(yàn) (2 2) 內(nèi)存管理錯(cuò)誤內(nèi)存管理錯(cuò)誤常見(jiàn)的內(nèi)存管理錯(cuò)誤包括:n 訪問(wèn)了所有MPU regions覆蓋范圍之外的地址 n 訪問(wèn)了沒(méi)有存儲(chǔ)器與之對(duì)應(yīng)的空地址 n 往只讀region寫(xiě)數(shù)據(jù) n 用戶級(jí)下訪問(wèn)了只允許在特權(quán)級(jí)下訪問(wèn)的地址 22位段名稱類型復(fù)位值描述7MMARVALID0=1時(shí)表示MMAR有效 6:54MSTKERRR/Wc0入棧時(shí)發(fā)生錯(cuò)誤 3MUNSTKERRR/Wc0出棧時(shí)發(fā)生錯(cuò)誤 21DACCVIOLR/Wc0數(shù)據(jù)訪問(wèn)沖突0IACCVIOLR/Wc0取指訪問(wèn)違例 內(nèi)存管理錯(cuò)誤寄存器MFSR(0 xE000ED28)嵌入式系統(tǒng)原
15、理與實(shí)驗(yàn) (3 3) 用法錯(cuò)誤用法錯(cuò)誤可以引起用法錯(cuò)誤的有:n執(zhí)行了協(xié)處理器指令。Cortex-M3本身并不支持協(xié)處理器,但是通過(guò)fault異常機(jī)制,可以建立一套“軟件模擬”的機(jī)制,來(lái)執(zhí)行一段程序模擬協(xié)處理器的功能,從而可以方便地在其它Cortex處理器間移植。 n執(zhí)行了未定義的指令。同上一點(diǎn)的道理,亦可以軟件模擬未定義指令的功能。 n嘗試進(jìn)入ARM狀態(tài)。因?yàn)镃M3不支持ARM狀態(tài),所以用法fault會(huì)在切換時(shí)產(chǎn)生。軟件可以利用此機(jī)制來(lái)測(cè)試某處理器是否支持ARM狀態(tài)。 n無(wú)效的中斷返回(LR中包含了無(wú)效/錯(cuò)誤的值) n使用多重加載/存儲(chǔ)指令時(shí),地址沒(méi)有對(duì)齊。 n另外,可以讓CM3在遇到除數(shù)為零
16、的時(shí)候,以及遇到未對(duì)齊訪問(wèn)的時(shí)候也產(chǎn)生用法fault。在NVIC中有兩個(gè)控制位分別與它們對(duì)應(yīng)。通過(guò)設(shè)置這兩個(gè)控制位,就可以激活它們。 23嵌入式系統(tǒng)原理與實(shí)驗(yàn) NVIC提供一個(gè)用法錯(cuò)誤寄存器用法錯(cuò)誤寄存器 (UFSR) 使得用法錯(cuò)誤異常程序能夠確定錯(cuò)誤的原因。用法錯(cuò)誤寄存器(0 xE000ED2A)24位段名稱類型復(fù)位值描述9DIVBYZEROR/Wc0表示除法運(yùn)算時(shí)除數(shù)為零(只有在DIV_0_TRP置位時(shí)才會(huì)發(fā)生) 8UNALIGNEDR/Wc0未對(duì)齊訪問(wèn)導(dǎo)致的fault 7:43NOCPR/Wc0試圖執(zhí)行協(xié)處理器相關(guān)指令 2INVPCR/Wc0在異常返回時(shí)試圖非法地加載EXC_RETURN
17、到PC。包括非法的指令,非法的上下文以及非法的EXC_RETURN值。The return PC指向的指令試圖設(shè)置PC的值1INVSTATER/Wc0試圖切入ARM狀態(tài) 0UNDEFINSTRR/Wc0執(zhí)行的指令其編碼是未定義的解碼不能 嵌入式系統(tǒng)原理與實(shí)驗(yàn) (4 4) 硬硬FaultFault可以引起硬件錯(cuò)誤的有:n用法錯(cuò)誤,總線錯(cuò)誤,內(nèi)存管理錯(cuò)誤n獲取向量時(shí)產(chǎn)生的總線錯(cuò)誤硬件錯(cuò)誤寄存器(0 xE000ED2C)25位段名稱類型復(fù)位值描述31DEBUGEVTR/Wc 0硬fault因調(diào)試事件而產(chǎn)生 30FORCEDR/Wc 0硬fault是被上訪的。上訪者可以是總線fault、存儲(chǔ)器管理fa
18、ult或是用法fault 29:21VECTBLR/Wc 0硬fault是在取向量時(shí)發(fā)生的 0嵌入式系統(tǒng)原理與實(shí)驗(yàn) 如何處理錯(cuò)誤如何處理錯(cuò)誤在一個(gè)真實(shí)運(yùn)行的系統(tǒng)中,在檢查到錯(cuò)誤的原因后,軟件需要決定下一步要做什么。一些錯(cuò)誤處理辦法:復(fù)位 通過(guò)設(shè)置NVIC“應(yīng)用程序中斷及復(fù)位控制寄存器”中的VECTRESET位,將只復(fù)位處理器內(nèi)核而不復(fù)位其它片上設(shè)施。恢復(fù) 解決產(chǎn)生fault的問(wèn)題。例如,如果程序嘗試訪問(wèn)了協(xié)處理器,可以通過(guò)一個(gè)協(xié)處理器的軟件模擬器來(lái)解決此問(wèn)題。 中止 如果系統(tǒng)運(yùn)行了一個(gè)RTOS,則相關(guān)的任務(wù)可以被終結(jié)或者重新開(kāi)始。 26嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.1.6 7.1.6 SVC SV
19、C 和和PendSVPendSVSVCSVC (系統(tǒng)服務(wù)調(diào)用) :用于產(chǎn)生系統(tǒng)函數(shù)的調(diào)用請(qǐng)求。27使用SVC 指令產(chǎn)生SVC SVC 0 x3 ; Call SVC function 3嵌入式系統(tǒng)原理與實(shí)驗(yàn) 28PendSVPendSV (掛起的系統(tǒng)調(diào)用) :用于在不同任務(wù)之間切換(上下文切換)??梢韵衿胀ǖ闹袛嘁粯颖粦移稹蓚€(gè)任務(wù)間通過(guò)SysTick 輪轉(zhuǎn)調(diào)度的簡(jiǎn)單模式嵌入式系統(tǒng)原理與實(shí)驗(yàn) 29發(fā)生IRQ 時(shí)上下文切換的問(wèn)題嵌入式系統(tǒng)原理與實(shí)驗(yàn) 30PendSV異常會(huì)自動(dòng)延遲上下文切換的請(qǐng)求,直到其它的ISR都完成了處理后才執(zhí)行PendSV異常。一般需要把PendSV編程為最低優(yōu)先級(jí)的異常。
20、嵌入式系統(tǒng)原理與實(shí)驗(yàn) 1. 任務(wù)A呼叫SVC來(lái)請(qǐng)求任務(wù)切換(例如,等待某些工作完成) 2. OS接收到請(qǐng)求,做好上下文切換的準(zhǔn)備,并且懸起一個(gè)PendSV異常。 3. 當(dāng)CPU退出SVC后,它立即進(jìn)入PendSV,從而執(zhí)行上下文切換。 4. 當(dāng)PendSV執(zhí)行完畢后,將返回到任務(wù)B,同時(shí)進(jìn)入線程模式。 5. 發(fā)生了一個(gè)中斷,并且中斷服務(wù)程序開(kāi)始執(zhí)行 6. 在ISR執(zhí)行過(guò)程中,發(fā)生SysTick異常,并且搶占了該ISR。 7. OS執(zhí)行必要的操作,然后懸起PendSV異常以作好上下文切換的準(zhǔn)備。 8. 當(dāng)SysTick退出后,回到先前被搶占的ISR中,ISR繼續(xù)執(zhí)行 9. ISR執(zhí)行完畢并退出后
21、,PendSV服務(wù)例程開(kāi)始執(zhí)行,并且在里面執(zhí)行上下文切換 10. 當(dāng)PendSV執(zhí)行完畢后,回到任務(wù)A,同時(shí)系統(tǒng)再次進(jìn)入線程模式。 31嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.2.1 NVIC 7.2.1 NVIC 概述概述nNVIC:Nested Vectored Interrupt ControllernNVIC 支持1 到240 外部中斷輸入和一個(gè) 不可屏蔽中斷 (NMI) 輸入。nNVIC 可以通過(guò)內(nèi)存地址0 xE000E000訪問(wèn)。n大多數(shù)中斷控制/狀態(tài)寄存器只能夠在特權(quán)模式下訪問(wèn)(例外:軟件觸發(fā)中斷寄存器可以在用戶級(jí)下訪問(wèn)以產(chǎn)生軟件中斷)。n所有的中斷控制狀態(tài)寄存器均可按字半字字節(jié)的方式訪問(wèn)。3
22、27.2 NVIC 7.2 NVIC 和中斷控制和中斷控制嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.2.2 7.2.2 基本中斷配置基本中斷配置每個(gè)外部中斷有一些相應(yīng)的寄存器,包括:1. 使能和清除使能寄存器2. 設(shè)置掛起和清除掛起寄存器3. 優(yōu)先級(jí)寄存器4. 活動(dòng)狀態(tài)寄存器下列寄存器也可以影響中斷處理1. 異常屏蔽寄存器(PRIMASK, FAULTMASK以及BASEPRI) 2. 向量表偏移寄存器3. 軟件觸發(fā)中斷寄存器4. 優(yōu)先級(jí)分組位段33嵌入式系統(tǒng)原理與實(shí)驗(yàn) 34嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.2.3 7.2.3 中斷使能和清使能中斷使能和清使能n中斷的使能與除能分別使用各自的寄存器來(lái)獨(dú)立控制:CM3中
23、可以有240對(duì)使能位除能位(SETENA位/CLRENA位)。n欲使能一個(gè)中斷,寫(xiě)1到對(duì)應(yīng)SETENA的位中;欲除能一個(gè)中斷,寫(xiě)1到對(duì)應(yīng)的CLRENA位中。如果往它們中寫(xiě)0,則不會(huì)有任何效果。SETENA: 0 xE000E100-0 xE000E11CCLRENA: 0 xE000E180-0 xE000E19C35嵌入式系統(tǒng)原理與實(shí)驗(yàn) SETENA/CLRENA寄存器族 名稱類型地址復(fù)位值描述SETENA0R/W0 xE000E10000-31號(hào)外部中斷使能SETENA1R/W0 xE000E104032-63號(hào)外部中斷使能SETENA7R/W0 xE000E11C0224-239號(hào)外部中
24、斷使能CLRENA0R/W0 xE000E18000-31 號(hào)外部中斷清使能CLRENA1R/W0 xE000E184032-63號(hào)外部中斷清使能CLRENA7R/W0 xE000E19C0224-239號(hào)外部中斷清使能36嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7.2.4 中斷掛起和清除如果一個(gè)中斷發(fā)生,但是不能夠立刻執(zhí)行,它將被掛起。中斷掛起狀態(tài) 可以通過(guò)設(shè)置中斷掛起(SETPEND) 和清除掛起(CLRPEND) 寄存器來(lái)控制。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)原理與實(shí)驗(yàn) 優(yōu)先級(jí)優(yōu)先級(jí)每個(gè)外部中斷都有一個(gè)對(duì)應(yīng)的優(yōu)先級(jí)寄存器,每個(gè)寄存器占用8位,但是CM3允許只使用最高3位。中斷優(yōu)先級(jí)控制寄存器(0 xE000E400-0 xE000E
26、4EF)38名稱類型地址復(fù)位值描述PRI_0R/W0 xE000E4000 (8-bit)外中斷#0的優(yōu)先級(jí) PRI_1R/W0 xE000E4010 (8-bit)外中斷#1的優(yōu)先級(jí) .PRI_239R/W0 xE000E4EF0 (8-bit)外中斷#239的優(yōu)先級(jí) 嵌入式系統(tǒng)原理與實(shí)驗(yàn) 活動(dòng)狀態(tài)活動(dòng)狀態(tài)每一個(gè)外部中斷都有一個(gè)活動(dòng)狀態(tài)位。當(dāng)處理器開(kāi)始執(zhí)行中斷處理程序時(shí),該位設(shè)置為1;在中斷返回時(shí)清零。中斷活動(dòng)狀態(tài)寄存器(0 xE000E300-0 xE000E31C)39名稱類型地址復(fù)位值描述ACTIVE0R0 xE000E3000中斷#0-31的活動(dòng)狀態(tài)寄存器ACTIVE1R0 xE00
27、0E3040中斷#32-63的活動(dòng)狀態(tài)寄存器ACTIVE7R0 xE000E31C0中斷#224-239的活動(dòng)狀態(tài)寄存器嵌入式系統(tǒng)原理與實(shí)驗(yàn) PRIMASK PRIMASK 和和 FAULTMASK FAULTMASK 特殊功能寄存器特殊功能寄存器 PRIMASK(1bit)用于除能在NMI和硬fault之外的所有異常,它有效地把當(dāng)前優(yōu)先級(jí)改為0(可編程優(yōu)先級(jí)中的最高優(yōu)先級(jí))。該寄存器可以通過(guò)使用MRS和MSR命令來(lái)編程控制。關(guān)中斷: MOV R0, #1 MSR PRIMASK, R0 ; Write 1 to PRIMASK to disable all interrupts開(kāi)中斷: MO
28、V R0, #0 MSR PRIMASK, R0 ; Write 0 to PRIMASK to allow interruptsFAULTMASK寄存器通過(guò)將當(dāng)前的優(yōu)先級(jí)改為-1(置1)來(lái)除能所有異常。FAULTMASK 會(huì)在異常退出時(shí)自動(dòng)清零。40嵌入式系統(tǒng)原理與實(shí)驗(yàn) BASEPRIBASEPRI特殊功能寄存器特殊功能寄存器BASEPRI 寄存器(最多9bits)能夠屏蔽優(yōu)先級(jí)小于特定值的中斷。屏蔽不高于0 x60的中斷: MOV R0, #0 x60 MSR BASEPRI, R0 ; Disable interrupts with priority 0 x60-0 xFF取消對(duì)中斷的屏
29、蔽: MOV R0, #0 x0 MSR BASEPRI, R0 ; Turn off BASEPRI masking41嵌入式系統(tǒng)原理與實(shí)驗(yàn) BASEPRI寄存器可通過(guò)BASEPRI_MAX 名稱進(jìn)行訪問(wèn):使用BASEPRI時(shí),可以任意設(shè)置新的優(yōu)先級(jí)閾值;使用BASEPRI_MAX時(shí)只允許新的優(yōu)先級(jí)閾值比原來(lái)的那個(gè)在數(shù)值上更小,也就是說(shuō),只能一次次地?cái)U(kuò)大掩蔽范圍,反之則不行。 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)原理與實(shí)驗(yàn) 其它異常的配置寄存器其它異常的配置寄存器用法異常、內(nèi)存管理異常和總線異常通過(guò)系統(tǒng)處理控制和狀態(tài)寄存器使能。系統(tǒng)處理控制和狀態(tài)寄存器 (0 xE000ED24)位名稱類型復(fù)位值描述18USGFAULTENAR/W
31、0用法fault服務(wù)例程使能位 17BUSFAULTENAR/W0總線fault服務(wù)例程使能位 16MEMFAULTENAR/W0存儲(chǔ)器管理fault服務(wù)例程使能位 15SVCALLPENDEDR/W0SVC懸起中。本來(lái)已經(jīng)要SVC服務(wù)例程,但是卻被更高優(yōu)先級(jí)異常取代 14BUSFAULTPENDEDR/W0總線fault懸起中,細(xì)節(jié)同上。 43嵌入式系統(tǒng)原理與實(shí)驗(yàn) 位名稱類型復(fù)位值描述13MEMFAULTPENDEDR/W0存儲(chǔ)器管理fault懸起中,細(xì)節(jié)同上 12USGFAULTPENDEDR/W0用法fault懸起中,細(xì)節(jié)同上 11SYSTICKACTR/W0SysTick異?;顒?dòng)中 1
32、0PENDSVACTR/W0PendSV異常活動(dòng)中 8MONITORACTR/W0Monitor異?;顒?dòng)中 7SVCALLACTR/W0SVC異?;顒?dòng)中 3USGFAULTACTR/W0用法fault異?;顒?dòng)中 1BUSFAULTACTR/W0總線fault異常活動(dòng)中 0MEMFAULTACTR/W0存儲(chǔ)器管理fault異?;顒?dòng)中 (Continued)44嵌入式系統(tǒng)原理與實(shí)驗(yàn) 中斷控制和狀態(tài)寄存器(0 xE000ED04)位名稱類型復(fù)位值描述31NMIPENDSETR/W0寫(xiě)1以懸起NMI28PENDSVSETR/W0寫(xiě)1以懸起PendSV。讀取它則返回PendSV的狀態(tài) 27PENDSVC
33、LRW0寫(xiě)1以清除PendSV懸起狀態(tài) 26PENDSTSETR/W0寫(xiě)1以懸起SysTick。讀取它則返回PendSV的狀態(tài) 25PENDSTCLRW0寫(xiě)1以清除SysTick懸起狀態(tài) 23ISRPREEMPTR0=1時(shí),則表示一個(gè)懸起的中斷將在下一步時(shí)進(jìn)入活動(dòng)狀態(tài)(用于單步執(zhí)行時(shí)的調(diào)試目的) 22ISRPENDINGR01=當(dāng)前正有外部中斷被懸起(不包括NMI) 21:12VECTPENDINGR0懸起的ISR的編號(hào)11RETTOBASER0如果異常返回后將回到基級(jí)(base level),并且沒(méi)有其它異常懸起時(shí),此位為19:0VECTACTIVER0當(dāng)前活動(dòng)的ISR編號(hào)45嵌入式系統(tǒng)原理
34、與實(shí)驗(yàn) 7.2.5 7.2.5 中斷建立過(guò)程示例中斷建立過(guò)程示例中斷設(shè)置步驟:1. 設(shè)置優(yōu)先級(jí)組寄存器。2. 如果需要重定位向量表,將硬件故障和NMI處理例程復(fù)制到一個(gè)新的矢量表位置。3. 設(shè)置矢量表偏移寄存器,使之指向新的向量表。4. 為該中斷建立中斷向量。5. 設(shè)置中斷優(yōu)先級(jí)。6. 使能中斷。46LDR R0, =0 xE000ED0C ; 應(yīng)用程序中斷及復(fù)位控制寄存器LDR R1, =0 x05FA0500 ; 使用優(yōu)先級(jí)組5 (2/6) STR R1, R0 ; 設(shè)置優(yōu)先級(jí)組. MOV R4, #8 ; ROM中的向量表LDR R5, =(NEW_VECT_TABLE+8) LDMIA R4!, R0-R1 ; 讀取NMI和硬fault的向量STMIA R5!, R0-R1 ; 拷貝它們的向量到新表中嵌入式系統(tǒng)原理與實(shí)驗(yàn) . 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); 計(jì)算IRQ #7服務(wù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單人船舶出售合同范本
- 萌芽課題申報(bào)書(shū)
- 提升編導(dǎo)能力課題申報(bào)書(shū)
- 和學(xué)校超市合作合同范本
- 賣場(chǎng)出租租賃合同范本
- 為課題申報(bào)書(shū)
- 勞動(dòng)合同范例 海南
- 產(chǎn)品競(jìng)拍合同范本
- 勞務(wù)與員工合同范本
- 加氫原料采購(gòu)合同范本
- 2024年安徽省公務(wù)員【申論】考試真題及答案-(A卷+B卷+C卷)三套
- 2025年中央一號(hào)文件參考試題庫(kù)100題(含答案)
- 2025年黑龍江生態(tài)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)1套
- 白介素6臨床意義
- 2025年充電樁場(chǎng)地租賃合同官方版模板
- 《彰化縣樂(lè)樂(lè)棒球》課件
- 2025-2030年墻體裂縫檢測(cè)與修復(fù)機(jī)器人行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 北京2025年01月全國(guó)婦聯(lián)所屬在京事業(yè)單位2025年度公開(kāi)招考93名工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 初中班會(huì) 《哪吒 2:勇戰(zhàn)困難伴夢(mèng)前行》開(kāi)學(xué)第一課主題班會(huì) 教案
- 《馬爾科夫過(guò)程介紹》課件
- 四川成都?xì)v年中考語(yǔ)文現(xiàn)代文閱讀之非連續(xù)性文本閱讀4篇(截至2024年)
評(píng)論
0/150
提交評(píng)論