- ARM Cortex-M3嵌入式開(kāi)發(fā)實(shí)例詳解
- 張燕妮編著
- 167字
- 2019-01-09 16:32:26
第2章 LPC17XX的硬件設(shè)計(jì)基礎(chǔ)
設(shè)計(jì)嵌入式系統(tǒng)時(shí),最開(kāi)始接觸的就是硬件部分,不管是用戶自己去做硬件設(shè)計(jì),還是利用開(kāi)發(fā)板設(shè)計(jì),都需要熟悉硬件的原理,最起碼也應(yīng)該知道引腳的連線關(guān)系。
本章是關(guān)于LPC17XX的硬件概述,是進(jìn)行LPC17XX硬件選型/設(shè)計(jì)、軟件開(kāi)發(fā)的基礎(chǔ)。本章內(nèi)容主要有:
(1)LPC17XX的體系機(jī)構(gòu);
(2)LPC17XX各子系列的外設(shè)情況;
(3)時(shí)鐘與功率控制;
(4)引腳情況。
2.1 LPC17XX概述
2.1.1 簡(jiǎn)介
LPC17XX系列Cortex-M3微控制器用于處理要求高度集成和低功耗的嵌入式應(yīng)用。ARM Cortex-M3是下一代內(nèi)核,在相同的時(shí)鐘速率下能提供比ARM7TDMI更高的速率。它還提供了系統(tǒng)增強(qiáng)型特性,如現(xiàn)代化調(diào)試特性和更高級(jí)別的塊集成特征。
目前,LPC17XX系列主要有LPC175X、LPC176X、LPC177X、LPC178X四種子系列。
LPC175X是LQFP80封裝形式的,主要有LPC1751/52/54/56/58/59幾款芯片。除了LPC1759外,其余的LPC175X的CPU時(shí)鐘頻率為100MHz。LPC1759的CPU時(shí)鐘頻率可為120MHz。
LPC176X是LQFP100封裝形式的,主要有LPC1769/68/67/65/64/63幾款芯片。除了LPC1769外,其余的LPC176X的CPU時(shí)鐘頻率為100MHz。LPC1769的CPU時(shí)鐘頻率可為120MHz。LPC176X具有70個(gè)GPIO引腳。
LPC177X主要有LPC1774/76/77/78幾款芯片。CPU時(shí)鐘頻率為120MHz。
LPC178X主要有LPC1785/86/87/88幾款芯片。CPU時(shí)鐘頻率為120MHz。
LPC177X/8X系列ARM Cortex-M3增加了硬件CRC計(jì)算及校驗(yàn)?zāi)K、LCD控制器(只針對(duì)LPC178X)、外部存儲(chǔ)器擴(kuò)展接口(EMC)、專用的SD卡接口。它最多有165個(gè)GPIO引腳。LPC177X與LPC23XX的引腳完全兼容,LPC178X與LPC24XX的引腳完全兼容。
LPC17XX可用于靜電計(jì)、照明設(shè)備、工業(yè)網(wǎng)絡(luò)、報(bào)警系統(tǒng)、白色家電、電機(jī)控制等領(lǐng)域。
LPC17XX各子系列的功能相近,本書(shū)選取LPC1768作為典型芯片進(jìn)行講解,兼顧其他芯片的功能。本書(shū)中若不做特別標(biāo)注,都是以LPC1768為基礎(chǔ)進(jìn)行講解的。使用其他LPC17XX芯片,在寄存器地址上及引腳方面會(huì)有所不同,一些外設(shè)功能也有所增減。對(duì)于具有相同功能的外設(shè),使用NXP固件庫(kù)進(jìn)行編程的用戶感受不到芯片的分類影響。
2.1.2 特性
(1)ARM Cortex-M3微控制器可在高至100MHz(其中LPC1769和LPC1759的頻率可達(dá)120MHz)的頻率下運(yùn)行,并包含一個(gè)支持8個(gè)區(qū)的存儲(chǔ)器保護(hù)單元(MPU)。
(2)內(nèi)置嵌套的向量中斷控制器(NVIC)。
(3)具有在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)功能的512KB片上Flash程序存儲(chǔ)器。對(duì)增強(qiáng)型的Flash存儲(chǔ)加速器和Flash存儲(chǔ)器在CPU本地代碼/數(shù)據(jù)總線上的位置進(jìn)行整合,則Flash可提供高性能的代碼。
(4)64KB片內(nèi)SRAM包括:
① 32KB片內(nèi)SRAM,可供高性能CPU通過(guò)本地代碼/數(shù)據(jù)總線訪問(wèn);
② 2個(gè)16KB SRAM模塊,帶獨(dú)立訪問(wèn)路徑,可進(jìn)行更高吞量的操作。這些SRAM模塊可用于以太網(wǎng)、USB、DMA存儲(chǔ)器,以及通用指令和數(shù)據(jù)存儲(chǔ)。
(5)AHB多層矩陣上具有8通道的通用DMA控制器,它可結(jié)合SSP、I2S、UART、模數(shù)和數(shù)模轉(zhuǎn)換器外設(shè)、定時(shí)器匹配信號(hào)和GPIO使用,并可用于存儲(chǔ)器到存儲(chǔ)器的傳輸。
(6)多層AHB矩陣內(nèi)部連接,為每個(gè)AHB主機(jī)提供獨(dú)立的總線。AHB主機(jī)包括CPU、通用DMA控制器、以太網(wǎng)MAC和USB接口。它提供無(wú)仲裁延遲的通信,除非2個(gè)主機(jī)嘗試同時(shí)訪問(wèn)同一個(gè)從機(jī)。
(7)分離的APB總線允許在CPU和DMA之間提供更多的帶寬,更少的延遲。CPU無(wú)須等待APB寫(xiě)操作完成。
(8)以太網(wǎng)MAC,帶RMII接口和相關(guān)的DMA控制器。
(9)USB 2.0全速?gòu)臋C(jī)/主機(jī)/OTG控制器,帶有用于從機(jī)、主機(jī)功能的片內(nèi)PHY和相關(guān)的DMA控制器。
(10)4個(gè)UART,帶小數(shù)波特率發(fā)生功能、內(nèi)部FIFO,支持DMA和RS-485。
(11)UART帶有MODEM控制I/O并支持RS-485/EIA-485。全部的UART都支持IrDA。
(12)CAN控制器。
(13)SPI控制器,具有同步、串行、全雙工通信和可編程的數(shù)據(jù)長(zhǎng)度。
(14)SSP控制器,帶有FIFO,可按多種協(xié)議進(jìn)行通信。其中一個(gè)可選擇用于SPI,并且和SPI共用中斷。SSP接口可以與GPDMA控制器一起使用。
(15)增強(qiáng)型的I2C總線接口,其中1個(gè)具有開(kāi)漏輸出功能,支持整個(gè)I2C規(guī)范和數(shù)據(jù)速率為1Mbit/s的快速模式,另外2個(gè)具有標(biāo)準(zhǔn)的端口引腳。
(16)I2S(Inter-IC Sound)接口,用于數(shù)字音頻輸入或輸出,具有小數(shù)速率控制功能。I2S接口可與GPDMA一起使用。I2S接口支持3-線的數(shù)據(jù)發(fā)送和接收或4-線的組合發(fā)送和接收連接,以及主機(jī)時(shí)鐘輸入/輸出。
其他外設(shè)如下。
(1)通用I/O(GPIO)引腳,帶可配置的上拉/下拉電阻。AHB總線上的所有GPIO可進(jìn)行快速訪問(wèn),支持新的、可配置的開(kāi)漏操作模式;GPIO位于存儲(chǔ)器中,它支持Cortex-M3位帶操作并且由通用DMA控制器使用。
(2)12位模數(shù)轉(zhuǎn)換器(ADC),可在8個(gè)引腳間實(shí)現(xiàn)多路輸入,轉(zhuǎn)換速率高達(dá)1MHz,并具有多個(gè)結(jié)果寄存器。12位ADC可與GPDMA控制器一起使用。
(3)10位數(shù)模轉(zhuǎn)換器(DAC),具有專用的轉(zhuǎn)換定時(shí)器,并支持DMA操作。
(4)4個(gè)通用定時(shí)/計(jì)數(shù)器,帶共有8個(gè)捕獲輸入和10個(gè)比較輸出。每個(gè)定時(shí)器模塊都具有一個(gè)外部計(jì)數(shù)輸入。可選擇特定的定時(shí)器事件來(lái)產(chǎn)生DMA請(qǐng)求。
(5)1個(gè)電機(jī)控制PWM,支持三相的電機(jī)控制。
(6)正交編碼器接口,可監(jiān)控一個(gè)外部正交編碼器。
(7)1個(gè)標(biāo)準(zhǔn)的PWM定時(shí)器模塊,帶外部計(jì)數(shù)輸入。
(8)實(shí)時(shí)時(shí)鐘(RTC),帶有獨(dú)立的電源域。RTC通過(guò)專用的RTC振蕩器來(lái)驅(qū)動(dòng)。RTC模塊包括20字節(jié)電池供電的備用寄存器,當(dāng)芯片的其他部分掉電時(shí),允許系統(tǒng)狀態(tài)存儲(chǔ)在該寄存器中。電池電源可由標(biāo)準(zhǔn)的3V鋰電池供電。當(dāng)電池電壓掉至2.1V的低電壓時(shí),RTC仍會(huì)繼續(xù)工作。
(9)看門(mén)狗定時(shí)器(WDT),該定時(shí)器的時(shí)鐘源可在內(nèi)部RC振蕩器、RTC振蕩器或APB時(shí)鐘三者間進(jìn)行選擇。
(10)支持ARM Cortex-M3系統(tǒng)節(jié)拍定時(shí)器,包括外部時(shí)鐘輸入選項(xiàng)。
(11)重復(fù)性的中斷定時(shí)器,提供可編程和重復(fù)定時(shí)的中斷。
(12)標(biāo)準(zhǔn)JTAG測(cè)試/調(diào)試接口,以及串行線調(diào)試和串行線跟蹤端口選項(xiàng)。
(13)仿真跟蹤模塊,支持實(shí)時(shí)跟蹤。
(14)4個(gè)低功率模式:睡眠、深度睡眠、掉電、深度掉電。
(15)單個(gè)3.3V電源(2.4~3.6V),溫度范圍為-40~85℃。
(16)4個(gè)外部中斷輸入,可配置為邊沿/電平觸發(fā)。PORT0和PORT2上的所有引腳都可用做邊沿觸發(fā)的中斷源。
(17)不可屏蔽中斷(NMI)輸入。
(18)時(shí)鐘輸出功能,可反映主振蕩器時(shí)鐘、IRC時(shí)鐘、RTC時(shí)鐘、CPU時(shí)鐘或USB時(shí)鐘的輸出狀態(tài)。
(19)當(dāng)處于掉電模式時(shí),可通過(guò)中斷(包括外部中斷、RTC中斷、USB活動(dòng)中斷、以太網(wǎng)喚醒中斷、CAN總線活動(dòng)中斷、PORT0/2引腳中斷和NMI)將處理器從掉電模式中喚醒。
(20)每個(gè)外設(shè)都自帶時(shí)鐘分頻器,以進(jìn)一步節(jié)省功耗。
(21)帶掉電檢測(cè)功能,可對(duì)掉電中斷和強(qiáng)制復(fù)位分別設(shè)置閾值。
(22)片內(nèi)有上電復(fù)位電路。
(23)片內(nèi)晶振工作頻率為1~24MHz。
(24)4MHz內(nèi)部RC振蕩器可在±1%的精度內(nèi)調(diào)整,可選擇用做系統(tǒng)時(shí)鐘。
(25)通過(guò)片內(nèi)PLL,沒(méi)有高頻晶振,CPU也可以最高頻率運(yùn)轉(zhuǎn)。用戶可從主振蕩器、內(nèi)部RC振蕩器或RTC振蕩器三者中選擇一個(gè)作為PLL時(shí)鐘源。
(26)第二個(gè)專用的PLL可用于USB接口,以允許增加主PLL設(shè)置的靈活性;用戶可在引腳對(duì)應(yīng)的多種功能中進(jìn)行選擇。
表2-1給出了LPC17XX器件的外設(shè)信息。
表2-1 LPC17XX器件的外設(shè)信息表

