版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ARM Cortex-M3 內核結構2.1 ARM Cortex-M3 處理器簡介2.1.1 概述ARM公司成立于上個世紀九十年代初,致力于處理器內核研究,ARM 即 Advanced RISC Machines 的縮寫,ARM公司本身不生產芯片,只設計內核,靠轉讓設計許可,由合作伙伴公司來生產各具特色的 芯片。這種運行模式運營的成果受到全球半導公司以及用戶的青睞。目前ARM體系結構的處理器內核有: ARM7TDMI、ARM9TDMI、ARM10TDMI、ARM11以及Cortex等。2005年ARM推出的ARM Cortex系列內核,分別為:A系列、R系列和M系列,其中A系列是針對可以運行復
2、雜操作系統(tǒng)(Linux、Windows CE、Symbian 等)的處理器;R系列是主要針對處理實時性要求較高的處理器(汽車電子、網絡、影像系統(tǒng));M系列 又叫微控制器,對開發(fā)費用敏感,對性能要求較高的場合。Cortex-M系列目前的產品有M0、M1、M3,其中M1用在FPGA中。Cortex-M系列對微控制器和低成本應 用提供優(yōu)化,具有低成本、低功耗和高性能的特點,能夠滿足微控制器設計師進行創(chuàng)新設計的需求。其 中,ARM Cortex-M3處理器的性能是ARM7的兩倍,而功耗卻只有ARM7的1/3,適用于眾多高性能、極其低 成本需求的嵌入式應用,如微控制器、汽車系統(tǒng)、大型家用電器、網絡裝置等
3、,ARM Cortex-M3提供了 32位微控制器市場前所未有的優(yōu)勢。Cortex-M3內核,內部的數據路徑為32位,寄存器為32位,存儲器接口也是32位。Cortex-M3采用了 哈佛結構,擁有獨立的指令總線和數據總線,可以讓取指與數據訪問分開進行。Cortex-M3還提供一個 可選的MPU,對存儲器進行保護,而且在需要的情況下也可以使用外部的cache。另外在Cortex-M3中, 存儲器支持小端模式和大端存儲格式。Cortex-M3內部還附贈了很多調試組件,用于在硬件水平上支持 調試操作,如指令斷點,數據觀察點等。另外,為支持更高級的調試,還有其它可選組件,包括指令跟 蹤和多種類型的調試
4、接口。2.1.2 內核結構組成及功能描述Cortex-M3微控制器內核包括處理核心和許多的組件,目的是用于系統(tǒng)管理和調試支持。如圖2.1為 Cortex-M3內核方框圖。NMI 中斷號239:0SLEEPING SLEEPDEEPNVICSysTick中斷睡眠CM3核調試指令數據MPUCortex-M3觸發(fā)ETMTPIUFPBDWTITM專用外 設總線SW-DP JTAG-DP專用外設總線(內部) AHB-APAPBROM表總線矩陣I-code總線D-code總線系統(tǒng)總線總線矩陣系統(tǒng)總線(AHB)靜態(tài) RAM外部 RAM外部控制器設備AHB to APB 總線Flash 存 儲器SRAM 可選
5、配外部 RAMI/O外設總線UARTPWMTimer圖 2.1 Cortex-M3 內核方框圖1.處理器內核Cortex-M3處理器內核采用ARMv7-M架構,其主要特性如下:lThumb-2指令集架構(ISA)的子集,包含所有基本的16位和32位Thumb-2指令;l哈佛處理器架構,在加載/存儲數據的同時能夠執(zhí)行指令取指;l帶分支預測的三級流水線;l32位單周期乘法;l硬件除法;lThumb狀態(tài)和調試狀態(tài);l處理模式和線程模式;lISR的低延遲進入和退出;l 可中斷-可繼續(xù)(interruptible-continued)的LDM/STM、PUSH/POP;l 支持ARMv6類型BE8/LE
6、;l支持ARMv6非對齊訪問。2.NVIC(嵌套向量中斷控制器)NVIC與處理器內核是緊密耦合的,這樣可實現快速、低延遲的異常處理。在Cortex-M微控制器此功 能非常強大。3.總線矩陣總線矩陣用來將處理器和調試接口與外部總線相連。 處理器包含4 個總線接口:lICode 存儲器接口:從Code 存儲器空間(0x00000000x1FFFFFFF)的取指都在這條32 位 AHBLite 總線上執(zhí)行。lDCode 存儲器接口:對Code 存儲器空間(0x00000000x1FFFFFFF)進行數據和調試訪問都 在這條32 位AHBLite 總線上執(zhí)行。l系統(tǒng)接口:對系統(tǒng)空間(0x2000000
7、00xDFFFFFFF)進行取指、數據和調試訪問都在這條32 位 AHBLite 總線上執(zhí)行。l外部專用外設總線(PPB):對外部PPB 空間(0xE00400000xE00FFFFF)進行數據和調試訪 問都在這條32 位APB 總線(AMBA v2.0)上執(zhí)行。跟蹤端口接口單元(TPIU)和廠商特定的 外圍器件都在這條總線上。注:處理器包含一條內部專用外設總線,用來訪問嵌套向量中斷控制器(NVIC)、數據觀察點和 觸發(fā)(DWT)、Flash 修補和斷點(FPB),以及存儲器保護單元(MPU)。4.FPBFPB單元實現硬件斷點以及從代碼空間到系統(tǒng)空間的修補訪問,FPB有8個比較器。5.DWT數
8、據觀察點和跟蹤,調試功能部件。6.ITMITM是一個應用導向(application driven)的跟蹤源,支持對應用事件的跟蹤和printf類型的調 試。7.MPU存儲器保護單元(MPU)是用來保護存儲器的一個元件。處理器支持標準的ARMv7“受保護的存儲器 系統(tǒng)結構”(PMSA)模型。如果希望向處理器提供存儲器保護,則可以使用可選的MPU;MPU對訪問允許 和存儲器屬性進行檢驗。它包含8個區(qū)和一個可選的執(zhí)行默認存儲器映射訪問屬性的背景區(qū)。8.ETMETM支持指令跟蹤的低成本跟蹤宏單元。9.TPIUTPIU用作來自ITM和ETM(如果存在)的Cortex-M3內核跟蹤數據與片外跟蹤端口分析
9、儀之間的橋接。10.SW/JTAG-DPCortex-M3處理器可配置為具有SW-DP或JTAG-DP調試端口的接口,或兩者都有。這兩個調試端口提 供對系統(tǒng)中包括處理器寄存器在內的所有寄存器和存儲器的調試訪問。2.2 內核寄存器組織如圖 2.2 所示,Cortex_M3 內核寄存器分為 16 個通用寄存器 R0R15 和 7 個特殊功能寄存器。R0R1R2R3R4R5R6R7R8R9R10R11R12R13(SP)R14(LR)R15(PC)低 寄 存 器通 用 寄 存 器高寄 存 器特殊狀態(tài)寄存器 功能中斷屏蔽寄寄存器 存器控制寄存器xPSRPRIMASKFAULTMASKBASEPRICO
10、NTROLMSP PSP圖 2.2 寄存器組織圖2.2.1 通用寄存器 R0-R15R0R12 寄存器:是真正意義上的通用。在處理器運行過程中,作數據的寄存。R13 為堆棧指針寄存器:堆棧指針是用于訪問堆棧,也即系統(tǒng)的 RAM 區(qū)。Cortex_M3 中采用了兩個 堆棧指針:主堆棧指針(MSP)和進程堆棧指針(PSP),R13 在任何時刻只能是其中一個,默認情況為 MSP,可以通過控制寄存器(CONTORL)來改變。Cortex_M3 中堆棧方向是向低地址方向增長,為滿堆棧 機制。堆棧操作是通過 PUSH 和 POP 來完成操作的。例如 MSP 當前指針指向:0x2000_000C;R0=0x
11、00000000。 執(zhí)行:PUSHR0此時 MSP 指向:0x2000_0008 執(zhí)行示意如圖 2.3 所示。已使用已使用上次壓入的數據未用未用RAMRAM0x2000_000C MSP向 下 生已使用已使用已使用0x00000000未用0x2000_0008長 MSP2.3 堆棧操作示意圖R14 程序連接寄存器(LR):在執(zhí)行分支(B)和鏈接(BL)指令或帶有交換分支(BX)和鏈接 指令(BLX)時,PC 的返回地址自動保存進 LR。比如在子程序調用時用保存子程序的返回地址。LR 也用于異常返回,但是在這里保存的是返回后的狀態(tài),不是返回的地址,異常返回是通過硬件自動出棧 彈出之前壓入的 PC
12、 完成的。R15 程序計數器(PC):是程序運行的基礎,具有自加的功能。該寄存器的位 0 始終為 0,因此,指令始終與字或半字邊界對齊。2.2.2 特殊功能寄存器特殊功能寄存器分為程序狀態(tài)寄存器、中斷屏蔽寄存器和控制寄存器三類。xPSR 程序狀態(tài)寄存器:系統(tǒng)級的處理器狀態(tài)可分為 3 類,應用狀態(tài)寄存器(APSR)、中斷狀態(tài)寄 存器(IPSR)、執(zhí)行狀態(tài)寄存器(EPSR),可組合起來構成一個 32 位的寄存器,統(tǒng)稱 xPSR。表 2.1 xPSR 寄存器寄存 器名位313029282726:252423:2019:1615:10987654:0APSRNZCVQIPSR中斷編號EPSRICI/I
13、TTICI/ITxPSR 寄存器的各位的功能如表 2.2:表 2.2 xPSR 寄存器各位功能位名稱定義31N負數或小于標志:1:結果為負數或小于;0 結果為正數或大于30Z零標志:1:結果為 0;0:結果為非 029C進位/借位標志:1:進位或借位;0 沒有進位或借位28V溢出標志:1:溢出;0:沒有溢出27Q粘著飽和標志:1:已飽和;0:沒有飽和26:2515:10ITIF-Then 位。它們是 if-Then 指令的執(zhí)行狀態(tài)位。 包含 if-Then 模塊的指令數目和它們的執(zhí)行條件24T用于指示處理器當前是 ARM 狀態(tài)還是 Thumb 狀態(tài)15:12ICI可中斷-可繼續(xù)的指令位:如果在
14、執(zhí)行 LDM 或 STM 操作時產生一次中斷,則 LDM 或 STM 操作暫停,該位來保存該操作中下一個寄存器操作數的編號,在中斷響 應之后,處理器返回由該位指向的寄存器并恢復操作。8:0ISR占先異常的編號中斷屏蔽寄存器:分為三組,分別是 PRIMASK、FAULTMASK、BASEPRI。PRIMASK 為片上外設總中斷開關,該寄存器只有位 0 有效,當該位為 0 是響應所有外設中斷;當該位為 1 時屏蔽所有片上外設中斷。FAULTMASK 寄存器管理系統(tǒng)錯誤的總開關,該寄存器中有位 0 有效,當該位為 0 時,響應所有的異常;為 1 屏蔽所有的異常。BASEPRI 寄存器用來屏蔽優(yōu)先級等
15、于和小于某一個中斷數值的寄存器。控制寄存器:CONTROL 有兩個作用,其一用于定義處理器特權級別,其二用于選擇堆棧指針,如表 3.3 所示。表 2.3 CONTROL 寄存器位功能CONTROL1堆棧指針選擇0:選擇主堆棧指針 MSP1:選擇進程堆棧指針 PSPCONTROL00:特權級1:用戶級CONTROL0:異常情況下,處理器總是處于特權模式,CONTROL0位總是為 0;在線程模式情況下(非異常情況),處理器可以工作在特權級也可工作在用戶級,該位可為 0 或 1。特權級下所有的資源 都可以訪問,而用戶級下被限制的資源不能訪問,比如 MPU 被限制的資源。CONTROL1:為 0 時,
16、只使用 MSP,此時用戶程序和異常共享同一個堆棧,處理器復位后默認的也 是該模式。為 1 時,用戶應用程序使用進程堆棧 PSP,而中斷任然得使用主堆棧 MSP。這種雙堆棧機制, 特別適合在帶有 OS(操作系統(tǒng))的環(huán)境下使用,只要 OS 內核在特權級下執(zhí)行,而用戶應用程序在用戶 模式下執(zhí)行,就可很好的將代碼隔離互不影響。2.3 處理器操作模式ARM Cortex-M3支持2個模式和兩個特權等級。如圖2.4所示,在嵌入式系統(tǒng)應用程序中,程序代碼 涉及異常服務程序代碼和非異常服務程序代碼,這些代碼可以工作在處理器特權級也可以工作在用戶級 級,但有區(qū)別。當處理器處在線程模式下時,既可以使用特權級,也可
17、以使用用戶級;另一方面,handler 模式總是特權級的。在復位后,處理器進入線程模式特權級。特權級用戶級Handler 模式錯誤的用法線程模式線程模式異常 handler 的代碼 主應用程序的代碼圖 2.4 操作模式和特權等級在線程模式用戶級下,對系統(tǒng)控制空間(SCS,0xE000E0000xE000EFFF,包括NVIC、SysTick、 MPU以及代碼調試控制所用的寄存器)的訪問將被禁止。除此之外,還禁止使用MRS/MSR訪問,除了APSR 之外的特殊功能寄存器。如果操作,則對于訪問特殊功能寄存器的,訪問操作被忽略;而對于訪問SCS 空間的,將產生錯誤。在特權級下不管是任何原因產生了任何
18、異常,處理器都將以特權級來運行其服務例程,異常返回 后,系統(tǒng)將回到產生異常時所處的級別,同時特權級也可通過置位CONTROL0來進入用戶級。用戶級下 的代碼不能再試圖修改CONTROL0來回到特權級。它必須通過一個異常handler,來修改CONTROL0, 才能在返回到線程模式后進入特權級。如圖2.5所示。特權級 handler模式CONTROL0=1異常服務 例程CONTROL0=0異常服務 例程特權級 線 啟 動 程模式代碼用戶級 線 程模式異常異常用戶用戶程序程序特權級的 線程圖 2.5 處理器模式轉換圖把代碼按特權級和用戶級分開處理,有利于使Cortex-M3的架構更加穩(wěn)定可靠。例如
19、,當某個用戶 程序代碼出問題時,可防止處理器對系統(tǒng)造成更大的危害,因為用戶級的代碼是禁止寫特殊功能寄存器 和NVIC中寄存器的。另外,如果還配有MPU,保護力度就更大,甚至可以阻止用戶代碼訪問不屬于它的 內存區(qū)域。在引入了嵌入式實時操作系統(tǒng)中,為了避免系統(tǒng)堆棧因應用程序的錯誤使用而毀壞,我們可以給 應用程序專門配一個堆棧,不讓它共享操作系統(tǒng)內核的堆棧。在這個管理制度下,運行在線程模式的用 戶代碼使用PSP,而異常服務例程則使用MSP。這兩個堆棧指針的切換是智能全自動的,在異常服務的始 末由Cortex-M3硬件處理。如前所述,特權等級和堆棧指針的選擇均由CONTROL負責。 當CONTROL0
20、=0,在異常處理的始末,只發(fā)生了處理器模式的轉換,如圖2.6所示。 若CONTROL0=1(線程模式+用戶級),則在中斷響應的始末,處理器模式和特權等級都要發(fā)生變化,如圖2.7所示。 CONTROL0只有在特權級下才能訪問。用戶級的程序如想進入特權級,通常都是使用一條“系統(tǒng)服務呼叫指令(SVC)”來觸發(fā)“SVC異?!?,該異常的服務例程可以視具體情況而修改CONTROL0。中斷事件中斷服務程序中斷返回主程序入棧出棧線 程 模 式(特權級)Handler 模 式(特權級)線 程 模 式(特權級)圖 2.6 中斷前后的狀態(tài)轉換中斷事件中斷服務程序中斷返回主程序入棧出棧線 程 模 式(用戶級)Hand
21、ler 模 式(特權級)線 程 模 式(用戶級)圖 2.7 中斷前后的狀態(tài)轉換+特權等級切換2.4 存儲器系統(tǒng)2.4.1 存儲器映射Cortex-M3 采用了固定的存儲映射結構,如圖 2.8 所示。Cortex-M3 的地址空間是 4GB, 程序可以在代碼區(qū),內部 SRAM 區(qū)以及外部 RAM 區(qū)中執(zhí)行。但是因為 指令總線與數據總線是分開的,最理想的是把程序放到代碼區(qū),從而使取指和數據訪問各自使用己的總 線。內部 SRAM 區(qū)的大小是 512MB,用于讓芯片制造商連接片上的 SRAM,這個區(qū)通過系統(tǒng)總線來訪問。 在這個區(qū)的下部,有一個 1MB 的區(qū)間,被稱為“位帶區(qū)”。該位帶區(qū)還有一個對應的
22、32MB 的 “位帶別 名(alias)區(qū)”,容納了 8M 個“位變量”(對比 8051 的只有 128 個位變量),位帶區(qū)對應的是最低的 1MB 地址范圍,而位帶別名區(qū)里面的每個字對應位帶區(qū)的一個比特。位帶操作只適用于數據訪問,不適 用于取指。通過位帶的功能,可以把多個布爾型數據打包在單一的字中,卻依然可以從位帶別名區(qū)中, 像訪問普通內存一樣地使用它們。位帶別名區(qū)中的訪問操作是原子的,消滅了傳統(tǒng)的“讀改寫”三 步。ROM外部 PPBETMTPIU0xE00FFFFF0xE00FF0000xE00420000xE00410000xE0040000保留NVIC保留FPBDWTITM0xE003F
23、FFF0xE000F0000xE000E0000xE00030000xE00020000xE00010000xE000000032MB 位帶別名區(qū)31MB1MB 位帶區(qū)0x43FFFFFF0x420000000x41FFFFFF0x401000000x4000000032MB 位帶別名區(qū)31MB1MB 位帶區(qū)0x23FFFFFF0x220000000x21FFFFFF0x201000000x200000000xFFFFFFFF芯片廠商定義內核 私有 區(qū)域 512MB外部私有外設總線內部私有外設總線片外外設 1.0GB片外 RAM 1.0GB片上外設區(qū) 512MB片上 SRAM 512MB代碼區(qū)
24、 512MB0xE01000000xE00FFFFF0xE00400000xE003FFFF0xE00000000xDFFFFFFF0xA00000000x9FFFFFFF0x600000000x5FFFFFFF0x400000000x3FFFFFFF0x200000000x1FFFFFFF0x00000000圖 2.8 Cortex-M3 存儲器映射圖片上外設對應 512MB 的空間,芯片上所有與外圍設備相關的寄存器都位于該區(qū)域。這個區(qū)中也有一 條 32MB 的位帶別名,以便于快捷地訪問外設寄存器,用法與內部 SRAM 區(qū)中的位帶相同。例如,可以方 便地訪問各種控制位和狀態(tài)位。要注意的是,外
25、設區(qū)內不允許執(zhí)行指令。通常半導體廠商就是修改此區(qū) 域的片上外設,來達到各具特色的、個性化的設備。還有兩個 1GB 的范圍,分別用于連接外部 RAM 和外部設備,它們之中沒有位帶。兩者的區(qū)別在于外 部 RAM 區(qū)允許執(zhí)行指令,而外部設備區(qū)則不允許。最后還剩下 0.5GB 的隱秘地帶,包括了系統(tǒng)級組件,內部私有外設總線,外部私有外設總線,以及 由提供者定義的系統(tǒng)外設。私有外設總線有兩條:AHB 私有外設總線,只用于 CM3 內部的 AHB 外設,它們是:NVIC, FPB, DWT 和 ITM。APB 私有外設總線,既用于 CM3 內部的 APB 設備,也用于外部設備(這里的“外部”是對內核而言)
26、。 Cortex-M3 允許器件制造商再添加一些片上 APB 外設到 APB 私有總線上,它們通過 APB 接口來訪問。NVIC 所處的區(qū)域叫做“系統(tǒng)控制空間(SCS)”,在 SCS 里的除了 NVIC 外,還有 SysTick、MPU 以 及代碼調試控制所用的寄存器。最后,未用的提供商指定區(qū)也通過系統(tǒng)總線來訪問,但是不允許在其中執(zhí)行指令。2.4.2 位帶操作在Cotex-M3存儲器映射中包括兩個位操作區(qū)。分別位于SRAM和片上外設存儲區(qū)的最低1MB空間中。 這兩個位帶中的地址除了可以像普通的RAM一樣使用外,它們還都有自己的“位帶別名區(qū)”,位帶別名 區(qū)把每個比特膨脹成一個32位的字形成位地址
27、。當你通過位帶別名區(qū)訪問這些字時,就可以達到訪問原 始比特的目的,其對應關系如圖2.8所。位地址與位別名對應關系統(tǒng)如下: 對于 SRAM 位帶區(qū)的某個位:Aliasaddr = 0x22000000+ (A - 0x20000000) 8 + n) 4= 0x22000000+ ( A - 0x20000000) 32 + n 4對于片上外設位帶區(qū)的某個位:Aliasaddr = 0x42000000+ (A - 0x40000000) 8 + n) 4= 0x42000000+ ( A - 0x40000000) 32 + n 4在上述表達式中,A 表示要操作的位所在的字節(jié)地址,n(0n7)
28、表示位序號。0x23FFFFFC 0x23FFFFF8 0x23FFFFF4 0x23FFFFF0 0x23FFFFEC 0x23FFFFE8 0x23FFFFE4 0x23FFFFE0位帶別名區(qū)(共 32MB)0x2200001C 0x22000018 0x22000014 0x22000010 0x2200000C 0x22000008 0x22000004 0x220000007 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 00x200FFFFF0x200FFFFE0x200FFFFD0x200FFFFCSRAM
29、 位帶區(qū)(共 1MB)7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 00x200000030x200000020x200000010x200000002.9 位操作對應關系圖舉例:將地址 0x20000000 的第 2 位置 1。通過上述計算關系,可計算出位帶別名為 0x22000008。 如程序清單 L2.1 所示。程序清單 L2.1 SRAM 位操作實例 LDR R0,=0x22000008 LDR R1,=0x01 STR R1,R0將片上外設 I/O 端口的 A 口的第 0 位(也即 PORTA0)為輸出,其
30、 A 口的方向寄存器地址為 0x40004400,設置 1 作為輸出,可根據上述關系計算出位帶別名為 0x42088000。如程序清單 L2.2 所示。程序清單 L2.2 片上外設位操作實例LDR R0,=0x42088000 LDR R1,=0x01STR R1,R0注:采用大端格式時,對位邦定別名區(qū)的訪問必須以字節(jié)方式,否則訪問不可預知。2.5 異常ARM Cortex-M3 中異常涉及異常的類型、優(yōu)先級、向量表等,本節(jié)并以 Luminary 系列微控制器為 例說明異常的具體行為。2.5.1 異常類型在 Cortex-M3 中有 一個 與內 核緊 耦 合部 件叫 嵌套向 量 中斷 控制 器
31、( NVIC, Nested Vectored Interrupt Controller),定義了 16 種系統(tǒng)異常和 240 路外設中斷。通常芯片設計者可自由設計片上外設,因此具體的片上外設中斷都不會用到多達 240 路。如表 2.4 所示系統(tǒng)異常類型,表 2.5 所示為外設 中斷類型。Cortex-M3 中目前只有 11 種系統(tǒng)異常可用分別是:系統(tǒng)復位、NMI(不可屏蔽中斷)、硬件故障、 存儲器管理、總線故障、用法故障、SVCall(軟件中斷)、調試監(jiān)視器中斷、PendSV(系統(tǒng)服務請求)、 SysTick(24 位定時器中斷)。240 路外設中斷,是指片上外設的各模塊,比如 I/O 口、
32、UART 通信接口、 SSI 總線接口等所需的中斷。表 2.4 異常類型編號類型優(yōu)先級描述0-復位時載入向量表的第一項作為主堆棧棧頂地址。1復位-3復位。2NMI-2不可屏蔽中斷(來自外部 NMI 輸入腳)。3硬故障-1當故障由于優(yōu)先級或者是可配置的故障處理程序被禁止的原因 而無法激活時,所有類型故障都會以硬故障的方式激活。4存儲器管理可編程MPU 不匹配,包括訪問沖突和不匹配。5總線故障可編程預取指故障、存儲器訪問故障和其它地址/存儲器相關的故障。6用法故障可編程由于程序錯誤導致的異常,通常是使用一條無效指令,或都是非 法的狀態(tài)轉換。7-10保留-保留11SVCall可編程執(zhí)行 SVC 指令
33、的系統(tǒng)服務調用。12調試監(jiān)視器可編程調試監(jiān)視器(斷點,數據觀察點,或是外部調試請求)13保留-14PendSV可編程系統(tǒng)服務的可觸發(fā)(pendable)請求。15SysTick可編程系統(tǒng)節(jié)拍定時器。表 2.5 中斷類型編號類型優(yōu)先級描述16IRQ#0可編程外設中斷#017IRQ#1可編程外設中斷#1255IRQ#239可編程外設中斷#2392.5.2 優(yōu)先級Cortex-M3 的異常功能非常強大,機制非常靈活,異??梢酝ㄟ^占先、末尾連鎖和遲來等處理來降 低中斷的延遲。優(yōu)先級決定了處理器何時以及怎樣處理異常。Cortex-M3 支持 3 個固定的高優(yōu)先級和多達 256 級的可編程優(yōu)先級,并且支持
34、 128 級搶占,絕大多 數芯片都會精簡設計,實際中支持的優(yōu)先級數會更少,如 8 級、16 級、32 級等,通常的做法是裁掉表 達優(yōu)先級的幾個低端有效位(防止優(yōu)先級反轉),以減少優(yōu)先級的級數。比如 Luminary 的芯片采用 8 級優(yōu)先級。Cortex-M3 中 NVIC 支持由軟件指定的可配置的優(yōu)先級(稱為軟件優(yōu)先級),其寄存器地址為: 0xE000_E400-0xE000_E4EF。通過對中斷優(yōu)先級寄存器的 8 位 PRI_N 區(qū)執(zhí)行寫操作,來將中斷的優(yōu)先級 指定為 0-255。硬件優(yōu)級隨著中斷中的增加而降低。0 優(yōu)先級最高,255 優(yōu)先級最低。指定軟件優(yōu)先級 后,硬件優(yōu)先級無效。例如:
35、如果將 INTISR0指定為優(yōu)先級 1,INTISR31指定為優(yōu)先級 0,則 INTISR0 的優(yōu)先級比 INTISR31低。為了對具有大量中斷的系統(tǒng)加強優(yōu)先級控制,Cortex-M3 支持優(yōu)先級分組,通過 NVIC 控制,設置 為占先優(yōu)先級和次優(yōu)先級??赏ㄟ^對應用程序中斷及復位控制寄存器(AIRCR,地址為:0xE000_ED00) 的10:8位進行設置。如果有多個激活異常共用相同的組優(yōu)先級,則使用次優(yōu)先級區(qū)來決定同組中的異 常優(yōu)先級,這就是同組內的次優(yōu)先級。如表 2.6 應用程序中斷及復位控制寄存器,表 2.7 為占先優(yōu)先級 和次優(yōu)級的關系。表 26 應用程序中斷及復位控制寄存器(AIRC
36、R,地址:0xE000ED00)位段名稱類型復位值描述31:16VECTKEYRW-訪問鑰匙:任何對該寄存器的寫操作,都必須同時 把 0x05FA 寫入此段,否則寫操作被忽略。若讀取此半字,則讀回值為 0xFA05。15ENDIANESSR-指示端設置。1:大端,0:小端。10:8PRIGROUPR/W0優(yōu)先級分組2SYSRESETREQW-請求芯片控制邏輯產生一次復位1VECTCLRACTIVEW-清零所有異常的活動狀態(tài)信息。通常只在調試時 用,或都在 OS 從錯誤中恢復時用。0VECTRESETW-復位 Coretex-M3 微控制器內核。表 2.7 搶占優(yōu)先級和次優(yōu)先級分組位置的關系分組
37、位置表達搶占優(yōu)先級的位段表達亞優(yōu)先的位段07:10:017:21:027:32:037:43:047:54:057:65:067:76:07無7:0所有位注:表 2.7 顯示了利用優(yōu)先級的 8 個位來配置處理器優(yōu)先級。如果使用小于 8 的位來配置處理 器的優(yōu)先級,則寄存器的低位始終為 0,例如,如果使用 3 個位來配置優(yōu)先級,則 PRI_N7:5用來配置 優(yōu)先級,而 PRI_N4:0為 4b0000。2.5.3 中斷向量表當發(fā)生了異常并且要響應它時,Cortex-M3 需要定位其服務例程的入口地址。這此入口地址存儲在 所謂“異常向量表”中。缺省情況下,Cortex-M3 認為該表位于零地址處,
38、且各向量占用 4 字節(jié)。因此 每個表項占用 4 字節(jié),復位后的向量表如表 2.8 所列。表 2.8 復位后向量表地址異常編號值(32 位整數)0x0000_0000-MSP 的初始值0x0000_00041復位向量(PC 初始值)0x0000_00082NMI 服務例程的入口地址0x0000_000C3硬 fault 服務例程的入口地址其它異常服務例程的入口地址向量表中的第 1 個字為指向堆棧棧頂的指針,復位時內核讀取該地址的數據設置主堆棧。 向量表的基地址可以通過 NVIC 中的向量偏移寄存器(0xE000ED08)來設置,如表 2.9 所示。從表中可以看出,可以將異常向量表放在 Code
39、區(qū)也可以將其放在 RAM 區(qū),起始地址也可改變,起始地址是 有要求的:必須先求出系統(tǒng)中共有多少個向量,再把這個數字向上記到 2 的整次冪,而起始地址必須對齊到后者的邊界上。例如,如果一共有 32 個中斷,則共有 32+16(系統(tǒng)異常)=48 個向量,向上記到 2的整數次冪后值為 64,因此向量表重定位的地址必須能被 64 X 4=256 整除。表 2.9 向量偏移量寄存器(0xE000ED08)位段名稱類型復位值描述29TBLOFFR-向量表是在 Code 區(qū)(0),還是在 RAM 區(qū)(1)7-28TBLBASER/W0向量表的起始地址向量表中至少需要有 4 個值:棧頂地址;復位程序的位置;N
40、MI 異常的位置;硬故障的異常的位置。 當中斷使能時,不管向量表的位置在哪,它指向所有使能屏蔽的異常。并且如果使用 SVC 指令,還需要指定 SVCCall ISR 的位置。2.5.4 異常的進入與退出1異常進入入棧:當處理器發(fā)生異常時,首先自動把 8 個寄存器(xPSR、PC、LR、R12、R3、R2、R1、R0)壓 入棧,處理器自動完成,在自動入棧的過程中,把寄存器寫入棧的時間順序,并不是寫入空間相對應的, 但機器會保證正確的寄存器被保存到正確的位置,如圖 2.10 所示,假設入棧,棧地址為 N。N-8N-4N-32N-28N-24N-20N-16N-12地址PCPSRR0R1R2R3R1
41、2LR數據時間2.10 內部入棧示意圖取向量:發(fā)生異常,緊接著內核將根據向量表找出正確的異常向量,然后在服務程序的入口處預取 指,處理器將取指與取數據分別能過總線控制,使入棧與取指這兩項工作能同時進行,以便快速進入中 斷。更新寄存器:入棧和取向量操作完成之后,在執(zhí)行服務程序之前,還必須更新一系列寄存器。 SP:在入棧后會把堆棧指針(PSP或MSP)更新到新的位置。在執(zhí)行服務例程時,將由MSP負責對堆棧的訪問。PSR:更新IPSR位段(地處PSR的最低部分)的值為新響應的異常編號。 PC:在取向量完成后,PC將指向服務例程的入口地址, LR:在出入ISR的時候,LR的值將得到重新的詮釋,這種特殊
42、的值稱為“EXC_RETURN”,在異常進入時由系統(tǒng)計算并賦給LR,并在異常返回時使用它。 以上是在響應異常時通用寄存器及特殊功能寄存器的變化。另外在NVIC中,也會更新若干個相關寄存器。2異常退出當異常服務程序最后一條指令將進入異常時的 LR 的值加載到 PC 中。該操作指示中斷服務結束,在 從異常返回時處理器將執(zhí)行下列操作之一:如果激活異常的優(yōu)先級比所有被壓棧(等待處理)的異常的優(yōu)先級都高,則處理器會末尾連鎖到一 個激活異常。如果沒有激活異常,或者如果被壓棧的異常的最高優(yōu)先級比激活異常的最高優(yōu)先級要高,則處理器 返回到上一個被壓棧的中斷服務程序。如果沒有激活的中斷或被壓棧的異常,則處理器返
43、回線程模式。 在啟動了中斷返回序列后,下述的處理就將進行: 出棧:先前壓入棧中的寄存器在這里恢復。內部的出棧順序與入棧時的相對應,堆棧指針的值也改回先前的值。更新NVIC寄存器:伴隨著異常的返回,它的活動位也被硬件清除。對于外部中斷,倘若中斷輸入再 次被置為有效,懸起位也將再次置位,新一次的中斷響應序列也可隨之再次開始。異常返回值:異常返回值存放在LR中。這是一個高28位全為1的值,只有3:0的值有特殊含義,如 表2.10所示。當異常服務例程把這個值送往PC時,就會啟動處理器的中斷返回序列。因為LR的值是由 Cortex-M3自動設置的,所以只要沒有特殊需求,就不要改動它。表 2.10 EXC
44、_RETURN 各位含義位段含義31:4EXC_RETURN的標識:必須全為1。30=返回后進入處理器模1=返回后進入線程模式。20=從主堆棧中做出棧操作,返回后使用MSP 1=從進程堆棧中做出棧操作,返回使用PSP。1保留,必須為0。00=返回ARM狀態(tài)1=返回Thumb狀態(tài)。Cortex-M3中必須為1。因此,上述表格中EXC_RETURN的值有三種情況: 0xFFFF_FFF1:返回處理器模式;0xFFFF_FFF9:返回線程模式,并使用主堆棧;0xFFFF_FFFD:返回線程模式,并使用線程堆棧。 例如系統(tǒng)中使用了PendSV異常,服務程序結束時由處理模式返回到線程模式前使用進程堆棧,
45、如程序清單L2.3所示。程序清單 L2.3 異常返回類型實例OSPendSV;異常服務程序LDR LR,=0Xfffffffd;返回到線程模式進程堆棧 BX LR2.5.5 Cortex-M3 異常處理機制1末尾連鎖末尾連鎖能夠在兩個中斷之間沒有多余的狀態(tài)保存和恢復指令的情況下實現異常背對背處理。如圖 2.11 所示。在退出 ISR 并進入另一個中斷時,處理器省略了 8 個寄存器的出棧和入棧操作。如果當前 掛起中斷的優(yōu)先級比所有被壓棧的異常的優(yōu)先級都高。則處理器執(zhí)行末尾連鎖機制。如果掛起中斷的優(yōu) 先級比被壓棧的異常的最高優(yōu)先級都高,則省略壓棧和出棧操作,處理器立即取出掛起的中斷向量。在 退出前
46、一個 ISR 之后,開始執(zhí)行被末尾連鎖的 ISR。用戶程序優(yōu)先級 3優(yōu)先級 2中斷 1壓棧中斷 2中斷 1中斷 2中斷 1 結束出棧圖 2.11 末尾連鎖示意圖2異常遲來在 Cortex-M3 中遲來中斷的意思是如果前一個 ISR 還沒有進入執(zhí)行階段,并且遲來中斷的優(yōu)先級比 前一個中斷的優(yōu)先級要高,則遲來中斷能夠搶占前一個中斷。如圖 2.12 所示。用戶程序優(yōu)先級 3中斷 1優(yōu)先級 2中斷 2中斷 1中斷 2壓棧繼續(xù)壓棧 出棧圖 2.12 遲來異常示意圖響應遲來中斷時需執(zhí)行新的取向量地址和 ISR 預取操作。遲來中斷不保存狀,因為狀態(tài)保存已經被 最初的中斷執(zhí)行過了,因此不需要重復執(zhí)行。2.5.
47、6 嵌套向量中斷控制器嵌套向量中斷控制器,簡稱NVIC,完成對中斷的響應。NVIC共支持1至240個外部中斷輸入(通常外 部中斷寫作IRQs)。具體的數值由芯片廠商在設計芯片時決定。NVIC的訪問地址是0xE000_E000。所有NVIC的中斷控制/狀態(tài)寄存器都只能在特權級下訪問。不過有 一個例外軟件觸發(fā)中斷寄存器可以在用戶級下訪問以產生軟件中斷。所有的中斷控制、狀態(tài)寄存器均可 按字、半字、字節(jié)的方式訪問。中斷配置內容:u使能與禁止寄存器u掛起與解掛寄存器u優(yōu)先級寄存器u活動狀態(tài)寄存器 另外,下列寄存器也對中斷處理有重大影響:u異常掩蔽寄存器u向量表偏移寄存器u軟件觸發(fā)中斷寄存器u優(yōu)先級分組寄
48、存器Cortex-M3 中異常及中斷的行為如圖 2.13 所示。分成三級,由 NVIC 負責管理。第三級第二級第一級 中斷掛起NVIC_PEND中斷解掛 NVIC_CLRPEND外設中斷源中斷使能NVIC_EN中斷禁止 NVIC_DIS優(yōu)先級設置 NVIC_PRI激活位設置 NVIC_ACTIVEPRIMASK中斷控制及狀態(tài) 寄存器NVIC_INT_CTRL優(yōu)先級設置NVIC_SYS_PRI系統(tǒng)處理控制與狀態(tài) 寄存器 NVIC_SYS_HAND_CTRL內核FLAUTMASK系統(tǒng)異常源圖 2.13 異常和中斷控制示意圖1.中斷的使能與禁止此處的中斷使能與禁止,主要是針對片上外設 240 路中斷的控制,使能是向 SETENA 寄存器對應位 寫“1”,禁止是向 CLRENA 寄存器對應位寫“1”。如表 2.11 所示。表 2.11 SETENA/CLRENA 寄存器族名稱類型地址復位值描述SETENA0R/W0xE000_E1000中斷 0-31 的使能寄存,共 32 個使能位n,中斷#n 使能(異常號 16+n)SETENA1R/W0xE000_E1040中斷 32-63 使能寄存器,共 32 個使能位SETENA7R/W0xE000_E11C0中斷 224-239 使能寄存器,16 個使能位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年通訊設備維修保密合同3篇
- 2024年物業(yè)清潔與保安服務協(xié)議
- 托班春節(jié)音樂課程設計
- 流程管理課程設計
- 2024年項目管理與運營咨詢服務合同3篇
- 舞蹈課程設計原理教案
- 相機運鏡技巧課程設計
- 有趣動畫創(chuàng)作課程設計
- 2024年版:離婚雙方協(xié)商一致補充協(xié)議
- 2025年度環(huán)保監(jiān)測站監(jiān)控系統(tǒng)升級合同3篇
- 英文寫作課件:段落的寫作
- 魯科版(五四制)八年級上冊《第三章 光現象》章節(jié)練習(含解析)
- 產業(yè)園運營合作協(xié)議
- 16J607-建筑節(jié)能門窗
- 理解詞語句子的方法PPT
- 作文開頭與結尾PPT課件ppt(共42張PPT)
- 重癥醫(yī)學科運用PDCA循環(huán)提高消毒棉簽開啟時間標注的執(zhí)行率品管圈成果匯報
- 云南面向東南亞、南亞區(qū)域物流系統(tǒng)優(yōu)化研究的開題報告
- 高效課堂教學流程和課堂常規(guī)公開課一等獎市賽課獲獎課件
- 浙江寧波廣播電視集團發(fā)射中心招考聘用筆試參考題庫答案解析
- 2024年航天知識總結
評論
0/150
提交評論