




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本篇包括第一至四章,為全書的硬件基礎(chǔ)部分,依次介紹了ARMCortex-M0+內(nèi)核、LPC82X微控器、LPC824開(kāi)發(fā)平臺(tái)與工程框架以及異常與中斷管理等內(nèi)容。
LPC82X 典型硬件系統(tǒng)第一章 ARMCortex-M0+內(nèi)核 1.1 ARMCortex-M0+內(nèi)核特點(diǎn) 1.2 ARMCortex-M0+內(nèi)核架構(gòu) 1.3 ARMCortex-M0+存儲(chǔ)器配置 1.4 ARMCortex-M0+內(nèi)核寄存器 1.5 SysTick定時(shí)器 1.6 Cortex-M0+異常 1.7 嵌套向量中斷控制器 ARM是AdvancedRISCMachine(高級(jí)精簡(jiǎn)指令集機(jī)器)的縮寫,現(xiàn)為ARM公司的注冊(cè)商標(biāo)。ARMCortex-M0+內(nèi)核屬于ARM公司推出的Cortex-M系列內(nèi)核之一,相對(duì)于高性能的Cortex-M3內(nèi)核而言,它具有體積小、功耗低和控制靈活等特點(diǎn),主要針對(duì)傳統(tǒng)單片機(jī)的控制與顯示等嵌入式系統(tǒng)應(yīng)用。本章將介紹Cortex-M0+內(nèi)核的特點(diǎn)、架構(gòu)、存儲(chǔ)器配置和內(nèi)核寄存器等內(nèi)容。 Cortex-M0+內(nèi)核使用ARMv6-M體系結(jié)構(gòu),使用ARMv6-M匯編語(yǔ)言指令集,它具有以下特點(diǎn):(1)Cortex-M0+內(nèi)核包含極低數(shù)量的門電路,是目前全球功耗最低的內(nèi)核,特別適用于對(duì)功耗要求苛刻的嵌入式系統(tǒng)應(yīng)用場(chǎng)合。(2)支持32位長(zhǎng)的Thumb-2擴(kuò)展指令集和16位長(zhǎng)的Thumb指令集,代碼的執(zhí)行效率遠(yuǎn)遠(yuǎn)高于8位長(zhǎng)的單片機(jī)匯編指令。(3)支持單周期的I/O(輸入/輸出)口訪問(wèn),對(duì)外設(shè)的控制速度快。(4)具有低功耗工作模式,在內(nèi)核空閑時(shí)可以使其進(jìn)入低功耗模式,從而極大地節(jié)約電能;當(dāng)內(nèi)核要工作時(shí),通過(guò)緊耦合的快速中斷喚醒單元使其進(jìn)入正常工作模式。(5)內(nèi)核中的各個(gè)組件采用模塊化結(jié)構(gòu),通過(guò)精簡(jiǎn)的高性能總線(AHB-Lite)連接在一起,內(nèi)核中的功耗管理單元可以動(dòng)態(tài)配置各個(gè)組件的工作狀態(tài),可根據(jù)需要使某些空閑的組件處于掉電模式,以盡可能地減少功耗。(6)可執(zhí)行代碼保存在Flash存儲(chǔ)區(qū)中,而Cortex-M0+內(nèi)核支持從Flash中以極低的功耗快速讀取指令,并以極低的功耗(工作在一個(gè)相對(duì)較低的CPU時(shí)鐘下)在內(nèi)核中高速執(zhí)行代碼。1.1 ARMCortex-M0+內(nèi)核特點(diǎn)(7)Cortex-M0+內(nèi)核支持硬件乘法器。硬件乘法器最早出現(xiàn)在DSP(數(shù)字信號(hào)處理器)芯片中,與加法器協(xié)同工作,并稱為乘加器,是指在一個(gè)CPU時(shí)鐘周期內(nèi),用硬件電路直接實(shí)現(xiàn)A×B+C的三操作數(shù)運(yùn)算。這里Cortex-M0+支持的硬件乘法器可以在一個(gè)CPU時(shí)鐘周期內(nèi)實(shí)現(xiàn)A×B的二操作數(shù)運(yùn)算。(8)Cortex-M0+內(nèi)核的每條匯編指令的執(zhí)行周期是確定的,中斷處理的時(shí)間是確定的、高效的,且具有快速中斷處理能力,特別適用于對(duì)實(shí)時(shí)性要求苛刻的智能控制場(chǎng)合。(9)支持二線的串行調(diào)試接口(SWD),只需要使用芯片的兩根管腳就可以實(shí)現(xiàn)對(duì)Cortex-M0+內(nèi)核芯片的在線仿真與調(diào)試,通過(guò)SWD可以向芯片的Flash存儲(chǔ)器固化程序代碼,且具有指令跟蹤執(zhí)行功能。而絕大多數(shù)的傳統(tǒng)單片機(jī)是不能在線仿真調(diào)試的,因此,基于單片機(jī)的工程測(cè)試復(fù)雜且周期漫長(zhǎng)。(10)Cortex-M0+內(nèi)核不是物理形態(tài)的微控制器芯片,而是屬于知識(shí)產(chǎn)權(quán)(IP),所以常被稱為IP核。目前全球大約有150家半導(dǎo)體公司購(gòu)買了ARM公司的IP核,生產(chǎn)集成了IP核的微控制器芯片(稱為流片,流片測(cè)試成功后進(jìn)入芯片量產(chǎn)階段)。所有集成了Cortex-M0+內(nèi)核的微控制器芯片,均可使用相同的集成開(kāi)發(fā)環(huán)境(如Keil公司的MDK和IAR公司的EWARM等)和相同的仿真器(如ULink2、JLinkV8等)進(jìn)行軟件開(kāi)發(fā),事實(shí)上,幾乎全部的ARM芯片都使用相同的開(kāi)發(fā)環(huán)境和仿真器。但是,對(duì)于傳統(tǒng)的單片機(jī)而言,不同半導(dǎo)體廠商生產(chǎn)的單片機(jī)所用的開(kāi)發(fā)環(huán)境和編程下載器往往不相同。1.1 ARMCortex-M0+內(nèi)核特點(diǎn)
相對(duì)于8位字長(zhǎng)的傳統(tǒng)8051單片機(jī)而言,Cortex-M0+內(nèi)核是32位字長(zhǎng)的微控制器內(nèi)核,其內(nèi)部總線寬度為32位,指令和數(shù)據(jù)傳輸速度及功能大大提升。Cortex-M0+內(nèi)核架構(gòu)如圖1-1所示。圖1-1 Cortex-M0+內(nèi)核架構(gòu)1.2 ARMCortex-M0+內(nèi)核結(jié)構(gòu)
由圖1-1可知,Cortex-M0+內(nèi)核由Cortex-M0+處理器和三個(gè)可選的組件,即喚醒中斷控制器(WIC)、宏跟蹤單元(MTB)和調(diào)試訪問(wèn)口組成,Cortex-M0+處理器包括Cortex-M0+處理器核心、嵌套向量中斷控制器(NVIC)和兩個(gè)可選的組件,即存儲(chǔ)保護(hù)單元(MPU)和調(diào)試器組成,其中,調(diào)試器又包括斷點(diǎn)與觀測(cè)點(diǎn)單元和調(diào)試器接口。Cortex-M0+內(nèi)核與外部通過(guò)總線陣列和中斷進(jìn)行通信,其中,中斷為單向輸入口,總線陣列相連接的精簡(jiǎn)高性能總線(AHB)接口以及可選的單周期輸入/輸出(I/O)口和串行調(diào)試或JTAG口為雙向口。 32位的Cortex-M0+處理器核心是計(jì)算和控制中心,采用了兩級(jí)流水的馮·諾依曼結(jié)構(gòu),執(zhí)行ARMv6-M指令集(即16位長(zhǎng)的Thumb-2指令集,含32位長(zhǎng)的擴(kuò)展指令),集成了一個(gè)單周期的乘法器(用于高性能芯片中)或一個(gè)32位的乘法器(用于低功耗芯片中)。 Cortex-M0+內(nèi)核具有很強(qiáng)的中斷處理能力,一個(gè)優(yōu)先級(jí)可配置的嵌套向量中斷控制器(NVIC)直接與Cortex-M0+處理器核心相連接,通過(guò)這種緊耦合的嵌套向量中斷控制器,可以實(shí)現(xiàn)不可屏蔽中斷、中斷尾鏈、快速中斷響應(yīng)、睡眠態(tài)喚醒中斷和四級(jí)中斷優(yōu)先級(jí)。這里的“中斷尾鏈”是指當(dāng)有多個(gè)中斷被同時(shí)觸發(fā)時(shí),優(yōu)先級(jí)高的中斷響應(yīng)完成后,不需要進(jìn)行運(yùn)行環(huán)境的恢復(fù),而是直接運(yùn)行優(yōu)先級(jí)次高的中斷,全部中斷響應(yīng)完后,再恢復(fù)運(yùn)行環(huán)境。如果沒(méi)有中斷尾鏈功能,則處理器在響應(yīng)一個(gè)中斷前,先進(jìn)行入棧操作,保存當(dāng)前中斷觸發(fā)時(shí)的運(yùn)行環(huán)境,然后,處理器暫停當(dāng)前程序的執(zhí)行去響應(yīng)中斷,響應(yīng)完中斷后,進(jìn)行出棧操作,恢復(fù)響應(yīng)中斷前的環(huán)境(即使程序計(jì)數(shù)器指針(PC)指向被中斷的程序位置處)繼續(xù)執(zhí)行原來(lái)的程序。1.2 ARMCortex-M0+內(nèi)核結(jié)構(gòu)
接著,重復(fù)這些操作響應(yīng)下一個(gè)中斷。因此,沒(méi)有中斷尾鏈功能時(shí),兩個(gè)連續(xù)響應(yīng)的中斷中需要插入一次出棧和一次入棧操作(即恢復(fù)前一個(gè)運(yùn)行環(huán)境和保存后一個(gè)運(yùn)行環(huán)境),而具有中斷尾鏈功能時(shí),這兩次堆棧操作均被省略掉了。 Cortex-M0+內(nèi)核具有很強(qiáng)的調(diào)試能力,通過(guò)調(diào)試訪問(wèn)口,外部的串行調(diào)試或JTAG調(diào)試口與Cortex-M0+處理器的調(diào)試器相連接,調(diào)試器直接與Cortex-M0+處理器核心連接,還通過(guò)它與宏跟蹤單元相連接。因此,通過(guò)串行調(diào)試或JTAG調(diào)試口可以訪問(wèn)Cortex-M0+內(nèi)核的全部資源,包括調(diào)試或跟蹤程序代碼的執(zhí)行,還可以檢查代碼的執(zhí)行結(jié)果。
存儲(chǔ)保護(hù)單元(MPU)可以對(duì)存儲(chǔ)器的某些空間設(shè)定訪問(wèn)權(quán)限,使得只有特定的程序代碼才能訪問(wèn)這些空間,普通的程序代碼則無(wú)權(quán)訪問(wèn),這樣可以有效地保護(hù)關(guān)鍵的程序代碼存儲(chǔ)區(qū)或數(shù)據(jù)區(qū)不受意外訪問(wèn)(例如病毒)的侵害。
圖1-1中,相對(duì)于Cortex-M0+處理器核心而言,其余的組件均稱為Cortex-M0+內(nèi)核的外設(shè),所有這些組件均為知識(shí)產(chǎn)權(quán)(IP)核。半導(dǎo)體廠商在這個(gè)IP核的基礎(chǔ)上添加中斷發(fā)生器、存儲(chǔ)器、與AHB相連接的多功能芯片外設(shè)和輸入/輸出(I/O)口等,即可以得到特定功能的微控制器芯片。1.2 ARMCortex-M0+內(nèi)核結(jié)構(gòu) Cortex-M0+存儲(chǔ)空間的最大訪問(wèn)能力為232字節(jié),即4GB。對(duì)于Cortex-M0+而言,8位(8bit)為一個(gè)字節(jié),16位稱為半字,32位稱為字。以字為單位,Cortex-M0+的存儲(chǔ)空間的最大訪問(wèn)能力為230字,即從0至230-1字。一般地,訪問(wèn)地址習(xí)慣采用字節(jié)地址,此時(shí),Cortex-M0+的存儲(chǔ)空間配置如圖1-2所示。圖1-2 Cortex-M0+存儲(chǔ)空間配置1.3 ARMCortex-M0+存儲(chǔ)器配置
由圖1-2可知,4GB的Cortex-M0+映射存儲(chǔ)空間被分成8個(gè)相同大小的空間,每個(gè)空間為0.5GB。這8個(gè)空間中,位于地址范圍0x00000000~0x1FFFFFFF的Code空間對(duì)應(yīng)著集成在芯片上的ROM或Flash存儲(chǔ)器,主要用于保存可執(zhí)行的程序代碼,也可用于保存數(shù)據(jù),其中,中斷向量表位于以0x0起始的地址空間中,一般占有幾十至幾百個(gè)字節(jié)。位于地址范圍0x20000000~0x3FFFFFFF的SRAM區(qū)域,對(duì)應(yīng)著集成在芯片中的RAM存儲(chǔ)器,主要用于保存數(shù)據(jù),保存的數(shù)據(jù)在芯片掉電后丟失。位于地址范圍0x40000000~0x5FFFFFFF的片上外設(shè)區(qū)域,存儲(chǔ)著片上外設(shè)的訪問(wèn)寄存器,通過(guò)讀或?qū)戇@些寄存器,可實(shí)現(xiàn)對(duì)片上外設(shè)的訪問(wèn)和控制。
位于地址范圍0x60000000~0x7FFFFFFF的RAM區(qū)域?qū)儆诳焖賀AM區(qū),是具有“寫回”特性的緩存區(qū),而位于地址范圍0x80000000~0x9FFFFFFF的RAM區(qū)域?qū)儆诼賀AM區(qū),是具有“寫通”特性的緩存區(qū)。這兩個(gè)RAM區(qū)都有對(duì)應(yīng)的緩存(Cache)。所謂的“寫回”,是指當(dāng)Cortex-M0+內(nèi)核向RAM區(qū)寫入數(shù)據(jù)時(shí),不是直接將數(shù)據(jù)寫入RAM,而是寫入到更快速的緩存中,當(dāng)緩存滿了或者總線空閑時(shí),緩存自動(dòng)將數(shù)據(jù)寫入到RAM區(qū)中。所謂的“寫通”,是指當(dāng)Cortex-M0+內(nèi)核向RAM區(qū)寫入數(shù)據(jù)時(shí),通過(guò)緩存直接將數(shù)據(jù)寫入到RAM區(qū)中。因此,具有“寫回”特性的RAM中的數(shù)據(jù)有可能與其緩存中的數(shù)據(jù)不同,當(dāng)數(shù)據(jù)較少時(shí),數(shù)據(jù)將保存在緩存中,而不用寫入到RAM中;而具有“寫通”特性的RAM中的數(shù)據(jù)與緩存中相應(yīng)的數(shù)據(jù)是相同的。其實(shí),Cortex-M0+的Code區(qū)和SRAM區(qū)也有緩存,前者是“寫通”特性的緩存機(jī)制,后者是“寫回”特性的緩存機(jī)制。1.3 ARMCortex-M0+存儲(chǔ)器配置
Cortex-M0+支持兩種存儲(chǔ)模式,即小端模式和字節(jié)保序的大端模式。不妨設(shè)Addr為一個(gè)字地址。所謂的字地址,是指地址的最低兩位為0,即地址能被4整除,例如0x00000000、0x00000004、0x00000008等都是字地址,同樣,把地址的最低一位為0的地址稱為半字地址,如0x00000002、0x00000004等,顯然,字地址都是半字地址。設(shè)DataA為一個(gè)字,包括4個(gè)字節(jié),從高字節(jié)到低字節(jié)依次記為DataA[31:24]、DataA[23:16]、DataA[15:8]和DataA[7:0]。設(shè)DataB為一個(gè)半字,包括2個(gè)字節(jié),依次記為DataB[15:8]和DataB[7:0],則在兩種存儲(chǔ)模式下,將DataA或DataB保存在Addr地址的情況如圖1-3所示。圖1-3 小端模式與字節(jié)保序的大端模式示例
1.3 ARMCortex-M0+存儲(chǔ)器配置
由圖1-3可知,小端模式下,數(shù)據(jù)字的高字節(jié)存儲(chǔ)在字地址的高端,數(shù)據(jù)字的低字節(jié)存儲(chǔ)在字地址的低端;而大端模式下剛好相反,數(shù)據(jù)字的高字節(jié)存儲(chǔ)在字地址的低端,數(shù)據(jù)字的低字節(jié)存儲(chǔ)在字地址的高端。所謂的字節(jié)保序,是指在大端模式下,每個(gè)字節(jié)內(nèi)的位的順序保持不變。 1.3 ARMCortex-M0+存儲(chǔ)器配置1.4.1 內(nèi)核寄存器 Cortex-M0+微控制器共有16個(gè)內(nèi)核寄存器,分別記為R0~R15,其中R0~R12為32位的通用目的內(nèi)核寄存器,供程序員保存計(jì)算和控制數(shù)據(jù);R13又稱作堆棧指針(SP)寄存器,指向堆棧的棧頂;R14又稱為連接寄存器(LR),用于保存從調(diào)用的子程序返回時(shí)的程序地址;R15又稱為程序計(jì)數(shù)器(PC),微控制器復(fù)位時(shí),PC指向中斷向量表中的復(fù)位向量,一般是地址0x0,程序正常運(yùn)行過(guò)程中,PC始終指向下一條待運(yùn)行指令的地址,對(duì)于順序執(zhí)行的程序段而言,PC始終指向當(dāng)前指令地址+4。Cortex-M0+內(nèi)核寄存器如圖1-4所示。圖1-4 Cortex-M0+內(nèi)核寄存器
1.4 ARMCortex-M0+內(nèi)核寄存器
在圖1-4中,R13即SP寄存器對(duì)應(yīng)著兩個(gè)物理寄存器,分別稱為主堆棧指針MSP和進(jìn)程堆棧指針PSP,SP使用哪個(gè)指針由Cortex-M0+內(nèi)核工作模式?jīng)Q定。Cortex-M0+微控制器有兩種工作模式,即線程模式或稱為進(jìn)程模式(Threadmode)和手柄模式(Handlermode)。上電復(fù)位時(shí),微控制器工作在手柄模式下。當(dāng)工作在手柄模式下時(shí),只能使用主堆棧指針MSP;當(dāng)工作在進(jìn)程模式下時(shí),兩個(gè)堆棧指針均可使用,具體使用哪個(gè)指針,由CONTROL寄存器的第1位決定(見(jiàn)1.4.2節(jié))。手柄模式是一種特權(quán)模式,此模式下程序員可以訪問(wèn)微控制器的全部資源,而線程模式是一種保護(hù)模式,此模式下微控制器的某些資源是訪問(wèn)受限的。1.4 ARMCortex-M0+內(nèi)核寄存器1.4.2 系統(tǒng)控制寄存器 本書將程序狀態(tài)寄存器xPSR、中斷屏蔽寄存器PRIMASK和控制寄存器CONTROL作為系統(tǒng)控制寄存器,有些專家把這些寄存器也視作內(nèi)核寄存器,因?yàn)檫@些寄存器也只能由匯編語(yǔ)言訪問(wèn)。此外,系統(tǒng)控制寄存器還包括表1-1所示的寄存器。表1-1 系統(tǒng)控制寄存器注:表1-1中,RW表示可讀可寫;RO表示只讀;WO表示只寫(表中未出現(xiàn))。表1-1中的系統(tǒng)控制寄存器可以用C語(yǔ)言指針類型的變量訪問(wèn)。1.4 ARMCortex-M0+內(nèi)核寄存器 下面依次介紹這些系統(tǒng)控制寄存器的含義,其中,ACTLR寄存器可視為用戶定義功能的32位通用寄存器,DFSR寄存器為調(diào)試單元服務(wù),這兩個(gè)寄存器不做介紹。
1)程序狀態(tài)寄存器xPSR
程序狀態(tài)寄存器xPSR包括3個(gè)子寄存器,即應(yīng)用程序狀態(tài)寄存器APSR、中斷程序狀態(tài)寄存器IPSR和執(zhí)行程序狀態(tài)寄存器EPSR,如圖1-5所示。圖1-5 程序狀態(tài)寄存器xPSR
1.4 ARMCortex-M0+內(nèi)核寄存器
由圖1-5可知,APSR寄存器只有第[31:28]位域有效,分別記為N、Z、C和V;IPSR寄存器只有第[5:0]位域有效;EPSR寄存器只有第24位有效,用T表示。這里,APSR寄存器的N、Z、C和V為條件碼標(biāo)志符,N為負(fù)條件碼標(biāo)志符,當(dāng)計(jì)算結(jié)果(以二進(jìn)制補(bǔ)碼表示)為負(fù)時(shí),N置1,否則清0;Z為零條件碼標(biāo)志符,當(dāng)計(jì)算結(jié)果為0時(shí),Z置1,否則清0;C為進(jìn)位條件碼標(biāo)志符,當(dāng)計(jì)算結(jié)果有進(jìn)位時(shí),C置1,否則清0;V為溢出條件碼標(biāo)志符,當(dāng)計(jì)算結(jié)果溢出時(shí),V置1,否則V清0。EPSR寄存器的T為0表示ARM處理器工作在ARM指令集下,T為1表示ARM處理器工作在Thumb指令集下,由于Cortex-M0+僅支持Thumb-2指令集,因此,T必須始終為1,芯片上電復(fù)位時(shí),T將自動(dòng)置1。需要注意的是,讀T的值,始終讀出0,可以認(rèn)為T是只寫的位。 當(dāng)Cortex-M0+工作在手柄模式下時(shí),IPSR的第[5:0]位域用于記錄當(dāng)前執(zhí)行的異常號(hào);如果Cortex-M0+工作在線程模式下,則該位域?yàn)?。 2)中斷屏蔽寄存器PRIMASK
中斷屏蔽寄存器PRIMASK只有第0位有效,記為PM,如果該位被置為1,則將屏蔽掉所有優(yōu)先級(jí)號(hào)大于等于0的異常和中斷;如果該位為0,表示優(yōu)先級(jí)號(hào)大于等于0的異常和中斷正常工作。實(shí)際上,PM位被置成1,是將當(dāng)前執(zhí)行的進(jìn)程的優(yōu)先級(jí)設(shè)為0,而優(yōu)先級(jí)號(hào)越小,優(yōu)先級(jí)別越高,因此,使得優(yōu)先級(jí)號(hào)大于或等于0的異常和中斷無(wú)法被響應(yīng)了。1.4 ARMCortex-M0+內(nèi)核寄存器
3)控制寄存器CONTROL
控制寄存器CONTROL只有第[1:0]位有效,第0位記為nPRIV,第1-位記為SPSEL。當(dāng)Cortex-M0+微控制器工作在進(jìn)程模式下時(shí),SP可以使用主堆棧指針MSP或進(jìn)程堆棧指針PSP,此時(shí)使用哪一個(gè)棧指針由SPSEL位決定。當(dāng)SPSEL為0時(shí),使用MSP作為SP;當(dāng)SPSEL為1-時(shí),使用PSP。在手柄模式下,SP只能使用MSP,此時(shí)SPSEL位無(wú)效。如果芯片實(shí)現(xiàn)了非特權(quán)/特權(quán)訪問(wèn)擴(kuò)展功能,則nPRIV位清0時(shí),進(jìn)程模式將享有特權(quán)訪問(wèn)能力;如果nPRIV位置為1,進(jìn)程模式?jīng)]有特權(quán)訪問(wèn)能力。如果芯片沒(méi)有集成非特權(quán)/特權(quán)訪問(wèn)擴(kuò)展功能,則nPRIV位無(wú)效,此時(shí)讀nPRIV位讀出0,寫該位被忽略。
4)處理器身份號(hào)寄存器CPUID 32位的處理器身份號(hào)寄存器CPUID提供芯片的標(biāo)識(shí)信息,如表1-2所示。表1-2 處理器身份號(hào)寄存器CPUID對(duì)于集成Cortex-M0+微控制器內(nèi)核的LPC824芯片而言,讀出CPUID的值為0x410CC601。1.4 ARMCortex-M0+內(nèi)核寄存器
5)中斷控制狀態(tài)寄存器ICSR中斷控制狀態(tài)寄存器ICSR用于控制中斷或獲取中斷的狀態(tài),如表1-3所示。表1-3 中斷控制狀態(tài)寄存器ICSR注:表1-3中的NMI、PendSV和SysTick異常以及中斷號(hào)和異常號(hào)的概念請(qǐng)參考1.6節(jié)。
ICSR寄存器的重要意義在于可以通過(guò)它用軟件方式觸發(fā)NMI、PendSV和SysTick異常,或清除這些異常的請(qǐng)求狀態(tài),尤其是PendSV異常,常被用于嵌入式實(shí)時(shí)操作系統(tǒng)中作為任務(wù)切換的觸發(fā)機(jī)制。1.4 ARMCortex-M0+內(nèi)核寄存器
6)向量表偏移寄存器VTOR
向量表偏移寄存器VTOR只有第[31:7]位有效,用符號(hào)TBLOFF表示,記錄了中斷向量表的起始地址,上電復(fù)位后,TBLOFF為0,表示中斷向量表位于地址0x00000000處。由于中斷向量表的首地址只能位于末尾7位全為0的地址處,所以,VTOR寄存器的第[6:0]位始終為0。如果設(shè)置TBLOFF為0x02,則中斷向量表的首地址為0x00000100。
7)程序中斷和復(fù)位控制寄存器AIRCR
程序中斷和復(fù)位控制寄存器AIRCR用于設(shè)置或讀取中斷控制數(shù)據(jù),其各位的含義如表1-4所示。表1-4 程序中斷和復(fù)位控制寄存器AIRCR
1.4 ARMCortex-M0+內(nèi)核寄存器 8)系統(tǒng)控制寄存器SCR
系統(tǒng)控制寄存器SCR用于設(shè)置或返回系統(tǒng)控制數(shù)據(jù),其各位的含義如表1-5所示。表1-5 系統(tǒng)控制寄存器SCR 9)配置與控制寄存器CCR
只讀的配置與控制寄存器CCR用于返回配置和控制數(shù)據(jù),只有第3位和第9位有效,分別記為UNALIGN_TRP和STKALIGN。UNALIGN_TRP始終為1,表示地址沒(méi)有對(duì)齊的半字或字訪問(wèn)將產(chǎn)生HardFault異常(見(jiàn)1.6節(jié))。這里的“對(duì)齊”是指字?jǐn)?shù)據(jù)的首地址的末2位必須為0,半字?jǐn)?shù)據(jù)的首地址的末位必須為0。STKALIGN也始終為1,表示進(jìn)入異常服務(wù)程序后,堆棧指針SP調(diào)整到8字節(jié)對(duì)齊的地址,并將異常返回地址保存在SP指向的空間。這里的“8字節(jié)對(duì)齊的地址”是指該地址的末3位為0。1.4 ARMCortex-M0+內(nèi)核寄存器
10)系統(tǒng)異常優(yōu)先級(jí)寄存器SHPR2和SHPR3
系統(tǒng)異常優(yōu)先級(jí)寄存器SHPR2只有第[31:30]位域有效,記為PRI_11,用于設(shè)定SVCall異常的優(yōu)先級(jí)號(hào);系統(tǒng)異常優(yōu)先級(jí)寄存器SHPR3中,第[23:22]位域和第[31:30]位域有效,分別記為PRI_14和PRI_15,PRI_14用于設(shè)置PendSV異常的優(yōu)先級(jí)號(hào),PRI_15用于設(shè)置SysTick異常的優(yōu)先級(jí)號(hào)。SVCall、PendSV和SysTick異常的優(yōu)先級(jí)號(hào)配置符號(hào)PRI_11、PRI_14和PRI_15均位于其所在字節(jié)的最高2位,如圖1-6所示,因此,優(yōu)先級(jí)號(hào)的值可以配置為0、64、128或192。圖1-6 系統(tǒng)異常優(yōu)先級(jí)寄存器SHPR2和SHPR3 11)系統(tǒng)異??刂婆c狀態(tài)寄存器SHCSR
系統(tǒng)異??刂婆c狀態(tài)寄存器SHCSR只有第15位有效,記作SVCallpended,讀出1表示SVCall異常(見(jiàn)1.6節(jié))處于請(qǐng)求態(tài),讀出0表示SVCall異常沒(méi)有處于請(qǐng)求態(tài)。注意,如果SVCall異常處于活動(dòng)態(tài)(即正在執(zhí)行其中斷服務(wù)程序),則SVCallpended讀出0。1.4 ARMCortex-M0+內(nèi)核寄存器 SysTick定時(shí)器又稱為系統(tǒng)節(jié)拍定時(shí)器,是一個(gè)24位的減計(jì)數(shù)器,常用來(lái)產(chǎn)生100Hz的SysTick異常信號(hào)作為嵌入式實(shí)時(shí)操作系統(tǒng)的時(shí)鐘節(jié)拍。SysTick定時(shí)器有4個(gè)相關(guān)的寄存器,即SYST_CSR、SYST_RVR、SYST_CVR和SYST_CALIB,如表1-6所示。表1-6 SysTick定時(shí)器相關(guān)的寄存器
SysTick定時(shí)器的工作原理框圖如圖1-7所示。圖1-7 SysTick定時(shí)器工作原理框圖1.5 SysTick定時(shí)器 根據(jù)圖1-7可知,SysTick定時(shí)器可以選擇系統(tǒng)時(shí)鐘或外部輸入時(shí)鐘信號(hào)作為時(shí)鐘源,由控制和狀態(tài)寄存器SYST_CSR決定;啟動(dòng)SysTick定時(shí)器時(shí),需要向當(dāng)前計(jì)數(shù)值寄存器進(jìn)行一次寫入操作(可寫入任意值),清零SYST_CVR寄存器,同時(shí)將SYST_RVR的值裝入到SYST_CVR中,SysTick定時(shí)器開(kāi)始工作。每當(dāng)SYST_CVR減計(jì)數(shù)到0時(shí),在下一個(gè)時(shí)鐘到來(lái)時(shí)自動(dòng)將SYST_RVR的值裝入到SYST_CVR中,同時(shí)產(chǎn)生SysTick定時(shí)器中斷。如果重裝值計(jì)數(shù)器的值設(shè)為0,則下一個(gè)時(shí)鐘到來(lái)時(shí)關(guān)閉SysTick定時(shí)器。10ms定時(shí)校正寄存器SYST_CALIB用于系統(tǒng)時(shí)鐘不準(zhǔn)確時(shí)校正SysTick定時(shí)器,一般由半導(dǎo)體廠商校正。 下面將詳細(xì)介紹表1-6中各個(gè)寄存器的情況。
1)SysTick控制與狀態(tài)寄存器SYST_CSR SysTick控制與狀態(tài)寄存器SYST_CSR如表1-7所示。 2)SysTick重裝值寄存器SYST_RVRSysTick重裝值寄存器SYST_RVR如表1-8所示。使用SysTick定時(shí)器前必須給該寄存器賦值,每當(dāng)SysTick定時(shí)器減計(jì)數(shù)到0后,在下一個(gè)時(shí)鐘到來(lái)時(shí),SYST_RVR寄存器的值被裝入到SYST_CVR寄存器中。表1-7、1-8請(qǐng)看下頁(yè)1.5 SysTick定時(shí)器表1-7 SysTick控制與狀態(tài)寄存器SYST_CSR表1-8 SysTick重裝值寄存器SYST_RVR1.5 SysTick定時(shí)器 3)SysTick當(dāng)前計(jì)數(shù)值寄存器SYST_CVR SysTick當(dāng)前計(jì)數(shù)值寄存器SYST_CVR如表1-9所示,該寄存器的值即為SysTick定時(shí)器的當(dāng)前計(jì)數(shù)值,在使用SysTick定時(shí)器時(shí),需要向SYST_CVR寄存器進(jìn)行一次寫入操作,可寫入任何值,該寫操作將清零SYST_CVR寄存器,同時(shí)清零SYST_CSR寄存器的COUNTFLAG標(biāo)志位。表1-9 SysTick當(dāng)前計(jì)數(shù)值寄存器SYST_CVR 4)定時(shí)校正寄存器SYST_CALIB
定時(shí)校正寄存器SYST_CALIB如表1-10所示,當(dāng)系統(tǒng)時(shí)鐘不準(zhǔn)確時(shí),該寄存器用于校正SysTick定時(shí)器定時(shí)頻率,一般由半導(dǎo)體廠商進(jìn)行定時(shí)校正,因此該寄存器是只讀屬性。表1-10 定時(shí)校正寄存器SYST_CALIB1.5 SysTick定時(shí)器 Cortex-M0+微控制器支持5種類型的異常,即復(fù)位異常Reset、不可屏蔽中斷NMI、硬件訪問(wèn)出錯(cuò)異常HardFault、特權(quán)調(diào)用異常SVCall和中斷。其中,中斷包括2個(gè)系統(tǒng)級(jí)別的中斷,即PendSV異常和SysTick中斷,還包括32個(gè)外部中斷。對(duì)于ARM而言,ARM內(nèi)核產(chǎn)生的中斷稱為異常(Exception),外設(shè)產(chǎn)生的中斷稱為中斷(Interrupt)。對(duì)于學(xué)過(guò)單片機(jī)的同學(xué)來(lái)說(shuō),可以把異常和中斷視為相同的概念,并不會(huì)造成學(xué)習(xí)的障礙。Cortex-M0+微控制器的異常如表1-11所示。表1-11 Cortex-M0+微控制器的異常1.6 Cortex-M0+異常 Cortex-M0+中,由于異常和中斷的排列有序,所以把異常和中斷占居的空間稱為異?;蛑袛嘞蛄勘?如圖1-8所示。圖1-8 Cortex-M0+異常與中斷向量表
1.6 Cortex-M0+異常
當(dāng)Cortex-M0+微控制器上電復(fù)位后,異常與中斷向量表位于起始地址0x0處的空間內(nèi),如圖1-8所示。由圖1-8可知,堆棧棧頂占據(jù)了地址0x00處的字空間,這里的堆棧棧頂是指主堆棧指針MSP的值,而復(fù)位異常Reset位于地址0x04處的字空間,因此,Cortex-M0+微控制器上電復(fù)位后,PC指針指向0x04地址處開(kāi)始執(zhí)行,一般地,該字空間中保存了一條跳轉(zhuǎn)指令。 表1-11和圖1-8列出了Cortex-M0+微控制器的全部異常與中斷,其中,復(fù)位異常Reset的優(yōu)先級(jí)號(hào)為-3,即優(yōu)先級(jí)最高,因?yàn)楫惓;蛑袛嗟膬?yōu)先級(jí)號(hào)越小,其優(yōu)先級(jí)越高。不可屏蔽中斷NMI和硬件系統(tǒng)訪問(wèn)出錯(cuò)異常HardFault的優(yōu)先級(jí)號(hào)分別為-2和-1。其余的異常和中斷的優(yōu)先級(jí)均可配置,Cortex-M0+微控制器支持4級(jí)優(yōu)先級(jí)配置,這些異常和中斷的優(yōu)先級(jí)號(hào)必須大于等于0,其中,SVCall、PendSV和SysTick三個(gè)異常的優(yōu)先級(jí)由系統(tǒng)異常優(yōu)先級(jí)寄存器SHPR2和SHPR3進(jìn)行配置,詳情見(jiàn)1.4.2小節(jié)。中斷號(hào)為0~31的中斷的優(yōu)先級(jí)配置方法見(jiàn)1.7節(jié)。 由表1-11可知,每個(gè)異常和中斷都對(duì)應(yīng)著一個(gè)異常號(hào),例如,Reset異常的異常號(hào)為1,外部中斷n的異常號(hào)為16+n??梢杂僧惓L?hào)推斷該異常的地址,異常號(hào)乘以4的值剛好為該異常在異常與中斷向量表中的偏移地址。 異常與中斷向量表的作用在于,當(dāng)某個(gè)異?;蛑袛啾挥|發(fā)后,PC指針將跳轉(zhuǎn)到該異?;蛑袛嘣谙蛄勘碇械牡刂诽?一般地,該地址處存放著一條跳轉(zhuǎn)指針,進(jìn)一步跳轉(zhuǎn)到該異?;蛑袛嗟闹袛喾?wù)程序入口處執(zhí)行,實(shí)現(xiàn)對(duì)該異常與中斷的響應(yīng)處理。1.6 Cortex-M0+異常 表1-11中異常號(hào)為16+n的外部中斷n(n=0,1,2,…,31)由嵌套向量中斷控制器NVIC管理。每個(gè)外部中斷n都對(duì)應(yīng)著一個(gè)中斷號(hào)n,記為IRQn。嵌套向量中斷控制器NVIC通過(guò)12個(gè)寄存器管理IRQ31~IRQ0。這些寄存器如表1-12所示,它們的復(fù)位值均為0x0。表1-12 NVIC相關(guān)的寄存器1.7 嵌套向量中斷控制器 下面依次介紹各個(gè)NVIC相關(guān)的寄存器的含義。
1)中斷開(kāi)放寄存器NVIC_ISER
中斷開(kāi)放寄存器NVIC_ISER是一個(gè)32位的寄存器,第n位的值對(duì)應(yīng)著IRQn的狀態(tài),n=0~31,即向NVIC_ISER寄存器的第n位寫入1,打開(kāi)相對(duì)應(yīng)的IRQn中斷;向第n位寫入0無(wú)效。例如,第0位的值設(shè)為1,則打開(kāi)IRQ0中斷;第5位的值設(shè)為1,則打開(kāi)IRQ
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 固定綜合單位合同范本
- 加工坊轉(zhuǎn)讓合同范本
- 呼吸衰竭有創(chuàng)通氣護(hù)理查房
- 銀行監(jiān)控服務(wù)合同范本
- 產(chǎn)品授權(quán)經(jīng)營(yíng)合同范本
- 工廠吊車出售合同范本
- 消防現(xiàn)場(chǎng)通信保障課件
- 運(yùn)輸押金協(xié)議合同范本
- 露營(yíng)用具租用合同范本
- 租房合同范本
- 2024年山西交通控股集團(tuán)有限公司招聘真題
- 2025年妊娠期糖尿病護(hù)理查房記錄模板范文
- 2025年傳動(dòng)部件行業(yè)當(dāng)前發(fā)展趨勢(shì)與投資機(jī)遇洞察報(bào)告
- 2025-2030中國(guó)海水淡化技術(shù)經(jīng)濟(jì)性分析與政策補(bǔ)貼機(jī)制報(bào)告
- 學(xué)校學(xué)生一日常規(guī)管理細(xì)則(2025年修訂)
- 【語(yǔ)文】小學(xué)四年級(jí)下冊(cè)期末質(zhì)量模擬試題測(cè)試卷
- 2025年甘南事業(yè)單位考試筆試試題
- 山東護(hù)士招聘考試題庫(kù)及答案
- 2025-2026學(xué)年高一上學(xué)期開(kāi)學(xué)第一課主題班會(huì)課件
- 湖北省襄陽(yáng)市棗陽(yáng)市2024-2025學(xué)年七年級(jí)下學(xué)期期末考試英語(yǔ)試卷(含答案無(wú)聽(tīng)力部分)
- 存量貸款管理辦法
評(píng)論
0/150
提交評(píng)論