2.1.3 LPC17XX的結(jié)構(gòu)圖
LPC17XX的結(jié)構(gòu)圖如圖2-1所示。該結(jié)構(gòu)圖包含Cortex-M3內(nèi)核、多層AHB矩陣,以及各LPC17XX外設(shè)。

圖2-1 LPC17XX的結(jié)構(gòu)圖
ARM Cortex-M3包含三條AHB-Lite總線:一條系統(tǒng)總線,以及I-Code和D-Code總線。后兩者的速率較快,且與測(cè)試/調(diào)試接口的用法類似:一條總線專用于指令取指(I-Code);另一條總線用于數(shù)據(jù)訪問(wèn)(D-Code)。這兩條內(nèi)核總線允許同時(shí)執(zhí)行操作,即同時(shí)對(duì)不同的設(shè)備目標(biāo)進(jìn)行操作。
LPC1700系列Cortex-M3微控制器使用多層AHB矩陣來(lái)連接Cortex-M3總線,并以靈活的方式將其他總線主機(jī)連接到外設(shè),允許多層AHB矩陣上的各外設(shè)(使用了不同的從端口)同時(shí)被不同的總線主機(jī)訪問(wèn),從而獲得最優(yōu)化的性能。
APB外設(shè)使用多層AHB矩陣的獨(dú)立從機(jī)端口通過(guò)兩條APB總線連接到CPU上,這就減少了CPU和DMA控制器之間的爭(zhēng)用,可實(shí)現(xiàn)更好的性能。APB總線橋配置為寫(xiě)緩沖區(qū)操作,使得CPU或DMA控制器無(wú)須等待APB寫(xiě)操作結(jié)束。
LPC17XX的Cortex-M3微控制器使用Cortex-M3 CPU的r2p0版本,包含如下系統(tǒng)方面與調(diào)試方面的特征。
1.系統(tǒng)方面的特征
(1)嵌套的向量中斷控制器(NVIC):NVIC包括系統(tǒng)定時(shí)器。
(2)喚醒中斷控制器(WIC):WIC可更有效地將CPU從低功耗模式中喚醒。
(3)存儲(chǔ)器保護(hù)單元(MPU)。
(4)ROM表:ROM表提供了調(diào)試部件到外部調(diào)試系統(tǒng)的地址。
2.調(diào)試方面的特征
(1)JTAG調(diào)試接口。
(2)串行線調(diào)試:串行線調(diào)試允許僅使用兩條線進(jìn)行調(diào)試操作,簡(jiǎn)單的跟蹤功能可增加第三條線。
(3)嵌入式跟蹤宏單元(ETM):ETM提供指令跟蹤功能。
(4)數(shù)據(jù)觀察點(diǎn)和跟蹤(DWT)單元:DWT允許數(shù)據(jù)地址或數(shù)據(jù)值匹配為跟蹤信息或觸發(fā)其他事件。DWT包含4個(gè)比較器和計(jì)數(shù)器以用于特定的內(nèi)部事件。
(5)指令跟蹤宏單元(ITM):軟件可寫(xiě)ITM以發(fā)送信息到跟蹤端口。
(6)跟蹤端口接口單元(TPIU):TPIU編碼并向外面提供跟蹤信息,這可以在串行線瀏覽器引腳(Serial Wire Viewer pin)或4并行跟蹤端口上實(shí)現(xiàn)。
(7)Flash修補(bǔ)和斷點(diǎn)(FPB):FPB可產(chǎn)生硬件斷點(diǎn)并且在代碼空間中重新映射特定的地址到SRAM作為更改非易失性代碼的暫時(shí)方法。FPB包括2個(gè)文字比較器(literal comparator)和6個(gè)指令比較器。
LPC1700系列Cortex-M3微控制器含有512KB的片上Flash存儲(chǔ)器。一個(gè)新的2-端口Flash存儲(chǔ)器加速器通過(guò)兩條快速AHB-Lite總線將其使用性能擴(kuò)至極限。該存儲(chǔ)器可用于存放代碼和數(shù)據(jù)。對(duì)Flash存儲(chǔ)器的編寫(xiě)可通過(guò)若干種方式來(lái)實(shí)現(xiàn)。LPC1700系列Cortex-M3微控制器可通過(guò)串口進(jìn)行在系統(tǒng)編程。應(yīng)用程序也可以在運(yùn)行時(shí)對(duì)Flash進(jìn)行擦除和/或編程,從而給數(shù)據(jù)存儲(chǔ)域的固件升級(jí)等操作帶來(lái)極大的靈活性。
LPC1700系列Cortex-M3微控制器包含共計(jì)為64KB的片上靜態(tài)RAM存儲(chǔ)器,包括主32KB SRAM(CPU和高速總線上的3個(gè)DMA控制器均可對(duì)其進(jìn)行訪問(wèn)),以及另外兩個(gè)各為16KB的、位于AHB多層矩陣獨(dú)立從機(jī)端口的SRAM模塊。這種結(jié)構(gòu)允許各自執(zhí)行CPU和DMA訪問(wèn)操作,從而使得對(duì)總線主機(jī)的延遲變少或無(wú)延遲。
2.2 LPC17XX的時(shí)鐘與功率控制
本節(jié)描述了LPC1700系列Cortex-M3微控制器所需的各種時(shí)鐘和時(shí)鐘源選擇,以及功率控制和低功耗模式的喚醒。
2.2.1 振蕩器
LPC1700系列Cortex-M3微控制器包括3個(gè)獨(dú)立的振蕩器,分別為主振蕩器(osc_clk)、內(nèi)部RC振蕩器(irc_clk)和RTC振蕩器(rtc_clk)。每個(gè)振蕩器可根據(jù)特定的應(yīng)用要求來(lái)選用,圖2-2給出了每種振蕩器生成不同時(shí)鐘信號(hào)的過(guò)程。

