版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、本篇包括第一至四章,為全書的硬件基礎(chǔ)部分,依次介紹了 ARM Cortex-M0+內(nèi)核、 LPC82X微控器、LPC824開發(fā)平臺(tái)與工程框架以及異常與中斷管理等內(nèi)容。LPC82X典型硬件系統(tǒng)第一章ARM Cortex-M0+內(nèi)核1.1ARM Cortex-M0+內(nèi)核特點(diǎn)1.2ARM Cortex-M0+內(nèi)核架構(gòu)1.3ARM Cortex-M0+存儲(chǔ)器配置1.4ARM Cortex-M0+內(nèi)核寄存器1.5SysTick定時(shí)器1.6Cortex-M0+異常 1.7嵌套向量中斷控制器ARM是AdvancedRISC Machine(高級(jí)精簡指令集機(jī)器)的縮寫,現(xiàn)為ARM公司的注冊商標(biāo)。ARM Cor
2、tex-M0+內(nèi)核屬于ARM公司推出的Cortex-M系列內(nèi)核之一,相對于高性能的Cortex-M3內(nèi)核而言,它具有體積小、功耗低和控制靈活等特點(diǎn),主要針對傳統(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匯編語言指令集,它具有以下特點(diǎn):(1)Cortex-M0+內(nèi)核包含極低數(shù)量的門電路,是目前全球功耗最低的內(nèi)核,特別適用于對功耗要求苛刻的嵌入式系統(tǒng)應(yīng)用場合。(2)支持32位長的Thumb-2擴(kuò)展指令集和16位長的Thumb指令集,代碼的執(zhí)行效率遠(yuǎn)遠(yuǎn)高于
3、8位長的單片機(jī)匯編指令。(3)支持單周期的I/O(輸入/輸出)口訪問,對外設(shè)的控制速度快。(4)具有低功耗工作模式,在內(nèi)核空閑時(shí)可以使其進(jìn)入低功耗模式,從而極大地節(jié)約電能;當(dāng)內(nèi)核要工作時(shí),通過緊耦合的快速中斷喚醒單元使其進(jìn)入正常工作模式。(5)內(nèi)核中的各個(gè)組件采用模塊化結(jié)構(gòu),通過精簡的高性能總線(AHB-Lite)連接在一起,內(nèi)核中的功耗管理單元可以動(dòng)態(tài)配置各個(gè)組件的工作狀態(tài),可根據(jù)需要使某些空閑的組件處于掉電模式,以盡可能地減少功耗。(6)可執(zhí)行代碼保存在Flash存儲(chǔ)區(qū)中,而Cortex-M0+內(nèi)核支持從Flash中以極低的功耗快速讀取指令,并以極低的功耗(工作在一個(gè)相對較低的CPU時(shí)鐘下
4、)在內(nèi)核中高速執(zhí)行代碼。1.1ARM Cortex-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)AB+C的三操作數(shù)運(yùn)算。這里Cortex-M0+支持的硬件乘法器可以在一個(gè)CPU時(shí)鐘周期內(nèi)實(shí)現(xiàn)AB的二操作數(shù)運(yùn)算。(8)Cortex-M0+內(nèi)核的每條匯編指令的執(zhí)行周期是確定的,中斷處理的時(shí)間是確定的、高效的,且具有快速中斷處理能力,特別適用于對實(shí)時(shí)性要求苛刻的智能控制場合。(9)支持二線的串行調(diào)試接口(SWD),只需要使用芯片的兩根管腳就可以實(shí)現(xiàn)對Co
5、rtex-M0+內(nèi)核芯片的在線仿真與調(diào)試,通過SWD可以向芯片的Flash存儲(chǔ)器固化程序代碼,且具有指令跟蹤執(zhí)行功能。而絕大多數(shù)的傳統(tǒng)單片機(jī)是不能在線仿真調(diào)試的,因此,基于單片機(jī)的工程測試復(fù)雜且周期漫長。(10)Cortex-M0+內(nèi)核不是物理形態(tài)的微控制器芯片,而是屬于知識(shí)產(chǎn)權(quán)(IP),所以常被稱為IP核。目前全球大約有150家半導(dǎo)體公司購買了ARM公司的IP核,生產(chǎn)集成了IP核的微控制器芯片(稱為流片,流片測試成功后進(jìn)入芯片量產(chǎn)階段)。所有集成了Cortex-M0+內(nèi)核的微控制器芯片,均可使用相同的集成開發(fā)環(huán)境(如Keil公司的MDK和IAR公司的EWARM等)和相同的仿真器(如ULink
6、2、JLinkV8等)進(jìn)行軟件開發(fā),事實(shí)上,幾乎全部的ARM芯片都使用相同的開發(fā)環(huán)境和仿真器。但是,對于傳統(tǒng)的單片機(jī)而言,不同半導(dǎo)體廠商生產(chǎn)的單片機(jī)所用的開發(fā)環(huán)境和編程下載器往往不相同。1.1ARM Cortex-M0+內(nèi)核特點(diǎn) 相對于8位字長的傳統(tǒng)8051單片機(jī)而言,Cortex-M0+內(nèi)核是32位字長的微控制器內(nèi)核,其內(nèi)部總線寬度為32位,指令和數(shù)據(jù)傳輸速度及功能大大提升。Cortex-M0+內(nèi)核架構(gòu)如圖1-1所示。圖1-1Cortex-M0+內(nèi)核架構(gòu)1.2ARM Cortex-M0+內(nèi)核結(jié)構(gòu) 由圖1-1可知,Cortex-M0+內(nèi)核由Cortex-M0+處理器和三個(gè)可選的組件,即喚醒中斷
7、控制器(WIC)、宏跟蹤單元(MTB)和調(diào)試訪問口組成,Cortex-M0+處理器包括Cortex-M0+處理器核心、嵌套向量中斷控制器(NVIC)和兩個(gè)可選的組件,即存儲(chǔ)保護(hù)單元(MPU)和調(diào)試器組成,其中,調(diào)試器又包括斷點(diǎn)與觀測點(diǎn)單元和調(diào)試器接口。Cortex-M0+內(nèi)核與外部通過總線陣列和中斷進(jìn)行通信,其中,中斷為單向輸入口,總線陣列相連接的精簡高性能總線(AHB)接口以及可選的單周期輸入/輸出(I/O)口和串行調(diào)試或JTAG口為雙向口。32位的Cortex-M0+處理器核心是計(jì)算和控制中心,采用了兩級(jí)流水的馮諾依曼結(jié)構(gòu),執(zhí)行ARMv6-M指令集(即16位長的Thumb-2指令集,含32
8、位長的擴(kuò)展指令),集成了一個(gè)單周期的乘法器(用于高性能芯片中)或一個(gè)32位的乘法器(用于低功耗芯片中)。Cortex-M0+內(nèi)核具有很強(qiáng)的中斷處理能力,一個(gè)優(yōu)先級(jí)可配置的嵌套向量中斷控制器(NVIC)直接與Cortex-M0+處理器核心相連接,通過這種緊耦合的嵌套向量中斷控制器,可以實(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)境。如果沒有中斷尾鏈功能,則處理器在響應(yīng)一個(gè)中斷前,先進(jìn)行入棧操作,保存當(dāng)前中斷觸
9、發(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í)行原來的程序。1.2ARM Cortex-M0+內(nèi)核結(jié)構(gòu) 接著,重復(fù)這些操作響應(yīng)下一個(gè)中斷。因此,沒有中斷尾鏈功能時(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)試能力,通過調(diào)試訪問口,外部的串行調(diào)試或JTAG調(diào)試口與Cortex-M0+處理器的調(diào)試器相連接,調(diào)試器直接與Cortex-M0+處理器
10、核心連接,還通過它與宏跟蹤單元相連接。因此,通過串行調(diào)試或JTAG調(diào)試口可以訪問Cortex-M0+內(nèi)核的全部資源,包括調(diào)試或跟蹤程序代碼的執(zhí)行,還可以檢查代碼的執(zhí)行結(jié)果。存儲(chǔ)保護(hù)單元(MPU)可以對存儲(chǔ)器的某些空間設(shè)定訪問權(quán)限,使得只有特定的程序代碼才能訪問這些空間,普通的程序代碼則無權(quán)訪問,這樣可以有效地保護(hù)關(guān)鍵的程序代碼存儲(chǔ)區(qū)或數(shù)據(jù)區(qū)不受意外訪問(例如病毒)的侵害。圖1-1中,相對于Cortex-M0+處理器核心而言,其余的組件均稱為Cortex-M0+內(nèi)核的外設(shè),所有這些組件均為知識(shí)產(chǎn)權(quán)(IP)核。半導(dǎo)體廠商在這個(gè)IP核的基礎(chǔ)上添加中斷發(fā)生器、存儲(chǔ)器、與AHB相連接的多功能芯片外設(shè)和輸
11、入/輸出(I/O)口等,即可以得到特定功能的微控制器芯片。1.2ARM Cortex-M0+內(nèi)核結(jié)構(gòu) Cortex-M0+存儲(chǔ)空間的最大訪問能力為232字節(jié),即4GB。對于Cortex-M0+而言,8位(8bit)為一個(gè)字節(jié),16位稱為半字,32位稱為字。以字為單位,Cortex-M0+的存儲(chǔ)空間的最大訪問能力為230字,即從0至230-1字。一般地,訪問地址習(xí)慣采用字節(jié)地址,此時(shí),Cortex-M0+的存儲(chǔ)空間配置如圖1-2所示。圖1-2Cortex-M0+存儲(chǔ)空間配置1.3ARM Cortex-M0+存儲(chǔ)器配置 由圖1-2可知,4GB的Cortex-M0+映射存儲(chǔ)空間被分成8個(gè)相同大小的空
12、間,每個(gè)空間為0.5GB。這8個(gè)空間中,位于地址范圍0 x000000000 x1FFFFFFF的Code空間對應(yīng)著集成在芯片上的ROM或Flash存儲(chǔ)器,主要用于保存可執(zhí)行的程序代碼,也可用于保存數(shù)據(jù),其中,中斷向量表位于以0 x0起始的地址空間中,一般占有幾十至幾百個(gè)字節(jié)。位于地址范圍0 x200000000 x3FFFFFFF的SRAM區(qū)域,對應(yīng)著集成在芯片中的RAM存儲(chǔ)器,主要用于保存數(shù)據(jù),保存的數(shù)據(jù)在芯片掉電后丟失。位于地址范圍0 x400000000 x5FFFFFFF的片上外設(shè)區(qū)域,存儲(chǔ)著片上外設(shè)的訪問寄存器,通過讀或?qū)戇@些寄存器,可實(shí)現(xiàn)對片上外設(shè)的訪問和控制。位于地址范圍0 x
13、600000000 x7FFFFFFF的RAM區(qū)域?qū)儆诳焖賀AM區(qū),是具有“寫回”特性的緩存區(qū),而位于地址范圍0 x800000000 x9FFFFFFF的RAM區(qū)域?qū)儆诼賀AM區(qū),是具有“寫通”特性的緩存區(qū)。這兩個(gè)RAM區(qū)都有對應(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í),通過緩存直接將數(shù)據(jù)寫入到RAM區(qū)中。因此,具有“寫回”特性的RAM中的數(shù)據(jù)有可能與其緩存中的數(shù)據(jù)不
14、同,當(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.3ARM Cortex-M0+存儲(chǔ)器配置 Cortex-M0+支持兩種存儲(chǔ)模式,即小端模式和字節(jié)保序的大端模式。不妨設(shè)Addr為一個(gè)字地址。所謂的字地址,是指地址的最低兩位為0,即地址能被4整除,例如0 x00000000、0 x00000004、0 x00000008等都是字地址,同樣,把地址的最低一位為0的地址稱為半字地址,如0 x00000002
15、、0 x00000004等,顯然,字地址都是半字地址。設(shè)DataA為一個(gè)字,包括4個(gè)字節(jié),從高字節(jié)到低字節(jié)依次記為DataA31:24、DataA23:16、DataA15:8和DataA7:0。設(shè)DataB為一個(gè)半字,包括2個(gè)字節(jié),依次記為DataB15:8和DataB7:0,則在兩種存儲(chǔ)模式下,將DataA或DataB保存在Addr地址的情況如圖1-3所示。圖1-3小端模式與字節(jié)保序的大端模式示例1.3ARM Cortex-M0+存儲(chǔ)器配置 由圖1-3可知,小端模式下,數(shù)據(jù)字的高字節(jié)存儲(chǔ)在字地址的高端,數(shù)據(jù)字的低字節(jié)存儲(chǔ)在字地址的低端;而大端模式下剛好相反,數(shù)據(jù)字的高字節(jié)存儲(chǔ)在字地址的低端
16、,數(shù)據(jù)字的低字節(jié)存儲(chǔ)在字地址的高端。所謂的字節(jié)保序,是指在大端模式下,每個(gè)字節(jié)內(nèi)的位的順序保持不變。1.3ARM Cortex-M0+存儲(chǔ)器配置 1.4.1內(nèi)核寄存器Cortex-M0+微控制器共有16個(gè)內(nèi)核寄存器,分別記為R0R15,其中R0R12為32位的通用目的內(nèi)核寄存器,供程序員保存計(jì)算和控制數(shù)據(jù);R13又稱作堆棧指針(SP)寄存器,指向堆棧的棧頂;R14又稱為連接寄存器(LR),用于保存從調(diào)用的子程序返回時(shí)的程序地址;R15又稱為程序計(jì)數(shù)器(PC),微控制器復(fù)位時(shí),PC指向中斷向量表中的復(fù)位向量,一般是地址0 x0,程序正常運(yùn)行過程中,PC始終指向下一條待運(yùn)行指令的地址,對于順序執(zhí)行
17、的程序段而言,PC始終指向當(dāng)前指令地址+4。Cortex-M0+內(nèi)核寄存器如圖1-4所示。圖1-4Cortex-M0+內(nèi)核寄存器1.4ARM Cortex-M0+內(nèi)核寄存器 在圖1-4中,R13即SP寄存器對應(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è)堆棧指針均可使用,具體使用哪
18、個(gè)指針,由CONTROL寄存器的第1位決定(見1.4.2節(jié))。手柄模式是一種特權(quán)模式,此模式下程序員可以訪問微控制器的全部資源,而線程模式是一種保護(hù)模式,此模式下微控制器的某些資源是訪問受限的。1.4ARM Cortex-M0+內(nèi)核寄存器 1.4.2系統(tǒng)控制寄存器本書將程序狀態(tài)寄存器xPSR、中斷屏蔽寄存器PRIMASK和控制寄存器CONTROL作為系統(tǒng)控制寄存器,有些專家把這些寄存器也視作內(nèi)核寄存器,因?yàn)檫@些寄存器也只能由匯編語言訪問。此外,系統(tǒng)控制寄存器還包括表1-1所示的寄存器。表1-1系統(tǒng)控制寄存器注:表1-1中,RW表示可讀可寫;RO表示只讀;WO表示只寫(表中未出現(xiàn))。表1-1中的
19、系統(tǒng)控制寄存器可以用C語言指針類型的變量訪問。1.4ARM Cortex-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)寄存器xPSR1.4ARM Cortex-M0+內(nèi)核寄存器 由圖1-5可知,APSR寄存器只有第31:28位域有效,分別記為N、Z、C和V;IPSR寄存器只有第5:0位域有效
20、;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,可以
21、認(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的異常和中斷無法被響應(yīng)了。1.4ARM Cortex-M0+內(nèi)核寄存器 3)控制寄存器CONTROL控制寄存器
22、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位無效。如果芯片實(shí)現(xiàn)了非特權(quán)/特權(quán)訪問擴(kuò)展功能,則nPRIV位清0時(shí),進(jìn)程模式將享有特權(quán)訪問能力;如果nPRIV位置為1,進(jìn)程模式?jīng)]有特權(quán)訪問能力。如果芯片沒有集成非特權(quán)/特權(quán)訪問擴(kuò)展功能,則nPRIV位無效,此時(shí)讀nPRIV位讀出0,寫該位被忽略。4)處理
23、器身份號(hào)寄存器CPUID32位的處理器身份號(hào)寄存器CPUID提供芯片的標(biāo)識(shí)信息,如表1-2所示。表1-2處理器身份號(hào)寄存器CPUID對于集成Cortex-M0+微控制器內(nèi)核的LPC824芯片而言,讀出CPUID的值為0 x410CC601。1.4ARM Cortex-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)的概念請參考1.6節(jié)。ICSR寄存器的重要意義在于可以通過它用軟件方式觸發(fā)NMI、PendSV和SysT
24、ick異常,或清除這些異常的請求狀態(tài),尤其是PendSV異常,常被用于嵌入式實(shí)時(shí)操作系統(tǒng)中作為任務(wù)切換的觸發(fā)機(jī)制。1.4ARM Cortex-M0+內(nèi)核寄存器 6)向量表偏移寄存器VTOR向量表偏移寄存器VTOR只有第31:7位有效,用符號(hào)TBLOFF表示,記錄了中斷向量表的起始地址,上電復(fù)位后,TBLOFF為0,表示中斷向量表位于地址0 x00000000處。由于中斷向量表的首地址只能位于末尾7位全為0的地址處,所以,VTOR寄存器的第6:0位始終為0。如果設(shè)置TBLOFF為0 x02,則中斷向量表的首地址為0 x00000100。7)程序中斷和復(fù)位控制寄存器AIRCR 程序中斷和復(fù)位控制寄
25、存器AIRCR用于設(shè)置或讀取中斷控制數(shù)據(jù),其各位的含義如表1-4所示。表1-4程序中斷和復(fù)位控制寄存器AIRCR1.4ARM Cortex-M0+內(nèi)核寄存器 8)系統(tǒng)控制寄存器SCR系統(tǒng)控制寄存器SCR用于設(shè)置或返回系統(tǒng)控制數(shù)據(jù),其各位的含義如表1-5所示。表1-5系統(tǒng)控制寄存器SCR9)配置與控制寄存器CCR只讀的配置與控制寄存器CCR用于返回配置和控制數(shù)據(jù),只有第3位和第9位有效,分別記為UNALIGN_TRP和STKALIGN。UNALIGN_TRP始終為1,表示地址沒有對齊的半字或字訪問將產(chǎn)生HardFault異常(見1.6節(jié))。這里的“對齊”是指字?jǐn)?shù)據(jù)的首地址的末2位必須為0,半字?jǐn)?shù)
26、據(jù)的首地址的末位必須為0。STKALIGN也始終為1,表示進(jìn)入異常服務(wù)程序后,堆棧指針SP調(diào)整到8字節(jié)對齊的地址,并將異常返回地址保存在SP指向的空間。這里的“8字節(jié)對齊的地址”是指該地址的末3位為0。1.4ARM Cortex-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異
27、常的優(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和SHPR311)系統(tǒng)異??刂婆c狀態(tài)寄存器SHCSR系統(tǒng)異常控制與狀態(tài)寄存器SHCSR只有第15位有效,記作SVCallpended,讀出1表示SVCall異常(見1.6節(jié))處于請求態(tài),讀出0表示SVCall異常沒有處于請求態(tài)。注意,如果SVCall異常處于活動(dòng)態(tài)(即正在執(zhí)行其中斷服務(wù)程序),則SVCallpended讀出0。1.4ARM Co
28、rtex-M0+內(nèi)核寄存器 SysTick定時(shí)器又稱為系統(tǒng)節(jié)拍定時(shí)器,是一個(gè)24位的減計(jì)數(shù)器,常用來產(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-6SysTick定時(shí)器相關(guān)的寄存器SysTick定時(shí)器的工作原理框圖如圖1-7所示。圖1-7SysTick定時(shí)器工作原理框圖1.5SysTick定時(shí)器 根據(jù)圖1-7可知,SysTick定時(shí)器可以選擇系統(tǒng)時(shí)鐘或外部輸入時(shí)鐘信號(hào)作為時(shí)鐘源,由控制和狀態(tài)寄存器SYST_CSR決定;啟動(dòng)SysT
29、ick定時(shí)器時(shí),需要向當(dāng)前計(jì)數(shù)值寄存器進(jìn)行一次寫入操作(可寫入任意值),清零SYST_CVR寄存器,同時(shí)將SYST_RVR的值裝入到SYST_CVR中,SysTick定時(shí)器開始工作。每當(dāng)SYST_CVR減計(jì)數(shù)到0時(shí),在下一個(gè)時(shí)鐘到來時(shí)自動(dòng)將SYST_RVR的值裝入到SYST_CVR中,同時(shí)產(chǎn)生SysTick定時(shí)器中斷。如果重裝值計(jì)數(shù)器的值設(shè)為0,則下一個(gè)時(shí)鐘到來時(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_CSRSys
30、Tick控制與狀態(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í)鐘到來時(shí),SYST_RVR寄存器的值被裝入到SYST_CVR寄存器中。表1-7、1-8請看下頁1.5SysTick定時(shí)器 表1-7SysTick控制與狀態(tài)寄存器SYST_CSR表1-8SysTick重裝值寄存器SYST_RVR1.5SysTick定時(shí)器 3)SysTick當(dāng)前計(jì)數(shù)值寄存器SYST_CVRSysTick當(dāng)前計(jì)數(shù)值寄存器SYST_C
31、VR如表1-9所示,該寄存器的值即為SysTick定時(shí)器的當(dāng)前計(jì)數(shù)值,在使用SysTick定時(shí)器時(shí),需要向SYST_CVR寄存器進(jìn)行一次寫入操作,可寫入任何值,該寫操作將清零SYST_CVR寄存器,同時(shí)清零SYST_CSR寄存器的COUNTFLAG標(biāo)志位。表1-9SysTick當(dāng)前計(jì)數(shù)值寄存器SYST_CVR4)定時(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.5SysTick定時(shí)器 Cort
32、ex-M0+微控制器支持5種類型的異常,即復(fù)位異常Reset、不可屏蔽中斷NMI、硬件訪問出錯(cuò)異常HardFault、特權(quán)調(diào)用異常SVCall和中斷。其中,中斷包括2個(gè)系統(tǒng)級(jí)別的中斷,即PendSV異常和SysTick中斷,還包括32個(gè)外部中斷。對于ARM而言,ARM內(nèi)核產(chǎn)生的中斷稱為異常(Exception),外設(shè)產(chǎn)生的中斷稱為中斷(Interrupt)。對于學(xué)過單片機(jī)的同學(xué)來說,可以把異常和中斷視為相同的概念,并不會(huì)造成學(xué)習(xí)的障礙。Cortex-M0+微控制器的異常如表1-11所示。表1-11Cortex-M0+微控制器的異常1.6Cortex-M0+異常 Cortex-M0+中,由于異常
33、和中斷的排列有序,所以把異常和中斷占居的空間稱為異常或中斷向量表,如圖1-8所示。圖1-8Cortex-M0+異常與中斷向量表1.6Cortex-M0+異常 當(dāng)Cortex-M0+微控制器上電復(fù)位后,異常與中斷向量表位于起始地址0 x0處的空間內(nèi),如圖1-8所示。由圖1-8可知,堆棧棧頂占據(jù)了地址0 x00處的字空間,這里的堆棧棧頂是指主堆棧指針MSP的值,而復(fù)位異常Reset位于地址0 x04處的字空間,因此,Cortex-M0+微控制器上電復(fù)位后,PC指針指向0 x04地址處開始執(zhí)行,一般地,該字空間中保存了一條跳轉(zhuǎn)指令。表1-11和圖1-8列出了Cortex-M0+微控制器的全部異常與中
34、斷,其中,復(fù)位異常Reset的優(yōu)先級(jí)號(hào)為-3,即優(yōu)先級(jí)最高,因?yàn)楫惓;蛑袛嗟膬?yōu)先級(jí)號(hào)越小,其優(yōu)先級(jí)越高。不可屏蔽中斷NMI和硬件系統(tǒng)訪問出錯(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)行配置,詳情見1.4.2小節(jié)。中斷號(hào)為031的中斷的優(yōu)先級(jí)配置方法見1.7節(jié)。由表1-11可知,每個(gè)異常和中斷都對應(yīng)著一個(gè)異常號(hào),例如,Reset異常的異常號(hào)為1,外部中斷n的異
35、常號(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)對該異常與中斷的響應(yīng)處理。1.6Cortex-M0+異常 表1-11中異常號(hào)為16+n的外部中斷n(n=0,1,2,31)由嵌套向量中斷控制器NVIC管理。每個(gè)外部中斷n都對應(yīng)著一個(gè)中斷號(hào)n,記為IRQn。嵌套向量中斷控制器NVIC通過12個(gè)寄存器管理IRQ31IRQ0。這些寄存器如表1-12所示,它
36、們的復(fù)位值均為0 x0。表1-12NVIC相關(guān)的寄存器1.7嵌套向量中斷控制器 下面依次介紹各個(gè)NVIC相關(guān)的寄存器的含義。1)中斷開放寄存器NVIC_ISER中斷開放寄存器NVIC_ISER是一個(gè)32位的寄存器,第n位的值對應(yīng)著IRQn的狀態(tài),n=031,即向NVIC_ISER寄存器的第n位寫入1,打開相對應(yīng)的IRQn中斷;向第n位寫入0無效。例如,第0位的值設(shè)為1,則打開IRQ0中斷;第5位的值設(shè)為1,則打開IRQ5中斷。讀出NVIC_ISER寄存器的第n位的值為1,表示IRQn處于開放狀態(tài);若第n位讀出值為0,表示IRQn處于關(guān)閉態(tài)。2)中斷關(guān)閉寄存器NVIC_ICER中斷關(guān)閉寄存器NV
37、IC_ICER的作用與NVIC_ISER的作用相反。NVIC_ICER寄存器的第n位對應(yīng)著IRQn的狀態(tài),n=031,向NVIC_ICER寄存器的第n位寫入1,關(guān)閉相對應(yīng)的IRQn中斷;向第n位寫入0無效。讀出NVIC_ICER寄存器的第n位的值為1,表示IRQn處于開放狀態(tài);若第n位讀出值為0,表示IRQn處于關(guān)閉狀態(tài)。一般情況下,可把該寄存器視為只寫寄存器。3)中斷請求寄存器NVIC_ISPR中斷請求寄存器NVIC_ISPR是32位的寄存器,第n位的值對應(yīng)著IRQn的請求狀態(tài),n=031。向NVIC_ISPR寄存器的第n位寫入1,將配置IRQn中斷為請求狀態(tài);寫入0無效。讀NVIC_ISP
38、R寄存器的第n位為1,表示IRQn正處于請求狀態(tài);讀出第n位的值為0,表示IRQn沒有處于請求態(tài)。1.7嵌套向量中斷控制器 4)中斷清除請求寄存器NVIC_ICPR中斷清除請求寄存器NVIC_ICPR的作用與NVIC_ISPR寄存器的作用相反。NVIC_ICPR寄存器的第n位的值對應(yīng)著IRQn的請求狀態(tài),n=031。向NVIC_ICPR寄存器的第n位寫入1,將清除IRQn中斷的請求狀態(tài);寫入0無效。讀NVIC_ICPR寄存器的第n位為1,表示IRQn正處于請求狀態(tài);讀出第n位的值為0,表示IRQn沒有處于請求態(tài)。一般情況下,可將該寄存器視為只讀寄存器。5)中斷優(yōu)先級(jí)寄存器NVIC_IPRn(n
39、=07)嵌套向量中斷控制器NVIC共管理了32個(gè)中斷,即IRQ31IRQ0,每個(gè)中斷有4級(jí)優(yōu)先級(jí),每個(gè)中斷的優(yōu)先級(jí)值占用一個(gè)字節(jié),32個(gè)中斷共需要32個(gè)字節(jié),即8個(gè)字。因此,需要8個(gè)32位的寄存器NVIC_IPRn(n=07)才能管理這些中斷的優(yōu)先級(jí)。盡管每個(gè)中斷的優(yōu)先級(jí)值占用一個(gè)字節(jié),由于優(yōu)先級(jí)只有4級(jí),所以,優(yōu)先級(jí)值僅需要2位,Cortex-M0+微控制器中,使用每個(gè)字節(jié)的最高2位作為優(yōu)先級(jí)配置位,如圖1-9所示。圖1-9中,PRI_n(n=0,1,2,31)對應(yīng)著IRQn的中斷優(yōu)先級(jí)號(hào),PRI_n為所在字節(jié)的最高2位,因此,IRQn的優(yōu)先級(jí)號(hào)的值可以取為0、64、128或192。IRQn
40、中斷對應(yīng)的配置位域PRI_n位于NVIC_IPRm中的第k個(gè)字節(jié)里,這里m等于n除以4的整數(shù)部分,k等于n除以4的余數(shù)部分。圖1-9中保留的位域全部為0。圖1-9請看下頁1.7嵌套向量中斷控制器 圖1-9中斷優(yōu)先級(jí)寄存器NVIC_IPRn(n=07)1.7嵌套向量中斷控制器 第二章LPC82X微控制器2.1LPC824微控制器特點(diǎn)與管腳配置2.2LPC824微控制器內(nèi)部結(jié)構(gòu) 2.3LPC824存儲(chǔ)器配置2.4LPC824NVIC中斷 2.5I/O口配置IOCON2.6通用目的輸入輸出口 GPIO 2.7系統(tǒng)配置模塊SYSCONLPC82X是集成了Cortex-M0+內(nèi)核的32位微控制器系列芯片
41、,CPU時(shí)鐘頻率最高可達(dá)30MHz。目前LPC82X家族包括LPC822和LPC824兩類芯片,不同型號(hào)的芯片只有芯片封裝和片上外設(shè)略有不同。本書以LPC824M201JDH20(以下簡稱LPC824)作為LPC82X家族的代表芯片展開討論。本章將介紹LPC824微控制器芯片的特點(diǎn)、管腳配置、內(nèi)部結(jié)構(gòu)、存儲(chǔ)器配置、NVIC中斷、典型應(yīng)用電路和通用I/O口等內(nèi)容。LPC824微控制器芯片具有以下特點(diǎn):(1)內(nèi)核方面:基于Cortex-M0+內(nèi)核,工作時(shí)鐘頻率最高為30MHz,帶有單周期乘法器、單周期快速I/O口、嵌套向量中斷控制器NVIC、系統(tǒng)節(jié)拍定時(shí)器SysTick和宏跟蹤緩沖器,支持JTAG
42、調(diào)試和帶有4個(gè)斷點(diǎn)和2個(gè)觀測點(diǎn)的串口調(diào)試。(2)存儲(chǔ)器方面:片上集成了32KB的Flash存儲(chǔ)器,該Flash每頁大小為64字節(jié),支持按頁編程和擦除,并且具有代碼讀保護(hù)功能。此外,片上還集成了8KB的SRAM存儲(chǔ)器。(3)ROMAPI方面:ROM中固化了啟動(dòng)代碼(Bootloader)以及ADC、SPI、I2C、USART、功耗配置和整數(shù)除法相關(guān)的驅(qū)動(dòng)和應(yīng)用程序接口函數(shù),還提供了針對Flash存儲(chǔ)器的在應(yīng)用編程(IAP)和在系統(tǒng)編程(ISP)應(yīng)用程序接口函數(shù)。(4)數(shù)字外設(shè)方面:具有16個(gè)快速通用目的I/O口(GPIO),每個(gè)I/O口均帶有可配置的上拉/下拉電阻以及可編程的開路工作模式、輸入反
43、向和毛刺數(shù)字濾波器等,并且每個(gè)I/O口具有方向控制寄存器,可單獨(dú)對其進(jìn)行置位、清零和翻轉(zhuǎn)等操作。GPIO中斷支持復(fù)雜的布爾運(yùn)算(8個(gè)GPIO中斷組合起來的模式匹配功能),開關(guān)矩陣單元可靈活地配置每個(gè)I/O口與芯片管腳的連接方式。集成了CRC引擎,具有帶有18個(gè)通道和9個(gè)觸發(fā)輸入的DMA控制器,這里的CRC是指循環(huán)冗余校驗(yàn)碼,DMA是指無需CPU支持的直接內(nèi)存訪問。2.1 LPC824微控制器特點(diǎn)與管腳配置 (5)定時(shí)器方面:集成了一個(gè)狀態(tài)可配置定時(shí)器(SCT),這是一種極其靈活和復(fù)雜的定時(shí)器,可以產(chǎn)生任何形式的PWM波形;集成了一個(gè)四通道的多速率定時(shí)器(MRT),相當(dāng)于單片機(jī)的定時(shí)器功能,但其
44、實(shí)現(xiàn)更加靈活;還集成了一個(gè)自喚醒定時(shí)器(WKT)和一個(gè)加窗的看門狗定時(shí)器(WWDT)。(6)模擬外設(shè)方面:帶有一個(gè)12位的12輸入通道的ADC,最高采樣頻率為1.2MHz;還具有4輸入的比較器,可使用內(nèi)部或外部參考電壓。(7)串行外設(shè)方面:具有3個(gè)USART、2個(gè)SPI控制器和4個(gè)I2C總線接口,I2C可支持?jǐn)?shù)傳速率400kb/s。(8)時(shí)鐘方面:內(nèi)置了一個(gè)精度為1.5%的12MHzRC振蕩器,上電復(fù)位時(shí)使用該振蕩器信號(hào)作為系統(tǒng)時(shí)鐘,可通過PLL倍頻到30MHz;可外接125MHz的時(shí)鐘源;具有片上專用的看門狗振蕩器,頻率為9.4kHz2.3MHz;可將各個(gè)時(shí)鐘信號(hào)通過芯片管腳輸出。(9)功耗
45、管理方面:使用片上RC振蕩器作為系統(tǒng)時(shí)鐘時(shí)正常工作功耗為90A/MHz,通過集成的PMU(功耗管理單元)可以配置各個(gè)組件的工作狀態(tài),支持睡眠、深度睡眠、掉電、深度掉電等四種低功耗模式,可通過USART、SPI或I2C外設(shè)將芯片喚醒,支持定時(shí)器從深掉電模式喚醒,還具有上電復(fù)位(POR)和掉電檢測(BOD)功能。(10)每個(gè)芯片具有唯一的身份串號(hào),工作電壓范圍為1.8V3.6V,工作溫度為-40105。2.1 LPC824微控制器特點(diǎn)與管腳配置 下面將介紹LPC824的管腳配置情況。LPC824M201JDH20芯片具有20個(gè)管腳,采用TSSOP20封裝,其中,16個(gè)用作GPIO口,其管腳分布圖如
46、圖2-1所示。圖2-1LPC824M201JDH20芯片管腳分布2.1 LPC824微控制器特點(diǎn)與管腳配置 圖2-1顯示LPC824僅有PIO0口,估計(jì)在將來的LPC82X家族中,會(huì)出現(xiàn)具有PIO1和PIO2等GPIO口的芯片。由于LPC824是32位的微控制器,PIO0口應(yīng)該有32個(gè)GPIO口,即從PIO0_0PIO0_31,但是,由于LPC824僅有16個(gè)管腳用作GPIO口,故僅集成了PIO0_0PIO0_5、PIO0_8PIO0_15、PIO0_17和PIO0_23。其中,PIO0_10和PIO0_11為開路結(jié)構(gòu)(Open-drain),最高可以吸入20mA的電流,這兩個(gè)管腳上電復(fù)位時(shí),
47、處于關(guān)閉態(tài)(本質(zhì)上是輸入態(tài)),其他的管腳上電復(fù)位時(shí),均為輸入態(tài)且上拉電阻有效。圖2-1中各個(gè)管腳的具體含義如表2-1所示。表2-1LPC824各個(gè)管腳的含義2.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置 由表2-1可知,大部分管腳都具有多個(gè)功能,當(dāng)有多個(gè)功能復(fù)用同一個(gè)管腳時(shí),上電復(fù)位時(shí),每個(gè)管腳號(hào)對應(yīng)的第一個(gè)功能是缺省功能。除了表2-1所列出的功能外,還有表2-2所示的功能,這些功能可被開關(guān)矩陣單元配置到任一PIO0口上,稱這些功能為可移動(dòng)的功能。這些可移動(dòng)的功能,簡
48、化了LPC824的硬件電路設(shè)計(jì),使得升級(jí)微控制器芯片時(shí),不用重新設(shè)計(jì)硬件平臺(tái),而只需借助軟件方式配置可移動(dòng)的功能接口。在表2-2中,I表示輸入類型,O表示輸出類型,I/O表示輸入/輸出類型。表2-2可移動(dòng)的功能列表2.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置 從表2-2可以看出,LPC824微控制器支持3個(gè)USART,即USART0、USART1和USART2;支持2個(gè)SPI,即SPI0和SPI1;SCT有4個(gè)外部輸入和6個(gè)輸出;支持3個(gè)I2C;具有2個(gè)ADC外部觸發(fā)輸入;具有1個(gè)模擬比較器輸出功能;具有CL
49、KOUT輸出功能,可輸出LPC824微控制器內(nèi)部的所有時(shí)鐘信號(hào);還有1個(gè)模式匹配引擎輸出功能。表2-2中的全部功能均可以借助開關(guān)矩陣單元分配給任何一個(gè)GPIO口,常把這些功能稱為內(nèi)部信號(hào),借助于表2-3所示的寄存器可實(shí)現(xiàn)內(nèi)部信號(hào)與具體管腳的連接,從而才能使用這些內(nèi)部信號(hào)。表2-3開關(guān)矩陣寄存器(基地址:0 x4000C000)2.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置 表2-3中的全部寄存器均為可讀可寫屬性。上電復(fù)位時(shí),管腳分配寄存器PINASSIGN011均被初始化為0 xFFFF FFFF,而管腳有效寄存器PINENABLE0的初始值為0 xFF
50、F FFECF。每個(gè)32位的管腳分配寄存器分成4個(gè)字節(jié),每個(gè)字節(jié)的值就是內(nèi)部信號(hào)分配到的管腳號(hào),對于LPC824而言,字節(jié)的有效取值為05、815、17和23,當(dāng)取為其他值時(shí)無意義。如果管腳分配寄存器的不同字節(jié)設(shè)置了相同的有效值,這表示不同的內(nèi)部信號(hào)被同時(shí)分配到了同一個(gè)管腳,盡可能避免這種分配方式。管腳分配寄存器PINASSIGN011與各個(gè)內(nèi)部信號(hào)的關(guān)系如表2-4所示。表2-4中,后綴“_I”、“_O”和“_IO”分別表示該內(nèi)部信號(hào)為輸入、輸出和輸入輸出類型,其余的部分與表2-2相同。例如,U0_TXD_O表示該內(nèi)部信號(hào)名為U0_TXD,根據(jù)表2-2可知,該內(nèi)部信號(hào)為“USART0發(fā)送數(shù)據(jù)通
51、道”,_O表示該內(nèi)部信號(hào)為輸出類型。由表2-4可知,PINASSIGN0PINASSIGN11中的每個(gè)寄存器都被分為4個(gè)8位的字節(jié):31:24、23:16、15:8和7:0,共48個(gè)8位的字節(jié),對應(yīng)著表2-2中的48個(gè)內(nèi)部信號(hào)的分配,例如,PINASSIGN0的低8位7:0對應(yīng)于U0_TXD_O,PINASSIGN5的第31:24位域?qū)?yīng)著SPI1_MOSI_IO等等。每個(gè)8位的字節(jié)取值為n時(shí),表示該字節(jié)對應(yīng)的內(nèi)部信號(hào)分配到PIO0_n所在的管腳上。例如,當(dāng)PINASSIGN0的第7:0位設(shè)為0 x04時(shí),則將內(nèi)部信號(hào)U0_TXD分配到PIO0_4所在的管腳上,即第6號(hào)引腳(見圖2-1)。表2
52、-4請看下頁2.1 LPC824微控制器特點(diǎn)與管腳配置 表2-4PINASSIGN0PINASSIGN11與內(nèi)部信號(hào)的關(guān)系(復(fù)位值均為0 xFFFFFFFF)2.1 LPC824微控制器特點(diǎn)與管腳配置 表2-3中的管腳有效寄存器PINENABLE0用于配置圖2-1中有多個(gè)功能復(fù)用的那些管腳的功能,只有工作在GPIO狀態(tài)下的管腳才能使用管腳分配寄存器為其分配內(nèi)部信號(hào)。管腳有效寄存器PINENABLE0可以配置多功能復(fù)用管腳用作GPIO口或其他復(fù)用的功能,如表2-5所示。表2-5管腳有效寄存器PINENABLE02.1 LPC824微控制器特點(diǎn)與管腳配置 2.1 LPC824微控制器特點(diǎn)與管腳配置
53、 2.1 LPC824微控制器特點(diǎn)與管腳配置 LPC824微控制器使用ARMCortex-M0+內(nèi)核,并集成了32KBFlash、8KBSRAM、3個(gè)USART、4個(gè)I2C、2個(gè)SPI、5通道ADC和1個(gè)比較器等片上外設(shè),具有16個(gè)GPIO口,其內(nèi)部結(jié)構(gòu)如圖2-2所示。圖2-2LPC824微控制器內(nèi)部結(jié)構(gòu)2.2 LPC824微控制器內(nèi)部結(jié)構(gòu) 圖2-2清楚地展示了LPC824微控制器的內(nèi)部結(jié)構(gòu)。由圖2-2可知,LPC824微控制器內(nèi)核為ARMCortex-M0+核心,“高速通用I/O”和“外部中斷或模式匹配”直接受Cortex-M0+內(nèi)核控制,Cortex-M0+內(nèi)核通過“精簡高性能總線”與“3
54、2KBFlash”、“8KBSRAM”、“ROM”、“CRC”計(jì)算引擎、DMA控制器和“狀態(tài)可配置計(jì)數(shù)器”相連接,通過“高性能總線與高級(jí)外設(shè)總線橋”借助于高級(jí)外設(shè)總線(APB)管理3個(gè)USART、2個(gè)SPI、4個(gè)I2C、1個(gè)ADC、系統(tǒng)配置器、比較器、看門狗定時(shí)器、I/O口配置單元、多速率定時(shí)器、功耗管理單元和自喚醒定時(shí)器等。由圖2-2可知,通過開關(guān)矩陣,可將外部的16個(gè)管腳靈活地配置成與下列中選出的16個(gè)內(nèi)部信號(hào)相連接:“調(diào)試/測試接口”的SWCLK、SWD信號(hào)、PIO0口的16個(gè)通用I/O口、SCT計(jì)數(shù)器的4個(gè)輸入和6個(gè)輸出、3個(gè)USART模塊的15個(gè)信號(hào)(每個(gè)USART有5個(gè),共3個(gè)US
55、ART)、2個(gè)SPI的12個(gè)信號(hào)(SPI0有7個(gè),SPI1有5個(gè))、4個(gè)I2C的8個(gè)信號(hào)、ADC的5個(gè)輸入信號(hào)、時(shí)鐘單元的XTALIN和XTALOUT、RESET、CLKIN以及模擬比較器的4個(gè)輸入和1個(gè)輸出信號(hào)。從圖2-2還可看到,LPC824微控制器片內(nèi)集成了時(shí)鐘發(fā)生器,用于管理IRC(內(nèi)部RC振蕩器)、WDOsc(看門狗振蕩器)、BOD(掉電檢測單元)和POR(上電復(fù)位單元)等,為系統(tǒng)各個(gè)單元提供工作時(shí)鐘信號(hào)和控制信號(hào)。2.2 LPC824微控制器內(nèi)部結(jié)構(gòu) 根據(jù)圖2-2,可以看出LPC824微控制器內(nèi)部單元結(jié)構(gòu)模塊化強(qiáng),除了“功耗管理單元”和“自喚醒定時(shí)器”始終帶電工作外,其余單元都可以
56、工作在低功耗或掉電模式下,這使得LPC824微控制器功耗極低。由于LPC824微控制器集成了開關(guān)矩陣,使得LPC824微控制器在硬件電路設(shè)計(jì)上特別靈活,在產(chǎn)品升級(jí)換代時(shí),只需要通過軟件編程方式修改開關(guān)矩陣,而不需要重新設(shè)計(jì)核心電路板。鑒于LPC824微控制器編程靈活方便、處理速度快和控制能力強(qiáng),有些專家稱LPC824是具有劃時(shí)代標(biāo)志特征的微控制器芯片。2.2 LPC824微控制器內(nèi)部結(jié)構(gòu) LPC824微控制器集成了32KB的Flash存儲(chǔ)器和8KB的SRAM存儲(chǔ)器,其存儲(chǔ)器配置建立在圖1-2的基礎(chǔ)上,針對LPC824微控制器芯片的全部片上資源進(jìn)行配置,如圖2-3所示。圖2-3LPC824存儲(chǔ)器
57、配置2.3 LPC824存儲(chǔ)器配置 由圖2-3可知,LPC824微控制器的最大尋址能力為4GB,這是因?yàn)長PC824微控制器的地址總線寬度為32位。32KB的Flash空間位于0 x00 x7FFF處,用于存放程序代碼和常量數(shù)據(jù),其中0 x00 xC0處為異常與中斷向量表,中斷向量表的結(jié)構(gòu)將在第2.4節(jié)介紹。8KB的SRAM空間位于0 x1000 00000 x1000 1FFF處,用于存放用戶數(shù)據(jù)。圖2-3表明,APB外設(shè)即高級(jí)外設(shè)總線管理的外設(shè)寄存器,均位于地址0 x4000 00004007 FFFF處,共分為32個(gè)塊,每塊大小為16KB,存儲(chǔ)著一個(gè)APB外設(shè)的寄存器。例如,地址空間0
58、x4000 00000 x4000 4000處存儲(chǔ)著加窗的看門狗定時(shí)器相關(guān)的寄存器。由圖2-3可知,LPC824微控制器存儲(chǔ)空間中有一個(gè)12KB大小的只讀空間(BootROM),在系統(tǒng)編程(ISP)和自啟動(dòng)代碼就在芯片出廠時(shí)被固化在該ROM中。圖2-3中的“MTB”表示宏跟蹤緩沖區(qū),用于調(diào)試和仿真LPC824微控制器;“MRT”表示多速率定時(shí)器;“CRC”表示循環(huán)冗余校驗(yàn)碼。2.3 LPC824存儲(chǔ)器配置 LPC824微控制器內(nèi)核為ARM Cortex-M0+,LPC824的中斷控制器隸屬于Cortex-M0+內(nèi)核,稱為緊耦合的嵌套向量中斷控制器NVIC,是將圖18中的中斷號(hào)為n(n=0,1,
59、2,31)的32-個(gè)外部中斷與LPC824的片上外設(shè)中斷觸發(fā)器相結(jié)合。LPC824的NVIC中斷如表2-6所示。表2-6LPC824 NVIC中斷2.4 LPC824 NVIC中斷LPC824通過NVIC中斷管理寄存器管理表2-6中所示的中斷的開放、關(guān)閉、請求、清除請求狀態(tài)和優(yōu)先級(jí)配置,這些寄存器如表2-7所示,它們與表112中地址相同的寄存器是同一個(gè)寄存器,對應(yīng)的含義也完全相同。表2-7LPC824中斷管理寄存器表2-7中的寄存器IABR0在表112中沒有對應(yīng)的寄存器。IABR0為32位只讀的中斷活躍寄存器0,其第n位對應(yīng)著中斷號(hào)為n的IRQn中斷的狀態(tài),如果讀出該位為1,則表示其對應(yīng)的中斷
60、處于活躍態(tài);讀出0,表示該位對應(yīng)的中斷處于非活躍態(tài)。2.4 LPC824 NVIC中斷LPC824上電復(fù)位時(shí),異常與中斷向量表占據(jù)的地址空間為0 x00 xC0,如圖2-4所示。由圖2-4可知,異常與中斷向量表的起始地址為0 x0,結(jié)合圖2-3可知,該部分空間位于LPC824的32KB Flash存儲(chǔ)器中??梢酝ㄟ^設(shè)置VTOR寄存器(見1.4.2節(jié)),使得中斷向量表的位置重定位到SRAM中,VTOR寄存器為ARMCortex-M0+系統(tǒng)控制寄存器,其地址為0 xE000 ED08,復(fù)位值為0 x0000 0000,VTOR寄存器保存了中斷向量表的偏移地址,其第31:7位表示為TBLOFF,第6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度工程合同糾紛處理合同學(xué)習(xí)班3篇
- 二零二五年度房地產(chǎn)租賃合同擔(dān)保風(fēng)險(xiǎn)控制策略3篇
- 二零二五年度影視制作公司演員雇傭合同模板3篇
- 蛋糕生產(chǎn)課程設(shè)計(jì)書
- 二零二五年度房貸轉(zhuǎn)按揭合同打印樣本2篇
- 二零二五年度合同負(fù)債科目界定與審計(jì)準(zhǔn)則合同3篇
- 海南職業(yè)技術(shù)學(xué)院《腫瘤放射治療學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度文化衍生品定制合同協(xié)議3篇
- 海南衛(wèi)生健康職業(yè)學(xué)院《計(jì)算機(jī)輔助設(shè)計(jì)三維圖形》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年醫(yī)療設(shè)備檢測與認(rèn)證服務(wù)協(xié)議3篇
- 山東省煙臺(tái)市2025屆高三上學(xué)期期末學(xué)業(yè)水平診斷政治試卷(含答案)
- 2025北京石景山初二(上)期末數(shù)學(xué)真題試卷(含答案解析)
- 商場停車場管理制度
- 北師大版四年級(jí)下冊數(shù)學(xué)課件第1課時(shí) 買文具
- 青貯產(chǎn)品銷售合同樣本
- 2024年冷庫倉儲(chǔ)服務(wù)協(xié)議3篇
- 中國轎貨車的車保養(yǎng)項(xiàng)目投資可行性研究報(bào)告
- 人工智能在體育訓(xùn)練中的應(yīng)用
- 2024-2030年中國液態(tài)金屬行業(yè)市場分析報(bào)告
- 住宅樓智能化系統(tǒng)工程施工組織設(shè)計(jì)方案
- 高二上學(xué)期數(shù)學(xué)北師大版(2019)期末模擬測試卷A卷(含解析)
評(píng)論
0/150
提交評(píng)論