版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章
LPC1700系列處理器3.1LPC1700系列處理器簡介3.2處理器引腳配置3.3存儲器管理3.4時鐘和功率控制3.5系統(tǒng)控制模塊3.6LPC1700系統(tǒng)例程
LPC1700系列Cortex-M3微控制器用于處理要求高度集成和低功耗的嵌入式應(yīng)用,常用的芯片型號有LPC1764、LPC1766、LPC1768和LPC1769等。LPC1700系列Cortex-M3微控制器的操作頻率可達(dá)100MHz,其外設(shè)組件包含高達(dá)512KB的Flash存儲器、64KB的數(shù)據(jù)存儲器、以太網(wǎng)MAC、USB主機(jī)/從機(jī)/OTG接口、8通道的通用DMA控制器、4個UART、2條CAN通道、2個SSP控制器、SPI接口、3個I2C接口、2-輸入和2-輸出的I2S接口、8通道的12位ADC、10位DAC、電機(jī)控制PWM、正交編碼器接口、4個通用定時器、6-輸出的通用PWM、帶獨(dú)立電池供電的超低功耗RTC和多達(dá)70個的通用I/O引腳。
3.1.1LPC1700系列處理器特性
LPC1700系列處理器包括LPC1751~LPC1769等多款芯片,擁有豐富的片上資源和外設(shè)接口,這一系列芯片的共同特性有:
(1)
ARMCortex-M3微控制器,可在高至100MHz的頻率下運(yùn)行,并包含一個支持8個區(qū)的存儲器保護(hù)單元(MPU)。
(2)
ARMCortex-M3內(nèi)置了嵌套的向量中斷控制器(NVIC)。3.1LPC1700系列處理器簡介
(3)
具有在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)功能的512KB片上Flash程序存儲器。把增強(qiáng)型的Flash存儲加速器和Flash存儲器在CPU本地代碼/數(shù)據(jù)總線上的位置進(jìn)行整合,則Flash可提供高性能的代碼。
(4)
64KB片內(nèi)SRAM,包括32KBSRAM可供高性能CPU通過本地代碼或數(shù)據(jù)總線訪問及2個16KBSRAM模塊,帶獨(dú)立訪問路徑,可進(jìn)行更高吞量的操作。這些SRAM模塊可用于以太網(wǎng)、USB、DMA存儲器以及通用指令和數(shù)據(jù)存儲。
(5)多層AHB矩陣上具有8通道的通用DMA控制器,它可結(jié)合SSP、I2S、UART、模數(shù)和數(shù)模轉(zhuǎn)換器外設(shè)、定時器匹配信號和GPIO使用,并可用于存儲器到存儲器的傳輸。
(6)多層AHB矩陣內(nèi)部連接,為每個AHB主機(jī)提供獨(dú)立的總線。AHB主機(jī)包括CPU、通用DMA控制器、以太網(wǎng)MAC和USB接口。這個內(nèi)部連接特性提供無仲裁延遲的通信,除非2個主機(jī)嘗試同時訪問同一個從機(jī)。
(7)分離的APB總線允許在CPU和DMA之間提供更多的帶寬和更少的延遲。CPU無需等待APB寫操作完成。
(8)串行接口方面的共同特征包括:
①以太網(wǎng)MAC帶RMII接口和相關(guān)的DMA控制器。
②
USB2.0全速從機(jī)/主機(jī)/OTG控制器,帶有用于從機(jī)、主機(jī)功能的片內(nèi)PHY和相關(guān)的DMA控制器。
③
4個UART,帶小數(shù)波特率發(fā)生功能,內(nèi)部FIFO、DMA支持和RS-485支持。1個UART帶有Modem控制I/O并支持RS-485/EIA-485,全部的UART都支持IrDA。
④
CAN控制器,帶2個通道。
⑤
SPI控制器,具有同步、串行、全雙工通信和可編程的數(shù)據(jù)長度。
⑥
2個SSP控制器,帶有FIFO,可按多種協(xié)議進(jìn)行通信。其中一個可選擇用于SPI,并且和SPI共用中斷。SSP接口可以與GPDMA控制器一起使用。
⑦
3個增強(qiáng)型的I2C總線接口,其中1個具有開漏輸出功能,支持整個I2C規(guī)范和數(shù)據(jù)速率為1Mb/s的快速模式,另外2個具有標(biāo)準(zhǔn)的端口引腳。增強(qiáng)型特性包括多個地址識別功能和監(jiān)控模式。
⑧
I2S(Inter-ICSound)接口,用于數(shù)字音頻輸入或輸出,具有小數(shù)速率控制功能。I2S接口可與GPDMA一起使用。I2S接口支持3-線的數(shù)據(jù)發(fā)送和接收或4-線的組合發(fā)送和接收連接,以及主機(jī)時鐘輸入/輸出。
(9)其它外設(shè)方面的共同特點(diǎn)包括:
①
70個(100個引腳封裝)通用I/O(GPIO)引腳,帶可配置的上拉/下拉電阻。AHB總線上的所有GPIO可進(jìn)行快速訪問,支持新的、可配置的開漏操作模式;GPIO位于存儲器中,它支持Cortex-M3位帶寬并且由通用DMA控制器使用。
②
12位模數(shù)轉(zhuǎn)換器(ADC),可在8個引腳間實現(xiàn)多路輸入,轉(zhuǎn)換速率高達(dá)1MHz,并具有多個結(jié)果寄存器。12位ADC可與GPDMA控制器一起使用。
③
10位數(shù)模轉(zhuǎn)換器(DAC),具有專用的轉(zhuǎn)換定時器,并支持DMA操作。
④
4個通用定時/計數(shù)器,共有8個捕獲輸入和10個比較輸出。每個定時器模塊都具有一個外部計數(shù)輸入。可選擇特定的定時器事件來產(chǎn)生DMA請求。
⑤
1個電機(jī)控制PWM,支持三相的電機(jī)控制。
⑥正交編碼器接口,可監(jiān)控一個外部正交編碼器。
⑦
1個標(biāo)準(zhǔn)的PWM/定時器模塊,帶外部計數(shù)輸入。
⑧實時時鐘(RTC)帶有獨(dú)立的電源域。RTC通過專用的RTC振蕩器來驅(qū)動。RTC模塊包括20字節(jié)電池供電的備用寄存器,當(dāng)芯片的其它部分掉電時允許系統(tǒng)狀態(tài)存儲在該寄存器中。電池電源可由標(biāo)準(zhǔn)的3V鋰電池供電。當(dāng)電池電壓掉至2.1V的低電壓時,RTC仍將繼續(xù)工作。RTC中斷可將CPU從任何低功率模式中喚醒。
⑨看門狗定時器(WDT),該定時器的時鐘源可在內(nèi)部RC振蕩器、RTC振蕩器或APB時鐘三者間進(jìn)行選擇。
⑩支持ARMCortex-M3系統(tǒng)節(jié)拍定時器,包括外部時鐘輸入選項。
重復(fù)性的中斷定時器提供可編程和重復(fù)定時的中斷。
(10)標(biāo)準(zhǔn)JTAG測試/調(diào)試接口以及串行線調(diào)試和串行線跟蹤端口選項。
(11)仿真跟蹤模塊支持實時跟蹤。
(12)
4個低功率模式:睡眠、深度睡眠、掉電、深度掉電,可實現(xiàn)不同級別的低功耗和節(jié)電模式。
(13)
4個外部中斷輸入,可配置為邊沿/電平觸發(fā)。PORT0和PORT2上的所有引腳都可用作邊沿觸發(fā)的中斷源。
(14)不可屏蔽中斷(NMI)輸入。
(15)時鐘輸出功能,可反映主振蕩器時鐘、IRC時鐘、RTC時鐘、CPU時鐘或USB時鐘的輸出狀態(tài)。
(16)當(dāng)處于掉電模式時,可通過中斷(包括外部中斷、RTC中斷、USB活動中斷、以太網(wǎng)喚醒中斷、CAN總線活動中斷、PORT0/2引腳中斷和NMI)將處理器從掉電模式中喚醒。
(17)每個外設(shè)都自帶時鐘分頻器,以進(jìn)一步節(jié)省功耗。
(18)帶掉電檢測功能,可對掉電中斷和強(qiáng)制復(fù)位分別設(shè)置閾值。
(19)片內(nèi)有上電復(fù)位電路,降低了成本,節(jié)省了系統(tǒng)空間。
(20)片內(nèi)晶振工作頻率為1MHz~24MHz。
(21)
4MHz內(nèi)部RC振蕩器可在±1%的精度內(nèi)調(diào)整,可選擇用作系統(tǒng)時鐘。
(22)通過片內(nèi)PLL,沒有高頻晶振,CPU也可以最高頻率運(yùn)轉(zhuǎn)。用戶可從主振蕩器、內(nèi)部RC振蕩器或RTC振蕩器三者中選擇一個作為PLL時鐘源。
(23)第二個專用的PLL可用于USB接口,以允許增加主PLL設(shè)置的靈活性。
(24)可采用100腳和80腳LQFP封裝(14mm×14mm×1.4mm)。
表3.1LPC1700系列芯片的主要特性
在LPC1700系列芯片中,大多數(shù)特性是完全相同的。所以在后面的章節(jié)中,本書一律采用LPC1768芯片為例進(jìn)行講解,請讀者在實際工作中注意具體芯片的差別。3.1.2LPC1700系列處理器結(jié)構(gòu)
ARMCortex-M3包含三條AHB-Lite總線,即一條系統(tǒng)總線以及I-code和D-code總線,后二者的速率較快,且與TCM接口的用法類似:一條總線專用于指令取指(I-code),另一條總線用于數(shù)據(jù)訪問(D-code)。這兩條內(nèi)核總線的用法允許同時執(zhí)行操作,即使同時要對不同的設(shè)備目標(biāo)進(jìn)行操作。
LPC1700系列Cortex-M3微控制器使用多層AHB矩陣來連接上Cortex-M3總線,并以靈活的方式將其它總線主機(jī)連接到外設(shè),允許矩陣的不同從機(jī)端口上的外設(shè)可以同時被不同的總線主機(jī)訪問,從而能獲取到最優(yōu)化的性能。
APB外設(shè)使用多層AHB矩陣的獨(dú)立從機(jī)端口通過兩條APB總線連接到CPU。這減少了CPU和DMA控制器之間的爭用,可實現(xiàn)更好的性能。APB總線橋配置為緩沖區(qū)寫操作,使得CPU或DMA控制器無需等待APB寫操作結(jié)束。
AHB總線和APB總線都是ARM公司推出的AMBA片上總線規(guī)范的一部分。AHB(AdvancedHighperformanceBus)系統(tǒng)總線主要用于高性能模塊(如CPU、DMA和DSP等)之間的連接,一般用于片內(nèi)高性能、高速度的外設(shè),如外部存儲器、USB接口、DMA控制器、以太網(wǎng)控制器、LCD液晶屏控制器以及高速GPIO控制器等。
LPC1700的外設(shè)功能模塊都連接到APB(AdvancedPeripheralBus)總線。APB外圍總線主要用于低帶寬的周邊外設(shè)之間的連接,如UART、I2C、SPI、I2S、A/D、D/A、CAN等。APB總線與AHB總線之間通過AHB到APB的橋相連。
片內(nèi)外設(shè)與器件引腳的連接由引腳連接模塊控制。軟件可以通過控制該模塊讓引腳與特定的片內(nèi)外設(shè)相連接。
LPC1700的結(jié)構(gòu)框圖如圖3.1所示。
圖3.1LPC1700的結(jié)構(gòu)框圖
3.2.1引腳配置
LPC176x系列處理器共有100個引腳,一般提供LQFP引腳封裝形式。LPC176xFBD100處理器引腳封裝圖如圖3.2所示。3.2處理器引腳配置
圖3.2LPC176xFBD100處理器引腳封裝圖
LQFP指封裝本體厚度為1.4mm的薄型QFP(四側(cè)引腳扁平封裝QuadFlatPackage),它是一種表面貼裝型封裝,引腳從四個側(cè)面引出并呈L型,每個側(cè)面有25個引腳,引腳號分別為1~25、26~50、51~75、76~100。
從功能上講,LPC176x將引腳分為幾組32位的I/O口來進(jìn)行管理,它們分別是P0口、P1口、P2口、P3口、P4口,以及電源、復(fù)位、晶振和其它引腳幾部分。
采用I/O引腳分組的方式主要是為了與以前的LPC系列芯片保持兼容。表示某一具體的引腳,例如P/0口的第0號腳就可以采用P0[0]或P0.0的方式來表示。需要注意的是,5個I/O口分組,每個分組32個引腳,共160個引腳,大大超過了LPC176x的100個引腳數(shù)。因此在實際使用中,每個分組都有一些引腳是不能使用的,這點(diǎn)需要引起重視。
下面對這幾個部分分別進(jìn)行介紹。
(1)
P0口。P0口是一個32位的雙向多功能I/O口,每位的方向可單獨(dú)控制,且每位的功能取決于引腳連接模塊的引腳功能選擇。P0口的引腳12、13、14和31不可用。LPC176x的P0口引腳如表3.2所示。
表3.2LPC176x的P0口引腳續(xù)表一續(xù)表二續(xù)表三(2)
P1口。P1口也是一個32位的雙向多功能I/O口,每位的方向可單獨(dú)控制,且每位的功能取決于引腳連接模塊的引腳功能選擇。P1口引腳的P1.2、P1.3、P1.5、P1.6、P1.7、P1.11、P1.12和P1.13不可用。LPC176x的P1口引腳如表3.3所示。
表3.3LPC176x的P1口引腳描述續(xù)表一續(xù)表二(3)
P2口。P2口也是一個32位的雙向多功能I/O口,每位的方向可單獨(dú)控制,且每位的功能取決于引腳連接模塊的引腳功能選擇。P2口的引腳P2.14~P2.31不可用。LPC176x的P2口引腳如表3.4所示。
表3.4LPC176x的P2口引腳描述續(xù)表(4)
P3口。P3口也是一個32位的雙向多功能I/O口,每位的方向可單獨(dú)控制,且每位的功能取決于引腳連接模塊的引腳功能選擇。P3口的引腳P3.0~P3.24、P3.27~P3.31不可用。LPC176x的P3口引腳如表3.5所示。
表3.5LPC176x的P3口引腳描述
(5)
P4口。P4口也是一個32位的雙向多功能I/O口,每位的方向可單獨(dú)控制,且每位的功能取決于引腳連接模塊的引腳功能選擇。P4口的引腳P4.0~P4.27、P4.30和P4.31不可用。LPC176x的P4口引腳如表3.6所示。
表3.6LPC176x的P4口引腳描述(6)電源、復(fù)位、晶振及其它引腳的描述如表3.7所示。表3.7LPC1700的其它引腳描述續(xù)表3.2.2引腳連接模塊
從表3.1~表3.6可以看到,LPC1700系列芯片的絕大部分引腳是復(fù)用的,每根引腳都有可能用于不同的外設(shè)功能。引腳具體用于什么外設(shè)功能是由引腳連接模塊進(jìn)行配置來實現(xiàn)的。當(dāng)引腳選擇了一個功能時,則其它功能無效。
在使用外設(shè)時,應(yīng)當(dāng)在激活外設(shè)以及使能任何相關(guān)的中斷之前,將外設(shè)連接到相應(yīng)的引腳上。否則,即使使用引腳連接模塊激活外設(shè),此激活也是無效的。
引腳連接模塊共有21個寄存器,包括11個引腳功能選擇寄存器和10個引腳模式寄存器。
1.引腳功能選擇寄存器(PINSEL0~PINSEL10)
引腳功能選擇寄存器用于控制每個引腳的功能,每個寄存器32位,每兩個位用于控制1個引腳功能選擇。以PINSEL0寄存器為例,寄存器的[1:0]位用于控制P0[0]引腳,[3:2]位用于控制P0[1]引腳,[31:30]位用于控制P0[15]引腳。而PINSEL1寄存器的[1:0]位用于控制P0[16]引腳,[3:2]位用于控制P0[17]引腳,[31:30]位用于控制P0[31]引腳。其余依次類推。
PINSEL0~PINSEL9寄存器,每兩個寄存器用于一個端口組:PINSEL0寄存器用于P0口的[15:0]引腳,PINSEL1寄存器用于P0口的[31:30]引腳;PINSEL2寄存器用于P1口的[15:0]引腳,PINSEL3寄存器用于P1口的[31:30]引腳;PINSEL4寄存器用于P2口的[15:0]引腳,PINSEL5寄存器用于P2口的[31:30]引腳;PINSEL6寄存器用于P3口的[15:0]引腳,PINSEL7寄存器用于P3口的[31:30]引腳;PINSEL8寄存器用于P4口的[15:0]引腳,PINSEL9寄存器用于P4口的[31:30]引腳。
每一對比特設(shè)置引腳功能的定義如表3.8所示。
表3.8引腳功能選擇寄存器位每個引腳默認(rèn)為GPIO口,通過設(shè)置PINSEL的值來定義其引腳功能。以P0[0]腳為例,當(dāng)PINSEL0寄存器的[1:0]位為00時,引腳功能為GPIO口;為01時,引腳功能為CAN1接收器輸入;為10時,引腳功能為UART3發(fā)送輸出端;為11時,引腳功能為I2C1數(shù)據(jù)輸入/輸出。表格中的引腳功能按PINSEL值排列。某些引腳只有兩種功能,此時只使用PINSEL值00和01,值10和11保留。
PINSEL10寄存器為TPIU接口引腳控制寄存器。該寄存器只使用了一個位3,用于控制P2.2~P2.6的跟蹤功能。該位為0時TPIU接口被禁能,為1時TPIU接口被使能。TPIU信號在對它們進(jìn)行控制的引腳上可用,不管PINSEL4的內(nèi)容如何。
引腳功能被選擇為GPIO時,引腳的方向由GPIO方向寄存器IODIR控制。對于其它功能,引腳的方向是由引腳功能控制的。需要注意的是:由于LPC1700系列的分組引腳中有多個引腳塊并未使用,所以寄存器PINSEL5、PINSEL6、PINSEL8并未啟用,所有位均為保留位。其余的未啟用引腳對應(yīng)的PINSEL控制位也均保留。
2.引腳模式寄存器(PINMODE0~PINMODE9)
引腳模式寄存器PINMODE為所有的GPIO端口控制片內(nèi)上拉/下拉電阻特性。當(dāng)使用片內(nèi)上拉或下接電阻時,若引腳信號不確定,使用上拉時為高電平;而使用下拉時為低電平。除了用于I2C0接口的I2C引腳和USB引腳,不管該引腳選擇用于何種功能,都可以為每一個端口引腳選擇片內(nèi)上拉/下拉電阻。使用三個位來控制端口引腳的模式,其中兩個位于PINMODE寄存器中,另一個位于PINMODE_OD寄存器中。在PINSEL寄存器中未使用的引腳看做保留位。與PINSEL寄存器一樣,PINMODE寄存器每兩個位控制1個引腳。每兩個寄存器控制一個端口組。
表3.9引腳模式寄存器位當(dāng)引腳處于邏輯高電平時,中繼模式使能上拉電阻;當(dāng)引腳處于邏輯低電平時,使能下拉電阻。當(dāng)引腳配置為輸入且不是通過外部驅(qū)動時,引腳將保持上一個已知狀態(tài)。
PINMODE_OD寄存器控制端口的開漏模式。當(dāng)引腳被配置為輸出且值為0時,開漏模式會正常地將引腳電平拉低。但是,如果輸出引腳值為1,則引腳的輸出驅(qū)動關(guān)閉,等同于改變了引腳的方向。這樣的組合就模擬了一個開漏輸出。開漏引腳模式選擇寄存器取值如表3.10所示。
表3.10開漏引腳模式選擇寄存器位注意:引腳選擇模式不能用于引腳P0.27~P0.30。引腳P0.27和P0.28為專用的I2C開漏引腳,沒有上拉/下拉。引腳P0.29、P0.30為USB特定的引腳,不能配置為上拉或下拉電阻控制。引腳P0.29、P0.30還必須具有相同的方向,因為它們是作為USB功能的單元進(jìn)行操作的。
表3.11引腳控制模塊的寄存器總表3.2.3引腳連接模塊的使用舉例
LPC1700系列芯片的外設(shè)功能在使用前必須先設(shè)置其引腳功能。引腳功能是通過對引腳連接模塊編程來實現(xiàn)的。
例3.1
使用串口UART0完成本例。
串口UART0只使用TXD0和RXD0兩根引腳來進(jìn)行數(shù)據(jù)的串行發(fā)送和接收,使用時需將對應(yīng)的兩根引腳P0[2]和P0[3]設(shè)置成TXD0和RXD0功能。查表3.1可知,兩根引腳的對應(yīng)PINSEL值均為01,因此寫入PINSEL0寄存器的值為0x00000050。相應(yīng)程序行為
PINSEL0=0x00000050;
或
PINSEL0=0x05<<4;
注意,由于PINSEL是可讀寫的寄存器,上述寫法會使其它引腳的功能回到初始化默認(rèn)配置。為了不影響其它引腳的功能配置,實用中更好的辦法是:先讀取寄存器值,然后進(jìn)行邏輯與和邏輯或操作,再回寫到寄存器。
PINSEL0=(PINSEL0&0xFFFFFF0F)|(0x05<<4);
其余的引腳外設(shè)功能均可以采用類似方法進(jìn)行操作。
例3.2
啟動代碼中的相關(guān)部分。
啟動代碼負(fù)責(zé)對芯片復(fù)位后的硬件功能進(jìn)行初始化。芯片復(fù)位時,各PINSEL寄存器會自動設(shè)置為默認(rèn)值,所以復(fù)位后芯片引腳的功能是確定的。如果啟動以后,硬件系統(tǒng)各外設(shè)功能使用情況比較固定,可以將對應(yīng)的引腳功能設(shè)置寫入啟動代碼以加快啟動速度。否則,可以在啟動時將所有引腳都配置成GPIO端口,具體使用某部分外設(shè)時再對相關(guān)引腳進(jìn)行初始化。相應(yīng)的程序行為
PINSEL0=0x00000000;
PINSEL1=0x00000000;
PINSEL2=0x00000000;
PINSEL3=0x00000000;
PINSEL4=0x00000000;
PINSEL5=0x00000000;
PINSEL6=0x00000000;
PINSEL7=0x00000000;
PINSEL8=0x00000000;
PINSEL9=0x00000000;
PINSEL10=0x00000000;
LPC1700系列芯片集成了512KB的片內(nèi)Flash存儲器和64KB的靜態(tài)SRAM,其中Flash存儲器可以用作代碼和數(shù)據(jù)的固態(tài)存儲。對Flash存儲器的編程可以通過以下方法來實現(xiàn):通過串口UART0進(jìn)行的在系統(tǒng)編程(ISP),通過調(diào)用嵌入片內(nèi)的固化代碼進(jìn)行的在應(yīng)用編程(IAP)以及通過內(nèi)置的JTAG接口編程。3.3存?儲?器?管?理
SRAM支持8位、16位和32位訪問。需要注意的是,SRAM控制器包含一個回寫緩沖區(qū),它用于防止CPU在連續(xù)的寫操作時停止運(yùn)行?;貙懢彌_區(qū)總是保存著軟件發(fā)送到SRAM的最后1字節(jié)。數(shù)據(jù)只有在軟件執(zhí)行另外一次寫操作時被寫入SRAM。如果發(fā)生芯片復(fù)位,實際的SRAM內(nèi)容將不會反映最近一次的寫請求。任何在復(fù)位后檢查SRAM內(nèi)容的程序都必須注意這一點(diǎn)。
LPC1700系列Cortex-M3微控制器含有一個4GB的地址空間,表3.12所示為LPC1700系列Cortex-M3微控制器的存儲器分布。
表3.12LPC1700系列芯片的存儲器空間分布
圖3.3LPC1700系統(tǒng)存儲器映射在LPC1700系列芯片的外設(shè)空間中,AHB外設(shè)區(qū)域為2MB,可分配多達(dá)128個外設(shè)。APB外設(shè)區(qū)域為1MB,可分配多達(dá)64個外設(shè)。每個外設(shè)空間大小都為16KB,這樣可簡化每個外設(shè)的地址譯碼。
此外,所有外設(shè)寄存器不管規(guī)格大小,都按照字地址進(jìn)行分配(32位邊界)。這樣就不再需要使用字節(jié)定位映射的硬件來進(jìn)行小邊界的字節(jié)(8位)或半字(16位)訪問。字和半字寄存器都是一次性訪問的。例如,不能對一個字寄存器的最高字節(jié)執(zhí)行單獨(dú)的讀或?qū)懖僮鳌F瑑?nèi)外設(shè)中,AHB總線屬于高速外設(shè),主要使用的有以太網(wǎng)、DMA和USB設(shè)備。其余普通外設(shè)使用APB總線,LPC1700將APB設(shè)備分為了APB0和APB1兩組,兩個組的外設(shè)空間分配見表3.13和表3.14。
表3.13APB0外設(shè)存儲器映射在對LPC1700系列芯片編程時,注意不要對一個保留地址或未使用區(qū)域的地址進(jìn)行尋址,否則LPC1700將產(chǎn)生一個數(shù)據(jù)中止異常。另外,對AHB或APB外設(shè)地址執(zhí)行任何指令取指都會產(chǎn)生預(yù)取指中止異常。
表3.14APB1外設(shè)存儲器映射
3.4.1晶體振蕩器
LPC1700含有3個獨(dú)立的晶體振蕩器:內(nèi)部RC晶振、主晶振和RTC晶振。每個晶振針對不同應(yīng)用需求有多種使用方法。3.4時鐘和功率控制復(fù)位后,LPC1700系列處理器使用內(nèi)部RC晶振提供時鐘進(jìn)行操作,直到使用軟件進(jìn)行切換為止。這使得系統(tǒng)可以不依賴于外部時鐘進(jìn)行操作,而且使引導(dǎo)加載程序可以在一個確定的頻率下進(jìn)行操作。當(dāng)BootROM轉(zhuǎn)向用戶程序之前,可以激活主晶振從而進(jìn)入用戶代碼。
1.內(nèi)部晶體振蕩器(IRC,InternalRCOscillator)
IRC可以用作看門狗定時器的時鐘源,也可以作為時鐘,驅(qū)動PLL鎖相環(huán)提供給CPU。IRC的精度達(dá)不到USB接口的時間基準(zhǔn)精度要求(USB接口需要一個更精確的時間基準(zhǔn)以遵循USB規(guī)范)。如果CAN波特率高于100kb/s,則IRC不能應(yīng)用于CAN1/2模塊。通常的IRC頻率是4MHz。
在開機(jī)或芯片復(fù)位時,LPC1700使用IRC作為時鐘源,之后可以使用軟件轉(zhuǎn)為使用其它時鐘源。
2.主晶振(MainOscillator)
主晶振可用于為CPU提供時鐘,其頻率范圍為1MHz~24MHz。這個頻率可以通過主PLL鎖相環(huán)(PLL0)倍頻為更高的頻率成為CPU的主頻,最高可以達(dá)到CPU操作頻率的最大值。通常把主晶振輸出的時鐘稱為OSCCLK,PLL0輸入引腳上的時鐘稱為PLLCLKIN,ARMCortex-M3處理器內(nèi)核時鐘頻率稱為CCLK。當(dāng)使用主晶振提供時鐘而不激活PLL時,這三個值是相等的。
圖3.4振蕩器模式由于芯片復(fù)位時使用IRC晶振,主晶振由軟件啟動(使用SCS寄存器中的OSCEN位),并且在某些應(yīng)用中始終不會用到。通過SCS寄存器中的OSCSTAT狀態(tài)位可以使軟件判斷主晶振是否運(yùn)行和穩(wěn)定,也可以通過SCS寄存器中的OSCRANGE位設(shè)置其頻率范圍。
LPC1700的振蕩器可工作在從屬模式和振蕩模式下。在從屬模式下,輸入時鐘信號XTAL1與一個100pF相連,其幅值不少于200mV,XTAL2引腳不連接。在振蕩模式下,由于片內(nèi)集成了反饋電阻,只需在外部連接一個晶體和電容Cx1、Cx2就可形成基本模式的振蕩。3.RTC晶振(RTCOscillator)
RTC晶振的頻率為32.768kHz,一般用于給RTC實時時鐘提供時鐘源。RTC晶振也可以用于看門狗定時器,通過驅(qū)動PLL0也可以用于提供CPU主頻。
4.時鐘源選擇
幾個時鐘源都可以用來驅(qū)動PLL0,通過PLL0給CPU和片內(nèi)外設(shè)提供時鐘。當(dāng)PLL0未連接時,系統(tǒng)可以通過CLKSRCSEL寄存器安全地改變時鐘源。注意:IRC振蕩器不應(yīng)用作(通過PLL0)USB子系統(tǒng)的時鐘源;如果CAN波特率高于100kb/s,則IRC振蕩器不應(yīng)用作(通過PLL0)CAN控制器的時鐘源。時鐘源選擇寄存器(CLKSRCSEL–0x400FC10C)如表3.15所示。
表3.15時鐘源選擇寄存器3.4.2PLL0鎖相環(huán)
PLL0接受輸入的時鐘頻率范圍為32kHz~50MHz。時鐘源在CLKSRCSEL寄存器中選擇。PLL將輸入時鐘升頻,然后再分頻以提供給CPU、外設(shè)或USB子系統(tǒng)使用的實際時鐘。需要注意的是,USB子系統(tǒng)有其自身特定的PLL1。PLL0可產(chǎn)生的時鐘頻率高達(dá)100MHz,是CPU所允許的最大值。
PLL的輸入頻率首先通過一個預(yù)分頻器分頻成為PLL內(nèi)部頻率,預(yù)分頻器的值用變量“N”表示,“N”值的范圍可以為1~256。這樣,輸入分頻在相同的輸入頻率下,就可以提供更多種可能的輸出頻率范圍。
PLL倍頻器的操作在PLL輸入分頻器之后進(jìn)行。通過一個電流控制振蕩器(CCO)倍增到范圍275MHz~550MHz,倍頻器的值用變量“M”表示,“M”值的范圍可以為6~512。注意:產(chǎn)生的頻率必須在275MHz~550MHz頻率范圍內(nèi),所以要仔細(xì)地選擇M的取值。倍頻器操作是先使用M值分頻CCO輸出,然后使用相位-頻率檢測器將分頻后的CCO輸出與倍頻器輸入相比較,根據(jù)誤差輸出不同的電流值來控制CCO的振蕩頻率。
CCO頻率再通過CPU頻率設(shè)置寄存器分頻,使其頻率下降到CPU、外設(shè)和USB子系統(tǒng)所需要的值,成為提供給CPU的CCLK、APB外設(shè)的PCLK時鐘。
PLL0的方框圖見圖3.5。
圖3.5PLL0方框圖
PLL0的激活由PLL0CON控制寄存器進(jìn)行控制,PLL倍頻器和分頻器的值由PLL0CFG配置寄存器進(jìn)行配置。為了防止PLL參數(shù)發(fā)生改變或失效,對這兩個寄存器進(jìn)行了保護(hù)。當(dāng)PLL提供芯片時鐘時,由于芯片的所有操作,包括看門狗定時器在內(nèi)都可能依賴于PLL0,因此PLL0設(shè)置的意外改變將導(dǎo)致CPU執(zhí)行不期望的動作。保護(hù)是通過一個特定的代碼序列來實現(xiàn)的,該代碼序列由PLL0FEED寄存器實現(xiàn)。
PLL0在系統(tǒng)進(jìn)入掉電模式時會自動關(guān)閉并斷開。PLL0必須通過軟件配置、使能和連接到系統(tǒng)。對PLL0的所有操作要按照PLL0設(shè)置序列中的設(shè)置步驟來進(jìn)行,否則PLL可能不操作。當(dāng)在用戶Flash中沒有有效代碼(由校驗和字段決定)或在啟動時拉低ISP使能引腳(P2.10)時,芯片將進(jìn)入ISP模式并且引導(dǎo)代碼將用IRC設(shè)置PLL。因此,當(dāng)用戶啟動JTAG來調(diào)試應(yīng)用代碼時,不能假設(shè)PLL被禁能。用戶啟動代碼必須斷開與PLL的連接。
1.PLL0控制寄存器-PLL0ControlRegister(PLL0CON–0x400FC080)
PLL0CON控制寄存器可用于使能和連接PLL0,它是最新的PLL0控制位的保持寄存器,寫入該寄存器的值在有效的PLL0饋送序列執(zhí)行之前不起作用。使能PLL0可使PLL0鎖定到當(dāng)前倍頻器和分頻器值的設(shè)定頻率上。連接PLL0可使處理器和所有片內(nèi)功能都根據(jù)PLL0輸出時鐘來運(yùn)行。對PLL0CON的更改只有在對PLL0FEED寄存器執(zhí)行了正確的PLL饋送序列后才生效。PLL控制寄存器如表3.16所示。
表3.16PLL控制寄存器
PLL0在作為時鐘源之前必須進(jìn)行設(shè)置、使能并鎖定。當(dāng)PLL時鐘源從振蕩器時鐘切換到PLL0輸出或反過來操作時,內(nèi)部電路對操作進(jìn)行同步以確保不會產(chǎn)生干擾。在PLL0鎖定后,需要軟件來進(jìn)行連接,硬件是不會主動完成PLL0連接的。此外,PLL0脫離鎖定狀態(tài)時,硬件是不會主動斷開PLL0連接的;這時振蕩器很可能已變得不穩(wěn)定,此時斷開PLL0也沒用了。
2.PLL0配置寄存器-PLL0ConfigurationRegister(PLL0CFG–0x400FC084)
PLL0配置寄存器是最新的PLL0配置值的保持寄存器,包含PLL0倍頻器和分頻器值。在執(zhí)行正確的PLL0饋送序列之前改變PLL0CFG寄存器的值不會生效。PLL0配置寄存器如表3.17所示。
表3.17PLL0配置寄存器3.PLL0狀態(tài)寄存器-PLL0StatusRegister(PLL0STAT–0x400FC088)
PLLSTAT0為只讀寄存器,它是PLL0控制和配置信息的讀回寄存器,反映了正在使用的真實PLL0參數(shù)和狀態(tài)。PLL0STAT可能與PLL0CON和PLL0CFG中的值不同,這是因為沒有執(zhí)行正確的PLL0饋送序列,這兩個寄存器中的值并未生效。PLL狀態(tài)寄存器如表3.18所示。
PLL0STAT寄存器的PLOCK0位反映PLL0的鎖定狀態(tài)。當(dāng)使能PLL0或改變參數(shù)時,PLL0在新的條件下需要一些時間來完成鎖定,可通過監(jiān)控PLOCK0位來確定連接PLL0的時間。當(dāng)PLL參考頻率小于100kHz或大于20MHz時,PLOCK0的值可能不穩(wěn)定,這時可假設(shè)PLL啟動后經(jīng)過一段時間即穩(wěn)定下來。
表3.18PLL狀態(tài)寄存器
PLOCK0位連接到中斷控制器。這樣可使用軟件使能PLL0,而無需等待PLL0鎖定。當(dāng)發(fā)生中斷時,可以連接PLL0并禁止中斷。
PLL0有3種可能的工作模式,由PLLE0和PLLC0組合得到。PLL0的工作模式如表3.19所示。
表3.19PLL0的工作模式4.PLL0饋送寄存器-PLL0FeedRegister(PLL0FEED–0x400FC08C)
必須將正確的饋送序列寫入PLL0FEED寄存器才能使PLL0CON和PLL0CFG寄存器的更改生效。饋送序列如下:
(1)將值0xAA寫入PLL0FEED。
(2)將值0x55寫入PLL0FEED。
這兩個寫操作的順序必須正確,并且必須是連續(xù)的APB總線周期,這意味著在執(zhí)行PLL0饋送操作時必須禁止中斷。不管是寫入的值不正確還是沒有滿足前兩個條件,對PLL0CON或PLL0CFG寄存器的更改都不會生效。PLL0饋送寄存器如表3.20所示。
表3.20PLL0饋送寄存器5.PLL0和掉電模式
掉電模式會自動關(guān)閉并斷開PLL0。從掉電模式喚醒不會自動恢復(fù)PLL0的設(shè)定,PLL0的恢復(fù)必須由軟件來完成。通常,一個將PLL0激活并等待鎖定然后將PLL0連接的子程序可以在喚醒中斷的中斷服務(wù)程序開頭部分調(diào)用,從而重新啟動PLL0。有一點(diǎn)非常重要,PLL0的重啟過程要完整,不要試圖在掉電喚醒之后簡單地執(zhí)行饋送序列來重新啟動PLL0,否則會出現(xiàn)在PLL0鎖定建立之前同時使能并連接PLL0的危險。
6.PLL0頻率計算舉例
當(dāng)一個LPC1700Cortex-M3系統(tǒng)需要使用PLL0時,應(yīng)當(dāng)按照以下原則進(jìn)行:
(1)確定是否需使用USB以及是否由PLL0驅(qū)動。USB要求一個占空比為50%
的
48MHz時鐘源,也就是說,F(xiàn)CCO必須是48MHz的偶數(shù)整數(shù)倍(即96MHz的整數(shù)倍),誤差范圍極小。
(2)確定處理器的時鐘頻率CCLK。這可以根據(jù)系統(tǒng)對處理器的整體要求來決定,取決于處理器的吞吐量要求、所支持的特定的UART波特率等。外圍器件的時鐘頻率可以低于處理器頻率。
(3)找出與所需FCCLK的倍數(shù)接近的一個FCCO值,再與步驟(1)中USB所要求的FCCO值相比較。FCCO的值應(yīng)當(dāng)在275MHz~550MHz之間,而且應(yīng)當(dāng)是CCLK的整數(shù)倍。盡量選擇較低的FCCO值,這樣處理器功耗會更低。
(4)確定晶體振蕩器頻率FIN。FIN的值應(yīng)當(dāng)在32kHz~50MHz之間。這可從主振蕩器、RTC振蕩器或片內(nèi)RC振蕩器中選擇。
使用USB功能時,需選擇主振蕩器。如果使用PLL1而不是PLL0來驅(qū)動USB子系統(tǒng),會影響選擇主振蕩器的頻率。
PLL的輸出頻率公式為
FCCO=
選擇兩個整數(shù)M和N便可得到合適的FCCO值。M的取值范圍為6~512,N的取值范圍為1~32。
總的來說,建議使用一個較小的N值,這樣可以降低FCCO的倍頻數(shù)。由于在某些情況下很難找到最好的值,因此可以使用電子數(shù)據(jù)表或類似的方法來立即獲得多種可能的值,再從中選擇出一個最好的值。有關(guān)這方面的電子數(shù)據(jù)表可從NXP公司獲取。例3.3假設(shè):在應(yīng)用中使用USB接口并且由PLL0驅(qū)動。在PLL操作范圍(275MHz~550MHz)內(nèi),96MHz的最小整數(shù)倍頻值為288MHz,預(yù)期的CPU速率為60MHz,使用外部4MHz晶振作為系統(tǒng)時鐘源。
計算:
M=
如果N=1,這時將產(chǎn)生PLL0所需的最小倍頻值,則M
=
288
×
106/(2
×
4
×
106)
=
36。因為結(jié)果是整數(shù),所以沒有必要進(jìn)一步找出一系列更好的PLL0配置值。寫入PLL0CFG的值為0x23(N
-
1
=
0;M
-
1=35
=
0x23)。所需的FCCLK可以通過分頻FCCO(288
×
106/60
×
106
=
4.8)來確定。能產(chǎn)生最接近所需值FCCLK的分頻整數(shù)值為5,從而獲得實際的FCCLK為57.6MHz。
如果一定要獲得準(zhǔn)確的60MHz頻率,那么FCCLK必須能夠被分頻為48MHz和60MHz。此時,只有令FCCO
=
480
MHz,才能滿足要求。通過10分頻,得到USB子系統(tǒng)所需的占空比為50%的48MHz頻率;通過8分頻,得到60MHz的CPU時鐘。令FCCO為480MHz的PLL0設(shè)置參數(shù)是N
=
1和M
=
60。例3.4假設(shè):在應(yīng)用中將不使用USB接口,預(yù)期的CPU速率為72MHz,使用
32.768kHzRTC作為系統(tǒng)時鐘源。
計算:
要產(chǎn)生所需的FCCLK為72
MHz,而在PLL0的可操作范圍內(nèi),能使用的最小FCCO為288MHz(4
×
72MHz)。假設(shè)N
=
1,產(chǎn)生PLL所需的最小倍頻值。因此,M
=
288
×
106/(2
×
32
768)
=4394.531
25。由于這不是一個整數(shù),所以我們并不能得到一個非常精確的288MHz頻率。我們需要定制一個表格,將不同的結(jié)果表示出來,詳情參見表3.21。
表3.21PLL可能的取值若N
=
6,則M的值會超出范圍,因此N只能取1~5。在表3.21中,計算出的M值被舍入為最接近的整數(shù),以使CPU實際頻率在最大操作頻率(72MHz)的
±0.5%
范圍內(nèi)。
總的來說,當(dāng)PLL輸入為低頻時鐘信號時,參考頻率值FREF
=
FIN/N越大,PLL越穩(wěn)定??紤]PLL的穩(wěn)定性,表格的第一項是最佳選擇;考慮時鐘精度,表格的第二項是最佳選擇。如果PLL0計算建議使用不支持的倍頻值,則必須忽略這些值并檢查其它值以找出最適合的值。從計數(shù)值中計數(shù)所得的倍頻值也可能是好的選擇。
對于表的第二項,寫入PLL0CFG的值將會是0x12254(N
-
1
=
1
=
0x1;M
-
1
=
8788
=0x2254)。
7.PLL0設(shè)置步驟
要對PLL0進(jìn)行正確初始化,須按照下列步驟操作:
(1)如果PLL0已被連接,則用一個饋送序列斷開與PLL0的連接。
(2)用一個饋送序列禁止PLL0。
(3)如果需要,可在沒有PLL0的情況下改變CPU時鐘分頻器的設(shè)置以加速操作。
(4)操作時鐘源選擇控制寄存器CLKSRCSEL以改變時鐘源。
(5)寫PLL0CFG并用一個饋送序列使其有效。PLL0CFG只能在PLL0被禁止時更新。
(6)用一個饋送序列使能PLL0。
(7)改變CPU時鐘分頻器設(shè)置,使之與PLL0一起操作。在連接PLL0之前完成這個操作是很重要的。
(8)通過監(jiān)控PLL0STAT寄存器的PLOCK0位,或使用PLOCK0中斷來等待PLL0實現(xiàn)鎖定。此外,當(dāng)使用低頻時鐘作為PLL0的輸入時(也就是32kHz),需要等待一個固定的時間。當(dāng)PLL參考頻率FREF小于100kHz或大于20MHz時,PLOCK0的值可能不穩(wěn)定。在這些情況下,啟動PLL后等待一段時間即可。當(dāng)FREF大于400kHz時,這個時間為500μs;當(dāng)FREF少于400kHz時,這個時間為200/FREF秒。
(9)用一個饋送序列連接PLL0。
需要注意的是不要合并上面的任何一個步驟。例如,不能用相同的饋送序列同時更新PLL0CFG和使能PLL0。
8.PLL1(鎖相環(huán)1)
PLL1僅接受主振蕩器的時鐘輸入,并且為USB子系統(tǒng)提供一個固定的48MHz時鐘。除了從PLL0產(chǎn)生USB時鐘外,這是產(chǎn)生USB時鐘的另一種選擇。
PLL1在復(fù)位時禁止和掉電。如果PLL1保持禁止,那么可以由PLL0提供USB時鐘;如果PLL1通過PLL1CON寄存器使能和連接,那么自動選擇PLL1來驅(qū)動USB子系統(tǒng)。
PLL1CON寄存器控制PLL1有效。PLL1CFG寄存器配置PLL1倍頻器和分頻器的值。為了避免程序?qū)LL1正在使用的相關(guān)參數(shù)被修改或失效,芯片廠商對這兩個寄存器進(jìn)行了保護(hù)。該保護(hù)由PLL1FEED寄存器的饋送序列來實現(xiàn)。
PLL1僅支持10MHz~25MHz范圍內(nèi)的輸入時鐘頻率。該輸入頻率通過使用電流控制振蕩器(CCO)可升頻為48MHz的USB時鐘。倍頻值可以是1~32的整數(shù)值(對于USB,倍頻值不能高于4)。CCO的操作范圍為156MHz~320MHz,因此當(dāng)PLL1正在提供所需的輸出頻率時,環(huán)路中有一個額外的分頻器使CCO保持在其頻率范圍內(nèi)操作。輸出分頻器可設(shè)為由2、4、8或16分頻來產(chǎn)生輸出時鐘。由于最小的輸出分頻值為2,因此確保PLL1輸出有50%占空比。
PLL1的寄存器PLL1CON、PLL1CFG、PLL1STAT、PLL1FEED的使用方式均與PLL0類似,在此不再贅述。需要使用PLL1時請查閱LPC1700的芯片手冊。3.4.3時鐘分頻
PLL0的輸出必須向下分頻為更低頻率的信號才能用于CPU和USB模塊。提供給USB模塊的分頻器是獨(dú)立的,因為USB的時鐘要求必須是準(zhǔn)確的48MHz而且有50%的占空比。分頻給CPU的信號成為CCLK時鐘,并且再分頻成為各個片內(nèi)外設(shè)的驅(qū)動時鐘。LPC1700時鐘分頻器示意圖如圖3.6所示。
圖3.6LPC1700時鐘分頻器示意圖
1.CPU時鐘配置寄存器-CPUClockConfigurationRegister(CCLKCFG–0x400FC104)
CCLKCFG寄存器控制PLL0的分頻輸出提供給CPU。如果不使用PLL0,分頻值為1。當(dāng)PLL0正在運(yùn)行時,輸出必須經(jīng)過分頻以使CPU時鐘頻率(CCLK)工作在限定的范圍內(nèi)。可使用一個8位分頻器進(jìn)行選擇,包括降低CPU的操作頻率來暫時節(jié)省功耗而無需關(guān)閉PLL0。CPU時鐘配置寄存器如表3.22所示。
表3.22CPU時鐘配置寄存器CCLK的值為PLL0的輸出頻率除以CCLKSEL+1。當(dāng)CCLKSEL值為1時,CCLK值為PLL0輸出頻率的一半。
2.USB時鐘配置寄存器-USBClockConfigurationRegister(USBCLKCFG–0x400FC108)
USBCLKCFG寄存器控制PLL0的分頻輸出提供給USB模塊。如果不使用PLL0,分頻值為1。輸出的頻率應(yīng)該為48MHz并且有50%的占空比。在PLL操作范圍內(nèi),4位的分頻器允許從48MHz的任意偶數(shù)倍(96MHz的任意倍數(shù))中獲得正確的USB時鐘。
該寄存器僅在PLL1禁止時使用。如果PLL1使能,則其輸出自動用作USB時鐘源,且必須配置PLL1為USB子系統(tǒng)提供正確的48MHz時鐘。USB時鐘配置寄存器如表3.23所示。
表3.23USB時鐘配置寄存器USB模塊的時鐘值為PLL的輸出頻率除以USBSEL+1。當(dāng)USBSEL值為1時,USB時鐘值為PLL0輸出頻率的一半。
3.IRC整理寄存器-IRCTrimRegister(IRCTRIM-0x400FC1A4)
這個寄存器用于整理片內(nèi)4MHz的晶振。IRC整理寄存器如表3.24所示。
表3.24IRC整理寄存器4.外設(shè)時鐘選擇寄存器0和1-PeripheralClockSelectionregisters0and1(PCLKSEL0–0xE01FC1A8andPCLKSEL1–0x400FC1AC)
這一對寄存器中的每兩位控制一個外設(shè)的時鐘,其取值意義參見表3.25和表3.26。
表3.25外設(shè)時鐘選擇寄存器0表3.26外設(shè)時鐘選擇寄存器1續(xù)表
表3.27外設(shè)時鐘選擇寄存器位值3.4.4功率控制
1.節(jié)電模式
嵌入式系統(tǒng)一般使用電池供電,因此系統(tǒng)的耗電和待機(jī)時間是個重要指標(biāo)。節(jié)電的方法主要是降低系統(tǒng)時鐘頻率,即改變時鐘源、重配置PLL值或者改變CPU時鐘分頻值,這允許用戶根據(jù)應(yīng)用要求在功率和處理速度之間進(jìn)行權(quán)衡。另外,也可以通過停止片內(nèi)外設(shè)時鐘的方法來關(guān)閉不使用的片內(nèi)外設(shè),進(jìn)一步降低功耗。
LPC1700系列Cortex-M3處理器支持多種功率控制的模式,這些模式包括睡眠模式、深度睡眠模式、掉電模式和深度掉電模式。通過Cortex-M3執(zhí)行WFI(等待中斷)或WFE(等待異常)指令進(jìn)入任何低功耗模式。Cortex-M3內(nèi)部支持兩種低功耗模式,即睡眠模式和深度睡眠模式,它們通過Cortex-M3系統(tǒng)控制寄存器中的SLEEPDEEP位來選擇。掉電模式和深度掉電模式通過PCON寄存器中的位來選擇。
LPC1700系列Cortex-M3還具有一個獨(dú)立電源域,可為RTC和電池RAM供電,以便在維持RTC和電池RAM正常操作時關(guān)閉其它設(shè)備的電源。
1)睡眠模式
LPC1700系列Cortex-M3處理器的睡眠模式對應(yīng)于LPC2xxx系列ARM器件的空閑模式。更改名字是因為ARM將低功耗模式控制與Cortex-M3結(jié)合起來了。
當(dāng)進(jìn)入睡眠模式時,內(nèi)核時鐘停止,且PCON的SMFLAG位置位。從睡眠模式中恢復(fù)并不需要任何特殊的序列,但要重新使能ARM內(nèi)核的時鐘。
在睡眠模式下,指令的執(zhí)行被中止直至復(fù)位或中斷出現(xiàn)。外設(shè)在CPU內(nèi)核處于睡眠模式期間繼續(xù)運(yùn)轉(zhuǎn),并可產(chǎn)生中斷使處理器恢復(fù)執(zhí)行指令。睡眠模式下,處理器內(nèi)核自身、存儲器系統(tǒng)、有關(guān)控制器及內(nèi)部總線停止工作,因此這些器件的動態(tài)功耗會降低。
只要出現(xiàn)任何使能的中斷,CPU內(nèi)核就會從睡眠模式中喚醒。
2)深度睡眠模式
LPC1700系列Cortex-M3處理器的深度睡眠模式對應(yīng)于LPC2300和LPC2400系列ARM器件的睡眠模式。
當(dāng)芯片進(jìn)入深度睡眠模式時,主振蕩器掉電且所有內(nèi)部時鐘停止,PCON的DSFLAG位置位。IRC保持運(yùn)行并且可配置為驅(qū)動看門狗定時器,允許看門狗喚醒CPU。由于RTC中斷也可用作喚醒源,32kHz的RTC振蕩器不停止。Flash進(jìn)入就緒模式,這樣可以實現(xiàn)快速喚醒。PLL自動關(guān)閉并斷開連接。CCLK和USBCLK時鐘分頻器自動復(fù)位為0。在深度睡眠模式期間,保存處理器狀態(tài)以及寄存器、外設(shè)寄存器和內(nèi)部SRAM的值,并將芯片引腳的邏輯電平保持為靜態(tài)??赏ㄟ^復(fù)位或某些特定中斷(能夠在沒有時鐘的情況下工作)來終止深度睡眠模式和恢復(fù)正常操作。由于芯片的所有動態(tài)操作被中止,因此深度睡眠模式使功耗降低為一個極小的值。
在喚醒深度睡眠模式時,如果IRC在進(jìn)入深度睡眠模式前被使用,則2位IRC定時器開始計數(shù),并且在定時器超時(4周期)后,恢復(fù)代碼執(zhí)行和外設(shè)活動。如果使用主振蕩器,則12位主振蕩器定時器開始計數(shù),并且在定時器超時(4096周期)時將恢復(fù)代碼執(zhí)行。用戶必須記得在喚醒后要重新配置所需的PLL和時鐘分頻器。
只要相關(guān)的中斷使能,器件就可從深度睡眠模式中喚醒。這些中斷包括NMI、外部中斷(EINT0~EINT3)、GPIO中斷、以太網(wǎng)Wake-On-LAN中斷、掉電檢測、RTC報警中斷、看門狗定時器超時、USB輸入引腳跳變或CAN輸入引腳跳變。
3)掉電模式
掉電模式執(zhí)行在深度睡眠模式下的所有操作,但也關(guān)閉了Flash存儲器。進(jìn)入掉電模式使PCON中的PDFLAG位置位。這節(jié)省了更多功耗,但是喚醒后,在訪問Flash存儲器中的代碼或數(shù)據(jù)前,必須等待Flash恢復(fù)。
當(dāng)芯片進(jìn)入掉電模式時,IRC、主振蕩器和所有時鐘都停止。如果RTC已使能則處理器繼續(xù)運(yùn)行,RTC中斷也可用來喚醒CPU。Flash被強(qiáng)制進(jìn)入掉電模式。PLL自動關(guān)閉并斷開連接。CCLK和USBCLK時鐘分頻器自動復(fù)位為0。掉電模式喚醒時,如果在進(jìn)入掉電模式前使用了IRC,那么經(jīng)過IRC的啟動時間(60μs)后,2位IRC定時器開始計數(shù)并且在4個周期內(nèi)停止計數(shù)(expiring)。如果用戶代碼在SRAM中,那么在IRC計數(shù)4個周期后,用戶代碼會立即執(zhí)行;如果代碼在Flash中運(yùn)行,那么在IRC計數(shù)4個周期后,啟動Flash喚醒定時器,100μs后完成Flash的啟動,開始執(zhí)行代碼。當(dāng)定時器超時時,可以訪問Flash。用戶必須記得在喚醒后要重新配置PLL和時鐘分頻器。
4)深度掉電模式
在深度掉電模式中,應(yīng)關(guān)斷整個芯片的電源(實時時鐘、RESET引腳、WIC和RTC備用寄存器除外)。進(jìn)入深度掉電模式使PCON中的DPDFLAG位置位。為了優(yōu)化功率,用戶有其它的選擇,可關(guān)斷或保留32kHz振蕩器的電源。當(dāng)使用外部復(fù)位信號或使能RTC中斷和產(chǎn)生RTC中斷時,可將器件從深度掉電模式中喚醒。
5)從低功耗模式中喚醒
任何使能的中斷均可將CPU從睡眠模式中喚醒。某些特定的中斷可將處理器從深度睡眠模式或掉電模式中喚醒。
若為特定的中斷使能則允許中斷將CPU從深度睡眠模式或掉電模式中喚醒。喚醒后,將繼續(xù)執(zhí)行適當(dāng)?shù)闹袛喾?wù)程序。這些中斷為NMI、外部中斷(EINT0~EINT3)、GPIO中斷、以太網(wǎng)Wake-On-LAN中斷、掉電檢測中斷、RTC報警中斷。此外,如果看門狗定時器由IRC振蕩器驅(qū)動,則看門狗定時器也可將器件從深度睡眠模式中喚醒??梢詫PU從深度睡眠或掉電模式中喚醒的其它功能有CAN活動中斷(由CAN總線引腳上的活動產(chǎn)生)和USB活動中斷(由USB總線引腳上的活動產(chǎn)生)。相關(guān)的功能必須映射到引腳且對應(yīng)的中斷必須使能才能實現(xiàn)喚醒。
2.寄存器描述
外設(shè)的功率控制特性允許獨(dú)立關(guān)閉應(yīng)用中不需要的外設(shè),這樣可以進(jìn)一步降低功耗。功率控制功能包含兩個寄存器,分別是PCON和PCONP。
1)功率控制寄存器
功率控制寄存器PowerControlRegister(PCON-0x400FC0C0)如表3.28所示。
表3.28功率控制寄存器利用PCON寄存器設(shè)置節(jié)電模式的方法詳見表3.29。PCON寄存器中的2個比特PM1和PM0聯(lián)合控制進(jìn)入LPC1700節(jié)電模式的方式。
表3.29節(jié)電模式控制位2)外設(shè)功率控制寄存器
外設(shè)功率控制寄存器PowerControlforPeripheralsRegister(PCONP-0xE01FC0C4)允許將所選的外設(shè)功能關(guān)閉以實現(xiàn)節(jié)電的目的,可通過關(guān)斷特定外圍模塊的時鐘源來實現(xiàn)。有少數(shù)外設(shè)功能不能被關(guān)閉(例如看門狗定時器、GPIO、引腳連接模塊和系統(tǒng)控制模塊)。
某些外設(shè),特別是包含模擬功能的外設(shè),它們的操作無需時鐘,但會消耗功率。這些外設(shè)包含獨(dú)立的禁能控制位,可以通過它們來關(guān)閉電路以降低功耗。
PCONP中的每個位都控制一個外設(shè),當(dāng)位值為1時該外設(shè)啟用,當(dāng)位值為0時該外設(shè)時鐘關(guān)閉。例如,如果位3為1,則UART0接口使能;如果位3為0,則UART0接口禁止。
表3.30外設(shè)功率控制寄存器續(xù)表DAC外設(shè)在PCONP中沒有控制位。要使能DAC,必須通過配置PINSEL1寄存器在相關(guān)的引腳P0.26上選擇其輸出。
復(fù)位以后,PCONP寄存器按照默認(rèn)值使能選中的接口和外設(shè)控制器。用戶程序應(yīng)當(dāng)在啟動代碼中對PCONP寄存器編程用來啟動所需要的外設(shè)功能,并關(guān)閉不需要的接口和外設(shè),以達(dá)到降低功耗的要求。系統(tǒng)啟動以后,除了對外設(shè)功能相關(guān)的寄存器進(jìn)行配置外,用戶應(yīng)用程序不應(yīng)當(dāng)再訪問PCONP寄存器從而啟動使用片內(nèi)的任何外圍功能。
3.喚醒定時器
在上電或使用4MHzIRC振蕩器作為時鐘源將LPC1700系列Cortex-M3從掉電模式中喚醒時,LPC1700系列Cortex-M3開始操作。如果應(yīng)用需要主振蕩器或PLL,那么軟件將需要使能這些特性并在它們用作時鐘源之前等待其變?yōu)榉€(wěn)定。
當(dāng)主振蕩器開始激活時,喚醒定時器允許軟件確保主振蕩器完全工作,然后處理器將其用作時鐘源并開始執(zhí)行指令。這在上電、所有類型的復(fù)位以及任何原因所導(dǎo)致上述功能關(guān)閉時非常重要。由于振蕩器和其它功能在掉電模式下關(guān)閉,因此使處理器從掉電模式中喚醒要使用喚醒定時器。喚醒定時器通過檢測晶振來監(jiān)視是否能讓代碼安全執(zhí)行。當(dāng)給芯片加電或因某個事件使芯片退出掉電模式時,振蕩器需要一段時間來產(chǎn)生足夠振幅的信號以驅(qū)動時鐘邏輯。時間的長度取決于許多因素,包括VDD(3V3)的上升速率(上電時)、晶振的類型及其電氣特性(如果使用石英晶振)、其它任何外部電路(例如電容)和振蕩器在現(xiàn)有環(huán)境下自身的特性。
一旦檢測到一個時鐘,喚醒定時器就對固定的時鐘數(shù)(4096個時鐘)進(jìn)行計數(shù),然后設(shè)置標(biāo)志(SCS寄存器中的OSCSTAT位)表示主振蕩器已準(zhǔn)備使用。接著軟件可切換為主振蕩器并且啟動所需的PLL。3.4.5外部時鐘輸出引腳
為了便于系統(tǒng)測試和開發(fā),任何一個內(nèi)部時鐘均可引入CLKOUT功能(在P1.27引腳上可使用),如圖3.7所示。
圖3.7CLKOUT引腳選擇通過CLKOUT可觀察到的時鐘有CPU時鐘(cclk)、主振蕩器(osc_clk)、內(nèi)部RC振蕩器(irc_osc)、USB時鐘(usb_clk)和RTC時鐘(rtc_clk)。
時鐘輸出配置寄存器CLKOUTCFG控制選擇在CLKOUT引腳上出現(xiàn)的內(nèi)部時鐘,并允許通過一個整數(shù)值(多達(dá)16)對時鐘進(jìn)行分頻。分頻器可用來產(chǎn)生與其中一個片內(nèi)時鐘相關(guān)的系統(tǒng)時鐘。對于大多數(shù)時鐘源,可由1分頻。當(dāng)選擇CPU時鐘且該時鐘高于50MHz時,輸出必須經(jīng)過分頻,使得頻率在適當(dāng)?shù)姆秶鷥?nèi)。
CLKOUT復(fù)用器主要用于在可能的時鐘源之間完全切換而不受干擾。分頻器也可用來改變分頻值而不受干擾。時鐘輸出配置寄存器位描述如表3.31所示。
表3.31時鐘輸出配置寄存器位描述
系統(tǒng)控制模塊包括幾個系統(tǒng)特性和控制寄存器,它們的許多功能與特定的外設(shè)無關(guān),這些功能包括復(fù)位、掉電檢測、外部中斷輸入、各種系統(tǒng)控制和狀態(tài)、代碼安全和調(diào)試。
為了滿足將來擴(kuò)展的需要,每種類型的功能都有其對應(yīng)寄存器,不需要的位被定義為保留位。不同的功能不共用相同的寄存器地址。3.5系統(tǒng)控制模塊3.5.1復(fù)位
LPC1700系列Cortex-M3處理器有4個復(fù)位源:RESET引腳復(fù)位、看門狗復(fù)位、上電復(fù)位和掉電檢測復(fù)位。RESET引腳為施密特觸發(fā)輸入引腳。任何復(fù)位源可使芯片復(fù)位有效,一旦操作電壓到達(dá)一個可使用的門限值,則啟動喚醒定時器。復(fù)位信號將保持有效直至外部的復(fù)位信號被撤除,振蕩器開始運(yùn)行,當(dāng)時鐘計數(shù)超過了固定的時鐘個數(shù)后,F(xiàn)lash控制器已完成其初始化。LPC1700復(fù)位邏輯框圖如圖3.8所示。
圖3.8LPC1700復(fù)位邏輯框圖當(dāng)任何一個復(fù)位源(上電復(fù)位、掉電檢測復(fù)位、外部中斷復(fù)位和看門狗復(fù)位)有效時,片內(nèi)RC振蕩器開始起振。片內(nèi)RC振蕩器起振后,需要經(jīng)過一段時間才能穩(wěn)定。大約經(jīng)過60μs片內(nèi)RC振蕩器才能提供穩(wěn)定的時鐘輸出,此時復(fù)位信號被鎖存并且與片內(nèi)RC振蕩器時鐘同步。然后將同時啟動下面兩個序列:
(1)當(dāng)同步的復(fù)位無效時,IRC(片內(nèi)RC振蕩器)喚醒定時器開始計數(shù)。當(dāng)IRC喚醒定時器超時,處理器跳到Flash以啟動ROM的引導(dǎo)代碼。但如果Flash訪問尚未準(zhǔn)備好,則MAM將插入等待周期進(jìn)行等待,直至Flash就緒。
(2)當(dāng)同步的復(fù)位無效時,9位Flash喚醒定時器也開始計數(shù)。Flash喚醒定時器產(chǎn)生100μs的Flash啟動時間。一旦定時器溢出,則啟動Flash初始化序列(大概需要250個周期),當(dāng)該序列完成時,MAM(存儲器加速模塊)即可進(jìn)行Flash訪問。
當(dāng)內(nèi)部復(fù)位移除后,處理器從地址0開始執(zhí)行,地址0是從BootBlock映射的復(fù)位向量地址。這時,所有的處理器和外設(shè)寄存器都已被初始化為預(yù)先確定的值。復(fù)位源標(biāo)識寄存器(RSID-0x400FC180)位描述如表3.32所示。表3.32復(fù)位源標(biāo)識寄存器(RSID-0x400FC180)位描述3.5.2掉電檢測
LPC1700系列Cortex-M3處理器包含一個VDD(3V3)引腳電壓的2級檢測。如果該電壓變化至2.95V左右,掉電檢測器(BOD)向中斷向量控制器發(fā)出中斷信號。如需產(chǎn)生CPU中斷,那么需要在NVIC的中斷使能寄存器中使能該中斷信號;如果不需要,那么軟件可通過查詢原始中斷狀態(tài)寄存器來檢測該信號。
當(dāng)VDD(3V3)引腳的電壓變化至低于2.65V時,第2級的低電壓檢測將觸發(fā)復(fù)位信號,使LPC1700系列Cortex-M3處理器無效。低電壓下,片內(nèi)各種功能部件的操作都將變得不可靠,掉電檢測復(fù)位可以防止Flash的內(nèi)容發(fā)生改變。BOD電路將使電壓降低到1V以下來維持復(fù)位,這時上電復(fù)位電路也可保持復(fù)位。
2.95V和2.65V閾值都有一些滯后。正常工作時,這個滯后使得掉電檢測電路能夠在2.95V左右產(chǎn)生可靠的中斷信號,或使用正常執(zhí)行的循環(huán)事件來檢測掉電條件。
但是,當(dāng)使能掉電檢測以使LPC1700系列Cortex-M3處理器退出掉電模式時,電源電壓在喚醒定時器完成延時前恢復(fù)為正常電平,那么此時BOD產(chǎn)生的結(jié)果是:功能部件喚醒并在設(shè)置好掉電模式后繼續(xù)工作,不產(chǎn)生任何中斷,RSID寄存器的BOD位清零。由于其它所有的喚醒條件都有鎖存標(biāo)志,因此,這種沒有任何明顯原因的喚醒,可假定為掉電喚醒已結(jié)束。3.5.3外部中斷
1.邏輯結(jié)構(gòu)
LPC1700含有4個外部中斷輸入(作為可選的引腳功能),4個引腳分別為EINT0、EINT1、EINT2和EINT3。外部中斷輸入可用于將處理器從掉電模式喚醒。
可將多個引腳同時連接同一路外部中斷,此時,外部中斷邏輯根據(jù)方式位和極性位的不同,分別進(jìn)行如下處理:
(1)低有效電平激活方式,選用EINT功能的全部引腳的狀態(tài)都連接到一個正邏輯與門。
(2)高有效電平激活方式,選用EINT功能的全部引腳的狀態(tài)都連接到一個正邏輯或門。
(3)邊沿激活方式,使用GPIO端口號最低的引腳,與引腳的極性無關(guān)。在邊沿激活方式中,如果選擇使用多個EINT引腳將被看做編程出錯。
外部中斷邏輯原理圖見圖3.9。
圖3.9外部中斷邏輯原理圖當(dāng)多個EINT引腳邏輯或時,可在中斷服務(wù)程序中通過IO0PIN和IO1PIN寄存器從GPIO端口讀出引腳狀態(tài)來判斷產(chǎn)生中斷的引腳。
2.寄存器描述
外部中斷具有4個相關(guān)的寄存器,如表3.3
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年玉溪師范學(xué)院招聘6人備考考試試題及答案解析
- 偽裝門施工方案(3篇)
- 2026浙江浙建好房子裝飾科技有限公司招聘備考考試試題及答案解析
- 2026廣東茂名市電白區(qū)旦場中學(xué)2026年招聘部分學(xué)科臨聘教師備考考試題庫及答案解析
- 2026重慶市南岸區(qū)彈子石小學(xué)校信科教師招聘1人參考考試題庫及答案解析
- 2026吉林大學(xué)第二醫(yī)院招聘勞務(wù)派遣制護(hù)理員崗位人員10人備考考試試題及答案解析
- 2026年臨沂市市直部分事業(yè)單位公開招聘綜合類崗位工作人員(21名)考試備考試題及答案解析
- 2026春季夢想靠岸招商銀行江門分行校園招聘參考考試題庫及答案解析
- 第四單元9楓樹上的喜鵲
- 2026浙江紹興市產(chǎn)融科技服務(wù)有限公司項目制人員招聘2人備考考試試題及答案解析
- 腎性骨病的治療與護(hù)理
- GB/T 44353.2-2024動物源醫(yī)療器械第2部分:來源、收集與處置的控制
- 年產(chǎn)30萬噸木薯燃料乙醇項目一期工程(年產(chǎn)15萬噸)可行性研究報告
- 2024年水合肼行業(yè)發(fā)展現(xiàn)狀分析:水合肼市場需求量約為11.47萬噸
- 肺炎性假瘤誤診為肺癌的HRCT表現(xiàn)及淺析
- (正式版)JBT 14933-2024 機(jī)械式停車設(shè)備 檢驗與試驗規(guī)范
- 幼兒園勞動教育計劃及實施
- 志愿服務(wù)證明(多模板)
- 術(shù)后腸麻痹學(xué)習(xí)課件
- 頂管施工方案非開挖電纜管道專項施工方案
- XX小學(xué)傳統(tǒng)體育游戲集錦
評論
0/150
提交評論