圖2-2 LPC1700系列Cortex-M3微控制器的時(shí)鐘產(chǎn)生
復(fù)位后,LPC1700系列Cortex-M3微控制器自動(dòng)選擇內(nèi)部RC振蕩器作為系統(tǒng)的時(shí)鐘源,用戶可以通過(guò)軟件方式修改時(shí)鐘源來(lái)選擇寄存器。這使得微控制器能在沒(méi)有外部晶振的情況下運(yùn)行,并允許Boot Loader代碼在一個(gè)已知的頻率下運(yùn)行。
1.內(nèi)部RC振蕩器
內(nèi)部RC振蕩器(IRC)既可以用做看門(mén)狗定時(shí)器的時(shí)鐘源,也可以用做驅(qū)動(dòng)PLL0和CPU的時(shí)鐘源。IRC的精度達(dá)不到USB接口的時(shí)間基準(zhǔn)精度要求(USB接口需要一個(gè)更精確的時(shí)間基準(zhǔn)以遵循USB規(guī)范)。而且如果CAN的波特率高于100kbit/s,則IRC不應(yīng)用于CAN模塊。IRC的額定頻率為4MHz。
上電或任何芯片復(fù)位時(shí),LPC1700系列Cortex-M3微控制器使用IRC作為時(shí)鐘源。此后,軟件可將其切換為另一種可用的時(shí)鐘源。
2.主振蕩器
主振蕩器(外部晶體振蕩器)可以用做CPU的時(shí)鐘源(不管是否使用PLL0)。主振蕩器工作在1~24MHz下。該頻率可通過(guò)主PLL(PLL0)來(lái)提高,其值可高達(dá)CPU操作頻率的最大值。振蕩器的輸出稱為osc_clk。PLLCLKIN可用于PLL0輸入時(shí)鐘的選擇。為了便于頻率公式的書(shū)寫(xiě)及本節(jié)的描述,將ARM處理器時(shí)鐘頻率稱為CCLK。在PLL0有效并連接前,PLLCKIN和CCLK的頻率值相同。
LPC1700系列Cortex-M3微控制器的振蕩器可工作在兩種模式下:從屬模式和振蕩模式。
在從屬模式下,輸入時(shí)鐘信號(hào)應(yīng)該與一個(gè)100pF的電容(圖2-3(a)中的Cc)相連,其幅值至少為200mVrms。在這種配置下,XTAL2引腳可以不連接。

圖2-3 振蕩器模式和模型
振蕩模式下使用的外部元件和模型如圖2-3的(b)和(c),以及表2-2和表2-3所示。由于片內(nèi)集成了反饋電阻,所以只需要在外部連接一個(gè)晶體和電容Cx1、Cx2就可以形成基本模式的振蕩電路(基本頻率用L、CL和Rs來(lái)表示)。圖2-3(c)中的電容Cp是并聯(lián)封裝電容,其值不能大于7pF。參數(shù)Fosc、CL、Rs和Cp都由晶體制造商提供。
表2-2 振蕩模式下CX1、CX2的建議取值(晶體和外部元件參數(shù))、低頻模式(OSCRANGE=0)

表2-3 振蕩模式下CX1、CX2的建議取值(晶體和外部元件參數(shù))、高頻模式(OSCRANGE=1)

由于芯片操作總是從內(nèi)部RC振蕩器開(kāi)始的,且主振蕩器在某些應(yīng)用中并沒(méi)有使用,所以主振蕩器只能由軟件請(qǐng)求來(lái)啟動(dòng)。通過(guò)把SCS寄存器中的OSCEN(SCS[5])置位可實(shí)現(xiàn)這種操作。主振蕩器提供了一個(gè)狀態(tài)標(biāo)志(SCS[6]),使得程序可據(jù)此得知振蕩器何時(shí)可用。待確定振蕩器運(yùn)行穩(wěn)定后,軟件可控制SCS[5]切換為主振蕩器模式使其作為時(shí)鐘源。在啟動(dòng)主振蕩器之前,頻率范圍必須通過(guò)配置SCS寄存器中的OSCRANGE(SCS[4])位來(lái)選擇。
3.RTC振蕩器
RTC振蕩器可提供1Hz~32kHz的RTC時(shí)鐘輸出,可用做PLL0、CPU和/或看門(mén)狗定時(shí)器的時(shí)鐘源。
2.2.2 時(shí)鐘源選擇多路復(fù)用
某些時(shí)鐘源可選擇用來(lái)驅(qū)動(dòng)PLL0、CPU和片內(nèi)外圍設(shè)備。這些可用的時(shí)鐘源包括主振蕩器、RTC振蕩器和內(nèi)部RC振蕩器。
只有當(dāng)PLL0斷開(kāi)連接時(shí),才可以更換輸入時(shí)鐘源。
請(qǐng)注意下列有關(guān)時(shí)鐘源選擇的限制:
(1)IRC振蕩器不應(yīng)用做(通過(guò)PLL0)USB子系統(tǒng)的時(shí)鐘源;
(2)如果CAN的波特率高于100kbit/s,則IRC振蕩器不應(yīng)用做(通過(guò)PLL0)CAN控制器的時(shí)鐘源。
時(shí)鐘源選擇寄存器(CLKSRCSEL-0x400F C10C):時(shí)鐘源選擇寄存器包含了選擇PLL0時(shí)鐘源的位。時(shí)鐘源選擇寄存器的位描述如表2-4所示。
表2-4 時(shí)鐘源選擇寄存器的位描述

2.2.3 PLL0
PLL0支持從32kHz~25MHz范圍內(nèi)的輸入時(shí)鐘頻率。時(shí)鐘源在CLKSRCSEL寄存器中選擇(見(jiàn)2.2.2節(jié)中的描述)。PLL將輸入時(shí)鐘倍頻,然后再分頻,以提供給CPU、外設(shè)或USB子系統(tǒng)使用的實(shí)際時(shí)鐘。PLL0可產(chǎn)生的時(shí)鐘頻率高達(dá)100MHz,是CPU所允許的最大值。
PLL輸入(頻率范圍為32kHz~50MHz)首先被一個(gè)“N”值分頻,“N”值的范圍為1~256。該輸入分頻在相同的輸入頻率下,提供更多種可能的輸出頻率范圍。
PLL倍頻器(見(jiàn)圖2-4中的M倍頻)的操作在PLL輸入分頻器之后進(jìn)行。通過(guò)使用電流控制振蕩器(CCO)由“M”的值(支持的M值范圍為6~512,以及表2-12中所示的值)來(lái)倍頻輸入分頻器的輸出。因此,產(chǎn)生的頻率必須在275~550MHz頻率范圍內(nèi)。倍頻器操作是先使用M值分頻CCO輸出,然后使用相位-頻率檢測(cè)器將分頻后的CCO輸出與倍頻器輸入相比較。可以根據(jù)比較的偏差值調(diào)節(jié)CCO的振蕩頻率。

圖2-4 PLL0的方框圖
表2-12 使用低頻時(shí)鐘輸入的倍頻值

PLL0的輸出還連接有其他的分頻器,使其頻率下降到CPU、外設(shè)和USB子系統(tǒng)所需要的值。PLL0的方框圖如圖2-4所示。
PLL0控制寄存器控制PLL有效。PLL0配置寄存器控制PLL0倍頻器和分頻器的值。為了避免程序?qū)LL0正在使用的相關(guān)參數(shù)進(jìn)行意外修改或PLL失效,芯片廠商對(duì)這兩個(gè)寄存器進(jìn)行了保護(hù)。由于所有的芯片操作,包括看門(mén)狗定時(shí)器,在這種配置情況下都可能依賴于PLL0(如當(dāng)PLL正在提供芯片時(shí)鐘時(shí)),所以意外改變PLL0的設(shè)置將導(dǎo)致微控制器執(zhí)行不期望或錯(cuò)誤的操作。保護(hù)是由一個(gè)類似于操作看門(mén)狗定時(shí)器的代碼序列來(lái)實(shí)現(xiàn)的,詳情請(qǐng)參閱PLL0FEED寄存器的描述。
PLL0在系統(tǒng)進(jìn)入掉電模式時(shí)會(huì)自動(dòng)關(guān)閉并斷開(kāi)。PLL0必須通過(guò)軟件配置、使能和連接到系統(tǒng)。
注意:一定要按照PLL0設(shè)置序列的設(shè)置步驟來(lái)進(jìn)行,否則PLL可能不操作!
當(dāng)在用戶Flash中沒(méi)有有效代碼(由校驗(yàn)和字段決定)或在啟動(dòng)時(shí)拉低ISP使能引腳(P2.10)時(shí),芯片將進(jìn)入ISP模式,并且引導(dǎo)代碼使用IRC設(shè)置PLL。因此,當(dāng)用戶啟動(dòng)JTAG來(lái)調(diào)試應(yīng)用代碼時(shí),不能假設(shè)PLL被禁能。用戶啟動(dòng)代碼必須按照本章中說(shuō)明的步驟來(lái)斷開(kāi)與PLL的連接。
1.PLL0寄存器的描述
PLL0由PLL0寄存器進(jìn)行控制,如表2-5所示。
表2-5 PLL0寄存器

注:[1]復(fù)位值僅指在使用位中保存的數(shù)據(jù),不包括保留位的內(nèi)容。
注意:PLL0值的不正確設(shè)定會(huì)導(dǎo)致器件不能正確地操作!
1)PLL0控制寄存器(PLL0CON-0x400FC080)
PLL0控制寄存器包含了使能和連接PLL0的位。該寄存器可以使能PLL0,以允許它嘗試鎖定倍頻器和分頻器的當(dāng)前設(shè)定值。連接PLL0的位,可以使PLL0的輸出用做處理器和大多數(shù)片內(nèi)外設(shè)的時(shí)鐘源。對(duì)PLL0控制寄存器的更改,只有在對(duì)PLL0FEED執(zhí)行了正確的PLL0饋送序列后才生效。
PLL0控制寄存器的位描述如表2-6所示。
表2-6 PLL0控制寄存器的位描述

PLL0在用做時(shí)鐘源之前必須進(jìn)行設(shè)置、使能并鎖定。當(dāng)PLL時(shí)鐘源從振蕩器時(shí)鐘切換到PLL0輸出或反過(guò)來(lái)操作時(shí),為確保不產(chǎn)生問(wèn)題,內(nèi)部電路同步化該操作。此外,當(dāng)PLL0脫離鎖定狀態(tài)時(shí),硬件是不會(huì)主動(dòng)斷開(kāi)PLL0連接的,這時(shí)振蕩器很可能已變得不穩(wěn)定,此時(shí)再斷開(kāi)PLL0也沒(méi)用了。
2)PLL0配置寄存器(PLL0CFG-0x400F C084)
PLL0配置寄存器包含PLL0倍頻器和分頻器值。在執(zhí)行正確的PLL饋送序列之前,改變PLLC0配置寄存器的值不會(huì)生效。
PLL0配置寄存器的位描述如表2-7所示。
表2-7 PLL0配置寄存器的位描述

3)PLL0狀態(tài)寄存器(PLL0STAT-0x400FC088)
PLL0狀態(tài)寄存器提供了當(dāng)前生效的PLL0真實(shí)工作參數(shù)和狀態(tài),它是一個(gè)只讀寄存器。PLL0STAT中的值可能與PLL0CON和PLL0CFG中的值不同,這是因?yàn)閷?duì)這些寄存器的更改只有在執(zhí)行了正確的PLL0饋送序列后才生效。
PLL0狀態(tài)寄存器的位描述如表2-8所示。
表2-8 PLL0狀態(tài)寄存器的位描述

PLL0STAT的PLOCK0位反映PLL0的鎖定狀態(tài)。當(dāng)使能PLL0或改變參數(shù)時(shí),PLL0在新的條件下需要一些時(shí)間來(lái)完成鎖定。可通過(guò)監(jiān)控PLOCK0位來(lái)確定連接PLL0的時(shí)間。當(dāng)PLL參考頻率(參考頻率FREF與N分頻器輸出的頻率相等,即FREF=FIN/N)小于100kHz或大于20MHz時(shí),PLOCK0的值可能不穩(wěn)定。在這些情況下,可假設(shè)PLL啟動(dòng)后經(jīng)過(guò)一段時(shí)間才穩(wěn)定下來(lái)。當(dāng)FREF大于400kHz時(shí),這個(gè)時(shí)間為50s;當(dāng)FREF小于400kHz時(shí),這個(gè)時(shí)間為200/FREFs。
PLOCK0位連接到中斷控制器,這樣可使用軟件使能PLL0,而無(wú)須等待PLL0鎖定。當(dāng)發(fā)生中斷時(shí),可以連接PLL0并禁止中斷。
PLL0STAT[24]和PLL0STAT[25],即PLLC0和PLLE0的組合解釋如表2-9所示。
表2-9 PLL0控制位的組合

4)PLL0饋送寄存器(PLL0FEED-0x400F C08C)
必須將正確的饋送序列寫(xiě)入PLL0FEED寄存器,才能使PLL0CON和PLL0CFG寄存器的更改生效。饋送序列如下:
① 將值0xAA寫(xiě)入PLL0FEED;
② 將值0x55寫(xiě)入PLL0FEED。
這兩個(gè)寫(xiě)操作的順序必須正確,而且必須在相同的地址空間(0x400F C000~0x400F FFFF)內(nèi)沒(méi)有其他寄存器訪問(wèn)。如果有一個(gè)中斷服務(wù)程序在對(duì)該空間內(nèi)的一個(gè)寄存器執(zhí)行寫(xiě)操作,則在執(zhí)行PLL0饋送操作時(shí)必須禁止中斷。如果寫(xiě)入的值不正確或沒(méi)有滿足前兩個(gè)條件,則對(duì)PLL0CON或PLL0CFG寄存器的更改都不會(huì)生效。
PLL0饋送寄存器的位描述如表2-10所示。
表2-10 PLL0饋送寄存器的位描述

2.PLL0和掉電模式
掉電模式會(huì)自動(dòng)關(guān)閉并斷開(kāi)PLL0。從掉電模式喚醒不會(huì)自動(dòng)恢復(fù)原先的PLL0參數(shù),必須在軟件中恢復(fù)PLL0。通常可以在中斷服務(wù)程序的開(kāi)始激活PLL0、等待鎖定并連接PLL0,該中斷服務(wù)程序也可以在掉電喚醒時(shí)調(diào)用。需要注意一點(diǎn),那就是不要試圖在掉電喚醒之后簡(jiǎn)單地執(zhí)行饋送序列來(lái)重新啟動(dòng)PLL0,在建立PLL鎖定之前,這種操作將會(huì)同時(shí)使能并連接PLL0。
3.PLL0的頻率計(jì)算
在進(jìn)行PLL0參數(shù)的設(shè)置時(shí),需要的參數(shù)信息如表2-11所示。
表2-11 PLL0的參數(shù)信息

PLL0輸出頻率(當(dāng)PLL0被激活且連接時(shí))的計(jì)算公式為
FCCO=(2×M×FIN)/N
PLL輸入和設(shè)定必須滿足下面的條件。
(1)FIN的范圍:32kHz~50MHz;
(2)FCCO的范圍:275~550MHz。
可通過(guò)求解PLL等式來(lái)得到其他的PLL參數(shù):
M=(FCCO×N)/(2×FIN)
N=(2×M×FIN)/FCCO
允許的M值:
FIN=(FCCO×N)/(2×M)
(1)在較高的振蕩器頻率下(超過(guò)1MHz),允許M值的范圍為6~512,這是支持主振蕩器和IRC操作的整個(gè)M值范圍;
(2)對(duì)于較低頻率,特別是當(dāng)RTC振蕩器用來(lái)計(jì)時(shí)PLL0時(shí),選擇了65個(gè)M值用于支持波特率產(chǎn)生和CAN/USB操作,這些值在表2-12中給出。
4.確定PLL0頻率參數(shù)的過(guò)程
通過(guò)使用NXP提供的電子數(shù)據(jù)表可簡(jiǎn)單確定PLL0參數(shù)。如果要手動(dòng)確定PLL0參數(shù),可按照下面的步驟來(lái)進(jìn)行。
(1)確定是否需要使用USB,以及是否由PLL0驅(qū)動(dòng)。USB要求一個(gè)占空比為50%的48MHz時(shí)鐘源,也就是說(shuō),FCCO必須是48MHz的偶數(shù)整數(shù)倍(即96MHz的整數(shù)倍),誤差范圍極小。
(2)選擇所需的處理器操作頻率(FCCLK),這取決于處理器的吞吐量要求,所支持的特定的UART波特率等。外設(shè)可在較低時(shí)鐘頻率下運(yùn)行,這個(gè)頻率可以低于處理器的頻率(見(jiàn)2.2.4節(jié)“時(shí)鐘分頻器”和2.2.5節(jié)“功率控制”)。找出與所需FCCLK的倍數(shù)接近的一個(gè)FCCO值,再與步驟(1)中USB所要求的FCCO值相比較,較低的FCCO值,處理器的功耗也更低。
(3)選擇PLL輸入頻率(FIN)的值。可從主振蕩器、RTC振蕩器或片內(nèi)RC振蕩器中選擇。使用USB功能時(shí),需要選擇主振蕩器。如果使用PLL1而不是PLL0來(lái)驅(qū)動(dòng)USB子系統(tǒng),會(huì)影響選擇主振蕩器的頻率。
(4)計(jì)算M和N的值來(lái)產(chǎn)生十分精確的FCCO頻率。將所需的M值減1(即M-1)寫(xiě)入PLL0CFG的MSEL0字段,將所需的N值減1(即N-1)寫(xiě)入PLL0CFG的NSEL0字段。
總的來(lái)說(shuō),建議使用一個(gè)較小的N值,這樣可以降低FCCO的倍頻數(shù)。由于在某些情況下很難找到最好的值,所以可以使用電子數(shù)據(jù)表或類似的方法來(lái)立即獲得多種可能的值,再?gòu)闹羞x擇出一個(gè)最好的值。
5.PLL0的設(shè)置步驟
要想對(duì)PLL0進(jìn)行正確的初始化,必須按照下列步驟操作。
(1)如果PLL0已被連接,則用一個(gè)饋送序列斷開(kāi)與PLL0的連接。
(2)用一個(gè)饋送序列禁止PLL0。
(3)如果需要,可在沒(méi)有PLL0的情況下改變CPU時(shí)鐘分頻器的設(shè)置以加速操作。
(4)操作“時(shí)鐘源選擇控制寄存器”以改變時(shí)鐘源。
(5)寫(xiě)PLL0CFG并用一個(gè)饋送序列使其有效。PLL0CFG只能在PLL0被禁止時(shí)更新。
(6)用一個(gè)饋送序列使能PLL0。
(7)改變CPU時(shí)鐘分頻器的設(shè)置,使之與PLL0一起操作。在連接PLL0之前完成這個(gè)操作是很重要的。
(8)通過(guò)監(jiān)控PLL0STAT寄存器的PLOCK0位,或使用PLOCK0中斷來(lái)等待PLL0實(shí)現(xiàn)鎖定。此外,當(dāng)使用低頻時(shí)鐘作為PLL0的輸入時(shí)(也就是32kHz),需要等待一個(gè)固定的時(shí)間。當(dāng)PLL參考頻率(REFCLK的頻率FREF與預(yù)分頻器值分頻所得的PLL輸入頻率相等)少于100kHz或大于20MHz時(shí),PLOCK0的值可能不穩(wěn)定。在這些情況下,啟動(dòng)PLL后等待一段時(shí)間即可。當(dāng)FREF大于400kHz時(shí),這個(gè)時(shí)間為500s;當(dāng)FREF小于400kHz時(shí),這個(gè)時(shí)間為200/FREFs。
(9)用一個(gè)饋送序列連接PLL0。
需要注意的是不要合并上面的任何一個(gè)步驟。例如,不能用相同的饋送序列同時(shí)更新PLL0CFG和使能PLL0。
2.2.4 時(shí)鐘分頻器
PLL0的輸出經(jīng)過(guò)分頻后供CPU和USB子系統(tǒng)使用。由于提供了各自的分頻器,所以可以單獨(dú)確定USB子系統(tǒng)和CPU的頻率。在正常操作下,USB子系統(tǒng)總是需要占空比為50%的48MHz頻率。
如圖2-5所示是PLL和時(shí)鐘分頻器。

圖2-5 PLL和時(shí)鐘分頻器
1.CPU時(shí)鐘配置寄存器(CCLKCFG-0x400FC104)
PLL0輸出的時(shí)鐘必須要經(jīng)過(guò)分頻才能提供給CPU使用,PLL0輸出的分頻由CCLKCFG寄存器進(jìn)行控制。當(dāng)PLL0被旁路時(shí),可實(shí)現(xiàn)1分頻。當(dāng)PLL0正在運(yùn)行時(shí),輸出必須經(jīng)過(guò)分頻,從而限定CPU時(shí)鐘頻率(CCLK)的運(yùn)行范圍。可使用一個(gè)8位分頻器進(jìn)行選擇,包括降低CPU的操作頻率來(lái)暫時(shí)節(jié)省功耗而無(wú)須關(guān)閉PLL0。
注意:當(dāng)在應(yīng)用中使用USB接口時(shí),CCLK必須至少為18MHz以便于支持USB子系統(tǒng)的內(nèi)部操作。CPU時(shí)鐘配置寄存器的位描述如表2-13所示。
表2-13 CPU時(shí)鐘配置寄存器的位描述

注意:當(dāng)置位CCLKSEL位時(shí)使用偶數(shù)值(2,4,6,254),可能會(huì)導(dǎo)致操作錯(cuò)誤。
CCLK從PLL0輸出信號(hào)中得到,通過(guò)CCLKSEL+1分頻。當(dāng)CCLKSEL=1時(shí),CCLK的頻率是PLL0輸出頻率的一半;當(dāng)CCLKSEL=3時(shí),CCLK的頻率是PLL0輸出頻率的四分之一,以此類推。
2.USB時(shí)鐘配置寄存器(USBCLKCFG-0x400FC108)
注意:該寄存器僅在PLL1禁止時(shí)使用。如果PLL1使能,則其輸出自動(dòng)用做USB時(shí)鐘源,且必須配置PLL1為USB子系統(tǒng)提供正確的48MHz時(shí)鐘。
USBCLKCFG寄存器控制對(duì)PLL0輸出時(shí)鐘的分頻,然后提供給USB子系統(tǒng)使用。PLL0的輸出必須被分頻以使USB時(shí)鐘頻率為48MHz,占空比為50%。在PLL操作范圍內(nèi),4位的分頻器允許從48MHz的任意偶數(shù)倍(即96MHz的任意倍數(shù))中獲得正確的USB時(shí)鐘。
注意:內(nèi)部RC時(shí)鐘不應(yīng)用做USB的時(shí)鐘,這是因?yàn)閁SB規(guī)范需要更精確的時(shí)鐘。USB時(shí)鐘配置寄存器的位描述如表2-15所示。
表2-14 USB時(shí)鐘配置寄存器的位描述

表2-15 IRC調(diào)整寄存器的位描述

USB時(shí)鐘從PLL0輸出信號(hào)中得到,通過(guò)USBSEL+1分頻。當(dāng)USBSEL=1時(shí),USB的時(shí)鐘頻率是PLL0輸出頻率的一半。
3.IRC調(diào)整寄存器(IRCTRIM-0x400FC1A4)
該寄存器用于調(diào)整片內(nèi)4MHz振蕩器。IRC調(diào)整寄存器的位描述如表2-15所示。
4.外設(shè)時(shí)鐘選擇寄存器0和1(PCLKSEL0-0x400F C1A8和PCLKSEL1-0x400F C1AC)
在外設(shè)時(shí)鐘選擇寄存器中,每組位控制了提供給對(duì)應(yīng)外設(shè)的時(shí)鐘信號(hào)的速率,如表2-16~表2-19所示。
表2-16 外設(shè)時(shí)鐘選擇寄存器PCLKSEL0的位描述

表2-17 外設(shè)時(shí)鐘選擇寄存器PCLKSEL11的位描述

表2-18 外設(shè)時(shí)鐘選擇寄存器的位描述

表2-19 功率控制寄存器

注:[1]復(fù)位值僅指在使用位中保存的數(shù)據(jù),不包括保留位的內(nèi)容。
注意:RTC模塊的外設(shè)時(shí)鐘固定為CCLK/8。
固件庫(kù)提供了操作PCLKSEL寄存器的函數(shù),即CLKPWR_SetPCLKDiv用于設(shè)置外設(shè)的pclk,如下所示。
void CLKPWR_SetPCLKDiv(uint32_t ClkType,uint32_t DivVal);//ClkType為被設(shè)置的外設(shè),其
//參數(shù)選取參見(jiàn)表2-12和表2-18;DivVal是外設(shè)的分頻,其參數(shù)選取參見(jiàn)表2-18
2.2.5 功率控制
功率控制類似于我們?nèi)粘I钪械墓?jié)約用電問(wèn)題:為了能夠達(dá)到節(jié)約用電的目的,我們經(jīng)常將一些不使用的電器設(shè)備的電源關(guān)閉,只有在使用的情況,才打開(kāi)這些設(shè)備的電源。
1.功率控制模式
LPC1700系列Cortex-M3微控制器支持四種功率控制的方式:睡眠模式、深度睡眠模式、掉電模式和深度掉電模式。CPU時(shí)鐘速率可通過(guò)改變時(shí)鐘源、重新配置PLL值和/或改變CPU時(shí)鐘分頻器值來(lái)控制,這就允許用戶根據(jù)應(yīng)用要求在功率和處理速度之間進(jìn)行權(quán)衡。此外,“外設(shè)功率控制器”可以關(guān)斷每個(gè)片上外設(shè),從而對(duì)系統(tǒng)功耗進(jìn)行良好的調(diào)整。
通過(guò)Cortex-M3執(zhí)行WFI(等待中斷)或WFE(等待異常)指令可以進(jìn)入任何低功耗模式。Cortex-M3內(nèi)部支持兩種低功耗模式:睡眠模式和深度睡眠模式,它們通過(guò)Cortex-M3系統(tǒng)控制寄存器中的SLEEPDEEP位來(lái)選擇。掉電模式和深度掉電模式通過(guò)PCON寄存器中的位來(lái)選擇。
LPC1700系列Cortex-M3微控制器還具有一個(gè)獨(dú)立電源域,可為RTC和電池RAM供電,以便在維持RTC和電池RAM正常操作時(shí),關(guān)閉其他設(shè)備的電源。
1)睡眠模式
注意:LPC1700系列Cortex-M3微控制器的睡眠模式對(duì)應(yīng)于LPC2XXX系列ARM器件的空閑模式。
當(dāng)進(jìn)入睡眠模式時(shí),內(nèi)核時(shí)鐘停止,且PCON的SMFLAG位置位。從睡眠模式中恢復(fù)并不需要任何特殊的序列,但要重新使能ARM內(nèi)核的時(shí)鐘。
在睡眠模式下,指令的執(zhí)行被中止,直至復(fù)位或中斷出現(xiàn)。外設(shè)在CPU內(nèi)核處于睡眠模式期間繼續(xù)運(yùn)轉(zhuǎn),并可產(chǎn)生中斷使處理器恢復(fù)執(zhí)行指令。在睡眠模式下,處理器內(nèi)核自身、存儲(chǔ)器系統(tǒng)、有關(guān)控制器及內(nèi)部總線停止工作,因此這些器件的動(dòng)態(tài)功耗會(huì)降低。
只要出現(xiàn)任何使能的中斷,CPU內(nèi)核就會(huì)從睡眠模式中喚醒。
2)深度睡眠模式
注意:LPC1700系列Cortex-M3微控制器的深度睡眠模式對(duì)應(yīng)于LPC2300和LPC2400系列ARM器件的睡眠模式。
當(dāng)芯片進(jìn)入深度睡眠模式時(shí),主振蕩器掉電且所有內(nèi)部時(shí)鐘停止,PCON的DSFLAG位置位,IRC保持運(yùn)行并且可配置為驅(qū)動(dòng)看門(mén)狗定時(shí)器,允許看門(mén)狗喚醒CPU。由于RTC中斷也可以用做喚醒源,所以32kHz的RTC振蕩器不停止。同時(shí),F(xiàn)lash進(jìn)入就緒模式,這樣可以實(shí)現(xiàn)快速喚醒,PLL自動(dòng)關(guān)閉并斷開(kāi)連接,CCLK和USBCLK時(shí)鐘分頻器自動(dòng)復(fù)位為0。
在深度睡眠模式期間,保存處理器狀態(tài)及寄存器、外設(shè)寄存器和內(nèi)部SRAM的值,并且將芯片引腳的邏輯電平保持為靜態(tài)。可通過(guò)復(fù)位或某些的特定中斷(能夠在沒(méi)有時(shí)鐘的情況下工作)來(lái)終止深度睡眠模式和恢復(fù)正常操作。由于芯片的所有動(dòng)態(tài)操作被中止,所以深度睡眠模式使功耗降低為一個(gè)極小的值。
在喚醒深度睡眠模式下,如果IRC在進(jìn)入深度睡眠模式前被使用,則2位IRC定時(shí)器開(kāi)始計(jì)數(shù),并且在定時(shí)器超時(shí)(4周期)后,恢復(fù)代碼執(zhí)行和外設(shè)活動(dòng)。如果使用主振蕩器,則12位主振蕩器定時(shí)器開(kāi)始計(jì)數(shù),并且在定時(shí)器超時(shí)(4096周期)時(shí)恢復(fù)代碼的執(zhí)行。用戶必須記得在喚醒后重新配置所需的PLL和時(shí)鐘分頻器。
只要相關(guān)的中斷使能,器件就可以從深度睡眠模式中喚醒。這些中斷包括NMI、外部中斷EINT0~EINT3、GPIO中斷、以太網(wǎng)Wake-On-LAN中斷、掉電檢測(cè)、RTC報(bào)警中斷、看門(mén)狗定時(shí)器超時(shí)、USB輸入引腳跳變或CAN輸入引腳跳變。
注意:外設(shè)的功率控制特性允許在應(yīng)用中關(guān)閉不需要的外設(shè),從而節(jié)省額外的功耗。該功能由PCONP寄存器實(shí)現(xiàn)。
3)掉電模式
掉電模式會(huì)執(zhí)行在深度睡眠模式下的所有操作,但關(guān)閉了Flash存儲(chǔ)器。進(jìn)入掉電模式會(huì)使PCON中的PDFLAG位置位,這樣節(jié)省了更多功耗。但是芯片被喚醒后,在訪問(wèn)Flash存儲(chǔ)器中的代碼或數(shù)據(jù)前,必須等待Flash恢復(fù)。
當(dāng)芯片進(jìn)入掉電模式時(shí),IRC、主振蕩器和所有時(shí)鐘都停止。如果RTC已使能,則它繼續(xù)運(yùn)行。RTC中斷也可用來(lái)喚醒CPU。同時(shí),F(xiàn)lash被強(qiáng)制進(jìn)入掉電模式;PLL自動(dòng)關(guān)閉并斷開(kāi)連接;CCLK和USBCLK時(shí)鐘分頻器自動(dòng)復(fù)位為0。
當(dāng)芯片處于掉電模式下被喚醒時(shí),如果在進(jìn)入掉電模式前使用了IRC,則經(jīng)過(guò)IRC的啟動(dòng)時(shí)間(60s)后,2位IRC定時(shí)器開(kāi)始計(jì)數(shù)并且在4個(gè)周期內(nèi)停止計(jì)數(shù)。如果用戶代碼在SRAM中,則在IRC計(jì)數(shù)4個(gè)周期后,用戶代碼會(huì)立即執(zhí)行;如果代碼在Flash中運(yùn)行,則在IRC計(jì)數(shù)4個(gè)周期后,啟動(dòng)Flash喚醒定時(shí)器,100s后完成Flash的啟動(dòng),開(kāi)始執(zhí)行代碼。當(dāng)定時(shí)器超時(shí)時(shí),可以訪問(wèn)Flash。用戶必須記得在喚醒后重新配置PLL和時(shí)鐘分頻器。
4)深度掉電模式
在深度掉電模式下,關(guān)斷整個(gè)芯片的電源(實(shí)時(shí)時(shí)鐘、引腳、WIC和RTC備用寄存器除外)。進(jìn)入深度掉電模式會(huì)使PCON中的DPDFLAG位置位。為了優(yōu)化功率,用戶可關(guān)閉額外選項(xiàng),可保留32kHz振蕩器的電源,或使用外部電路關(guān)閉片上調(diào)節(jié)器的電源。
當(dāng)使用外部復(fù)位信號(hào),或使能RTC中斷和產(chǎn)生RTC中斷時(shí),可將器件從深度掉電模式中喚醒。
2.寄存器描述
功率控制寄存器如表2-19所示。
1)功率模式控制寄存器(PCON-0x400F C0C0)
低功耗模式通過(guò)功率模式控制寄存器來(lái)控制,如表2-20所示。
表2-20 功率模式控制寄存器的位描述

PCON中的PM1和PM0位在必要時(shí)允許進(jìn)入低功耗模式。表2-21給出了LPC1700系列Cortex-M3微控制器支持的3種低功耗模式的編碼。
表2-21 低功耗模式的編碼

任何使能的中斷均可將CPU從睡眠模式中喚醒。某些特定的中斷可將處理器從深度睡眠模式或掉電模式中喚醒。
若特定的中斷使能,則允許中斷將CPU從深度睡眠模式或掉電模式中喚醒。喚醒后,將繼續(xù)執(zhí)行適當(dāng)?shù)闹袛喾?wù)程序。這些中斷為NMI、外部中斷EINT0~EINT3、GPIO中斷、以太網(wǎng)Wake-On-LAN中斷、掉電檢測(cè)中斷、RTC報(bào)警中斷。此外,如果看門(mén)狗定時(shí)器由IRC振蕩器驅(qū)動(dòng),則看門(mén)狗定時(shí)器也可將器件從深度睡眠模式中喚醒。
可以將CPU從深度睡眠或掉電模式中喚醒的其他功能有CAN活動(dòng)中斷(由CAN總線引腳上的活動(dòng)產(chǎn)生)和USB活動(dòng)中斷(由USB總線引腳上的活動(dòng)產(chǎn)生)。相關(guān)的功能必須映射到引腳且對(duì)應(yīng)的中斷必須使能,才能實(shí)現(xiàn)喚醒。
2)外設(shè)功率控制寄存器(PCONP-0x400FC0C4)
可通過(guò)PCONP寄存器關(guān)閉特定外設(shè)模塊的時(shí)鐘源來(lái)關(guān)閉外設(shè),以實(shí)現(xiàn)節(jié)電的目的。有少數(shù)外設(shè)功能不能被關(guān)閉(看門(mén)狗定時(shí)器、引腳連接模塊和系統(tǒng)控制模塊)。
某些外設(shè)(特別是那些含有模擬功能的外設(shè))的功耗可能與時(shí)鐘無(wú)關(guān)。這些外設(shè)有獨(dú)立的禁能控制,可通過(guò)關(guān)閉其電路來(lái)減少功耗。PCONP中的每個(gè)位都控制一個(gè)外設(shè),如表2-22所示。
表2-22 外設(shè)功率控制寄存器的位描述

如果外設(shè)控制位為1,則外設(shè)被使能;如果外設(shè)控制位為0,則外設(shè)的時(shí)鐘被禁能(關(guān)閉)以節(jié)省功耗。例如,如果位19為1,則I2C1接口使能;如果位19為0,則I2C1接口禁止。
注意:僅當(dāng)外設(shè)在PCONP寄存器中使能時(shí),才能夠從外設(shè)寄存器中有效讀取和有效寫(xiě)入外設(shè)寄存器。
注意:DAC外設(shè)在PCONP中沒(méi)有控制位。要想使能DAC,必須通過(guò)配置PINSEL1寄存器在相關(guān)的引腳P0.26上選擇其輸出。
LPC17XX在固件庫(kù)中提供操作PCONP寄存器的函數(shù):
void CLKPWR_ConfigPPWR(uint32_t PPType,FunctionalState NewState);//PPType是設(shè)備類型,
//對(duì)應(yīng)于表2-22中的位信息;NewState代表使能或禁用
3.功率控制的注意事項(xiàng)
復(fù)位后,PCONP寄存器包含使能所選的接口和外設(shè)(由PCONP控制)的值。因此,除了對(duì)外設(shè)相關(guān)的寄存器進(jìn)行配置外,用戶的應(yīng)用程序可能還需要訪問(wèn)PCONP寄存器,使能對(duì)應(yīng)的外設(shè)。
在需要控制功率的系統(tǒng)中,需要在PCONP寄存器中使能必要的外設(shè),而寄存器的其他“保留”位或當(dāng)前不使用的外設(shè)所對(duì)應(yīng)的位都必須清零。
2.3 LPC17XX的引腳
2.3.1 LPC17XX的引腳連接模塊
LPC176X的100腳引腳封裝如圖2-6所示。

圖2-6 LPC176X的100腳引腳封裝
LPC17XX具有5路GPIO口,分別是P0、P1、P2、P3、P4。如表2-23所示是LPC176X的引腳描述。
表2-23 LPC176X的引腳描述

續(xù)表

續(xù)表

續(xù)表

續(xù)表

續(xù)表

續(xù)表

續(xù)表

P0口是一個(gè)32位I/O端口,每一位都具有獨(dú)立的方向控制。P0口引腳的操作取決于引腳連接模塊所選擇的功能。P0口的12、13、14和31位不可用。
P1口是一個(gè)32位I/O端口,每一位都具有獨(dú)立的方向控制。P1口引腳的操作取決于引腳連接模塊所選擇的功能。P1口的引腳P1.2、P1.3、P1.5、P1.6、P1.7、P1.11、P1.12和P1.13不可用。
P2口是一個(gè)32位I/O端口,每一位都具有獨(dú)立的方向控制。P2口引腳的操作取決于引腳連接模塊所選擇的功能。P2口的引腳P2.14~P2.31不可用。
P3口是一個(gè)32位I/O端口,每一位都具有獨(dú)立的方向控制。P3引腳的操作取決于引腳連接模塊所選擇的功能。P3口的引腳P3.0~P3.24、P3.27~P3.31不可用。
P4口是一個(gè)32位I/O端口,每一位都具有獨(dú)立的方向控制。P4口引腳的操作取決于引腳連接模塊所選擇的功能。P4口的引腳P4.0~P4.27、P4.30和P4.31不可用。
只要不在表2-23中特別指出,LPC17XX的I/O端口均能承受5V電壓,且具有輸入滯后的特點(diǎn)。晶振引腳、電源引腳,以及參考電壓引腳不能承受5V電壓。如果引腳被選為ADC功能,且具有電壓值不能超過(guò)VREFP引腳的電壓,則此時(shí)它不能承受5V電壓。
2.3.2 LPC17XX的引腳配置寄存器
LPC17XX的引腳功能是復(fù)用的。引腳連接模塊使得LPC17XX的大部分引腳具有1個(gè)以上的功能。配置寄存器控制多路開(kāi)關(guān)以實(shí)現(xiàn)引腳與片內(nèi)外設(shè)之間的連接。
在使用外設(shè)時(shí),外設(shè)應(yīng)先連接到適當(dāng)?shù)囊_,再激活,需要時(shí)使能相關(guān)中斷。任何一個(gè)沒(méi)有映射到相關(guān)功能引腳的使能外設(shè),都將被認(rèn)為是未定義的。當(dāng)選擇了引腳上的1個(gè)功能時(shí),該引腳上的其他可用功能無(wú)效。
引腳連接模塊共有27個(gè)寄存器,分別是11個(gè)引腳功能寄存器、10個(gè)引腳模式寄存器、5個(gè)開(kāi)漏模式控制寄存器、1個(gè)I2C引腳配置寄存器。
注意:LPC177X/8X的寄存器使用與此不同,采用的是每個(gè)引腳有一個(gè)獨(dú)立寄存器的形式。
1.引腳功能選擇寄存器
PINSEL寄存器控制器件引腳的功能如表2-24所示。每個(gè)寄存器有32位,2比特為一組,寄存器中的每一組位對(duì)應(yīng)著特定的器件引腳功能。以P0端口為例,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]引腳。
表2-24 引腳功能選擇寄存器的位描述

PINSEL0~PINSEL9寄存器,每?jī)蓚€(gè)寄存器控制一個(gè)端口組:PINSEL0用于P0[0:15];PINSEL1用于P0[31:16];PINSEL2用于P1[0:15];PINSEL3用于P1[31:16];PINSEL4用于P2[0:15];PINSEL5用于P2[31:16];PINSEL6用于P3[0:15];PINSEL7用于P3[31:16];PINSEL8用于P4[0:15];PINSEL9用于P4[31:16]。
僅當(dāng)引腳選擇GPIO功能時(shí),GPIO寄存器中的方向控制位才有效。對(duì)于其他功能來(lái)說(shuō),方向是自動(dòng)控制的。每個(gè)外圍器件通常有不同的引腳配置,因此每個(gè)引腳可能有不同的功能組合。
既然一個(gè)特定的外設(shè)功能可以指派給一個(gè)或多個(gè)引腳,則原則上配置多個(gè)引腳執(zhí)行相同功能是可行的。如果一個(gè)外設(shè)輸出功能被配置到多個(gè)引腳上,它將在多個(gè)引腳上都輸出外設(shè)功能信號(hào)。如果一個(gè)外設(shè)輸入功能配置到多個(gè)引腳上,將讀出最低端口號(hào)。例如,P0端口上的所有引腳優(yōu)先級(jí)高于其余端口;所有端口中的引腳0的優(yōu)先級(jí)高于本端口其他端口的優(yōu)先級(jí)。
2.引腳模式選擇寄存器(PINMODE)
如表2-25所示是引腳模式選擇寄存器的位描述,該寄存器用于控制所有端口的工作模式,包括使用片內(nèi)上拉/下拉電阻和特定的開(kāi)漏操作。除用于I2C0接口的I2C引腳和USB引腳外,不管引腳選擇用做何種功能,都可以為每一個(gè)端口引腳選擇片內(nèi)上拉/下拉電阻。使用三個(gè)位來(lái)控制端口引腳的模式,其中兩個(gè)位于PINMODE中,另一個(gè)位于PINMODE_OD中。在PINSEL中未使用的引腳看成保留位。
表2-25 引腳模式選擇寄存器的位描述

當(dāng)引腳處于邏輯高電平時(shí),中繼模式使能上拉電阻;當(dāng)引腳處于邏輯低電平時(shí),使能下拉電阻。當(dāng)引腳配置為輸入且不是通過(guò)外部驅(qū)動(dòng)時(shí),引腳將保持上一個(gè)已知狀態(tài)。
如表2-26所示是開(kāi)漏引腳模式選擇寄存器(PINMODE_OD)的位描述,該寄存器用于控制端口的開(kāi)漏模式。當(dāng)引腳被配置為輸出且值為0時(shí),開(kāi)漏模式會(huì)正常地將引腳電平拉低。但是如果輸出引腳值為1,則引腳的輸出驅(qū)動(dòng)關(guān)閉,等同于改變了引腳的方向。這樣的組合就模擬了一個(gè)開(kāi)漏輸出。
表2-26 開(kāi)漏引腳模式選擇寄存器的位描述

如表2-27所示是引腳連接模塊的寄存器總表。當(dāng)外部復(fù)位、看門(mén)狗復(fù)位、上電復(fù)位(POR)和掉電檢測(cè)復(fù)位(BOD)發(fā)生時(shí),引腳連接模塊中的所有寄存器均復(fù)位為“0”。
表2-27 引腳連接模塊的寄存器總表

注:[1]復(fù)位值僅反映已使用位中保存的數(shù)據(jù),不包含保留位的內(nèi)容。
3.固件庫(kù)函數(shù)
在lpc17xx_pinsel.c文件中包含了關(guān)于引腳配置的調(diào)用函數(shù)。主要有3個(gè)配置函數(shù),分別是:
void PINSEL_ConfigPin(PINSEL_CFG_Type*PinCfg);實(shí)現(xiàn)端口配置,傳遞參數(shù)是PINSEL_ CFG_Type結(jié)構(gòu)體類型的數(shù)據(jù) void PINSEL_ConfigTraceFunc(FunctionalState NewState);配置跟蹤調(diào)試功能 void PINSEL_SetI2C0Pins(uint8_t i2cPinMode,FunctionalState filterSlewRateEnable);設(shè)置I2C0引腳
下列程序給出了PINSEL_CFG_Type的定義,以及使用PINSEL_ConfigPin函數(shù)進(jìn)行端口引腳配置時(shí)傳遞的結(jié)構(gòu)體:
typedef struct { uint8_t Portnum;//端口號(hào),參數(shù)應(yīng)該是PINSEL_PORT_x,其中x是0~4之間的數(shù) uint8_t Pinnum;//引腳號(hào) uint8_t Funcnum;//功能代碼,參數(shù)范圍是0~3 uint8_t Pinmode;/*引腳模式 ,參數(shù)可能是 - PINSEL_PINMODE_PULLUP:內(nèi)部上拉電阻 -PINSEL_PINMODE_TRISTATE: 既不上拉也不下拉電阻 -PINSEL_PINMODE_PULLDOWN:內(nèi)部下拉電阻 */ uint8_t OpenDrain;/*開(kāi)漏模式,參數(shù)可能是: -PINSEL_PINMODE_NORMAL: 正常模式 -PINSEL_PINMODE_OPENDRAIN: 開(kāi)漏模式*/ } PINSEL_CFG_Type;
2.4 最小系統(tǒng)設(shè)計(jì)
本節(jié)結(jié)合前面介紹的硬件基礎(chǔ)知識(shí),給出LPC1768的最小系統(tǒng)設(shè)計(jì)原理圖,如圖2-7所示。由于LPC1768使用3.3V供電模式,所以這里使用了SPX117M模塊將5V電源轉(zhuǎn)換成3.3V電源。3.3V數(shù)字電源與數(shù)字地分別經(jīng)過(guò)0Ω電阻隔離成3.3V模擬電源和模擬地,然后分別連接到VDDA、VREF、VSSA、VREFN。

圖2-7 最小系統(tǒng)設(shè)計(jì)原理圖
該設(shè)計(jì)采用了外部晶振的振蕩模式,晶振為12MHz。LPC1768使用8個(gè)耦合電容,比NXP公司的LPC22XX系列小了很多,有利于進(jìn)行PCB設(shè)計(jì)。
說(shuō)明:這里的LPC17XX的原理圖并不完整,僅給出了相關(guān)部分。
2.5 小結(jié)
本章是理解LPC17XX的基礎(chǔ)。本章給出了LPC17XX的結(jié)構(gòu)框圖,晶振的使用、配置,以及LPC17XX的引腳,并結(jié)合以上知識(shí),給出了LPC1768的最小系統(tǒng)設(shè)計(jì)原理圖。
第3章將給出進(jìn)行LPC17XX軟件設(shè)計(jì)的基礎(chǔ)。
- 數(shù)據(jù)展現(xiàn)的藝術(shù)
- 輕輕松松自動(dòng)化測(cè)試
- Learning Social Media Analytics with R
- 嵌入式Linux上的C語(yǔ)言編程實(shí)踐
- Prometheus監(jiān)控實(shí)戰(zhàn)
- Visual FoxPro數(shù)據(jù)庫(kù)基礎(chǔ)及應(yīng)用
- 菜鳥(niǎo)起飛系統(tǒng)安裝與重裝
- 基于Xilinx ISE的FPAG/CPLD設(shè)計(jì)與應(yīng)用
- PowerPoint 2010幻燈片制作高手速成
- 運(yùn)動(dòng)控制系統(tǒng)
- Appcelerator Titanium Smartphone App Development Cookbook(Second Edition)
- 系統(tǒng)建模與控制導(dǎo)論
- Spark Streaming實(shí)時(shí)流式大數(shù)據(jù)處理實(shí)戰(zhàn)
- 微控制器的選擇與應(yīng)用
- fastText Quick Start Guide