LPCXpresso環(huán)境下的LPC1100低功耗模式和喚醒時(shí)鐘
1.簡(jiǎn)介
基于ARM Cortex-M0 CPU架構(gòu),LPC1100微控制器系列(8/16位應(yīng)用),高性能、低功耗、簡(jiǎn)易指令、存儲(chǔ)器尋址,與現(xiàn)有的8/16架構(gòu)相比,代碼體積更小。
LPC1100系列外設(shè)包括32KB flash 存儲(chǔ)器,8KB數(shù)據(jù)存儲(chǔ)器,一個(gè)C-CAN控制器(LPC11Cxx),一個(gè)高速+IIC總線接口,一個(gè)RS-485/EI-485UART,兩個(gè)SPI接口(SSP特性),4個(gè)通用定時(shí)器,一個(gè)10位ADC,以及42個(gè)通用I/0引腳。
LPC11Cxx系列包含片上C-CAN驅(qū)動(dòng)和通過(guò)C-CAN在線系統(tǒng)編程flash工具。LPC11C2x系列有一個(gè)片上高速CAN收發(fā)器。
LPC11xx(L)系列包含片上功率配置部件。
LPC1100系列定位于一系列廣泛的應(yīng)用,包括eMetering、照明、工業(yè)網(wǎng)絡(luò)、報(bào)警系統(tǒng)以及白色家電。
本文檔介紹了LPC11xx系列,LPC11xx(L)系列和LPC11Cxx系列的各種低功耗模式。進(jìn)入低功耗模式、喚醒狀態(tài),可以有效降低功耗。本文檔同時(shí)提供了一個(gè)軟件示例,使用LPC1114 LPCXpresso板進(jìn)入低功耗模式測(cè)量功耗和喚醒時(shí)鐘。
本文檔包括以下要點(diǎn):
- (1) 低功耗模式
- (2) 進(jìn)入低功耗模式
- (3) 喚醒狀態(tài)
- (4) 降低功耗
- (5) LPC1114 LPCXpresso低功耗模式演示
2.低功耗模式
LPC11xx\、LPC11xx(L)、LPC11Cxx系列有三種省電模式:睡眠模式、深度睡眠模式和深度掉電(Power-down)模式。以下內(nèi)容包含了低功耗模式的特性和配置。
2.1.1 睡眠模式
在睡眠模式,ARM Cortex-M0 內(nèi)核系統(tǒng)時(shí)鐘停止,指令的執(zhí)行暫停,直到復(fù)位或者發(fā)生中斷。
外設(shè)功能,如果選擇SYSAHBCLKCTRL寄存器計(jì)時(shí),在睡眠模式繼續(xù)操作,則會(huì)產(chǎn)生中斷,恢復(fù)處理器運(yùn)行。睡眠模式取消了動(dòng)態(tài)功率(用于處理器自身、存儲(chǔ)器系統(tǒng)和相關(guān)的控制器、內(nèi)部總線)。處理器狀態(tài)和寄存器、外設(shè)寄存器、內(nèi)部SRAM的值保持不變,引腳的邏輯電平不變。
2.1.2 深度睡眠模式
在深度睡眠模式,與睡眠模式一樣,處理器系統(tǒng)時(shí)鐘不可用。所有的模擬塊都掉電,除了BOD電路和看門狗震蕩器(必須在深度睡眠模式期間,在PDSLEEPCFG寄存器中選定或取消選定)。詳細(xì)內(nèi)容請(qǐng)參考3.5部分。
深度睡眠模式取消了所有用于flash、模擬外設(shè)的電源,用于處理器自身、存儲(chǔ)器系統(tǒng)和相關(guān)控制器、內(nèi)部總線的動(dòng)態(tài)電源。處理器狀態(tài)和寄存器、外設(shè)寄存器以及內(nèi)部SRAM的值保持不變,引腳的邏輯電平不變。
2.1.3 深度掉電模式
在濃度掉電模式,WAKEUP引腳的異常切斷了整個(gè)芯片的電源和時(shí)鐘。在深度掉電模式期間,不保留SRAM和寄存器的內(nèi)容,除了少數(shù)保存在電源管理單元中的5個(gè)32位通用寄存器的數(shù)據(jù)。
在深度掉電模式下,所有的功能引腳都是三態(tài)的,除了WAKEUP引腳。
3.進(jìn)入低功耗模式
這部分描述了LPC11xx、LPC11xx(L)、LPC11Cxx系列進(jìn)入三種低功耗模式的機(jī)制(睡眠模式、深度睡眠模式、深度掉電模式)。
3.1 系統(tǒng)控制寄存器(SCR)
SCR寄存器控制進(jìn)入和退出低功耗模式的特性。
在Cortex-M0 系統(tǒng)控制寄存器(SCR)中,通過(guò)設(shè)置SLEEPDEEP位,進(jìn)入睡眠模式和深度睡眠模式。
位描述如圖1所示。
圖1 系統(tǒng)控制寄存器(SCR,0xE000ED10)
在Cortex-M0系統(tǒng)控制寄存器(SCR)中,如果SLEEPDEEP 位是0,則是睡眠模式。
在Cortex-M0系統(tǒng)控制寄存器(SCR)中,如果SLEEPDEEP 位是1,則是深度睡眠模式。
3.2 電源控制寄存器(PCON)
PCON寄存器選擇哪種睡眠模式(睡眠模式或深度睡眠模式),或者進(jìn)入深度掉電模式。PCON分別提供了睡眠/深度睡眠模式和深度掉電模式的標(biāo)志位,參看圖2。
圖2 電源模式控制寄存器
3.3 中斷等待(WFI)指令
設(shè)置完SLEEPDEEP位和PCON寄存器,執(zhí)行WFI指令將直接進(jìn)入低功耗省電模式。WFI指令是Cortex-M0指令,不能用ANSI C 直接訪問(wèn)。CMSIS(Cortex 微控制器軟件接口標(biāo)準(zhǔn))提供了一個(gè)內(nèi)置函數(shù),生成WFI指令,支持C編譯器。
如果C編譯器不支持WFI內(nèi)置函數(shù),用戶必須使用匯編代碼執(zhí)行WFI指令。
3.4 進(jìn)入睡眠模式的編程步驟
以下是進(jìn)入睡眠模式的步驟:
- (1) PCON寄存器的DPDEN位必須設(shè)置為0。
- (2) ARM Cortex-M0 SCR 寄存器的SLEEPDEEP位必須設(shè)置為0。
- (3) 使用ARM Cortex-M0中斷等待指令(WFI)。
圖3為進(jìn)入睡眠模式的示例代碼
圖3 示例代碼(睡眠模式)
3.5 進(jìn)入深度睡眠模式的編程步驟
以下為進(jìn)入深度睡眠模式的步驟:
- (1)PCON寄存器的DPDEN位必須設(shè)置為0。
- (2)在PDSLEEPCFG寄存器深度睡眠模式下選擇電源配置。
當(dāng)器件進(jìn)入深度睡眠模式,這個(gè)寄存器控制看門狗震蕩器和BOD電路。在進(jìn)入深度睡眠模式之前,必須至少一次使用下圖中的值初始化這個(gè)寄存器。初始化失敗,可能導(dǎo)致微控制器未定義錯(cuò)誤。圖4所列的是PDSLEEPCFG寄存器所允許的值。
圖4 PDSLEEPCFG寄存器設(shè)置(深度睡眠模式)
- a.如果定時(shí)器需要控制自身喚醒,確保在PDRUNCFG寄存器中設(shè)置看門狗震蕩器,并在MAINCLKSEL寄存器中選擇看門狗震蕩器的時(shí)鐘源(細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè))。
- b.看門狗震蕩器可以運(yùn)行在深度睡眠模式,為看門狗定時(shí)器或者通用定時(shí)器提供時(shí)鐘,如果它們需要自喚醒。更多細(xì)節(jié)請(qǐng)參考3.7部分。在這種情況下,看門狗震蕩器模擬輸出頻率必須設(shè)置為它的最低值(WDTOSCCTRL中位FREQSEL=0001,參考LPC11XX用戶手冊(cè)),進(jìn)入深度睡眠模式之前,在SYSAHBCLKCTRL寄存器中設(shè)置外設(shè)時(shí)鐘為不可用(除了定時(shí)器時(shí)鐘)。如果在深度睡眠模式下運(yùn)行看門狗震蕩器,將產(chǎn)生額外的電流損耗。
- c.如果沒(méi)有定時(shí)器自喚醒需要,且看門狗震蕩器關(guān)閉,確保在PDRUNCFG寄存器中設(shè)置對(duì)IRC的供電,并在進(jìn)入深度睡眠模式前在MAINCLKSEL寄存器中為IRC選擇時(shí)鐘源。這樣能確保順利關(guān)閉系統(tǒng)時(shí)鐘(更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè))。
- d.在深度睡眠模式下,使能BOD電路可以在低壓下保護(hù)器件。雖然,在深度睡眠模式下,BOD電路會(huì)產(chǎn)生額外電流損耗。
(3) 喚醒之后,在PDAWAKECFG寄存器中選擇電源配置??梢栽诩拇嫫髦袑?duì)該位進(jìn)行編程,以決定芯片從深度睡眠模式喚醒時(shí)進(jìn)入的狀態(tài)。
(4) 如果使用外部引腳作為喚醒引腳,則在開始邏輯寄存器中使能并清除該喚醒引腳,并在NVIC中使能匹配開始邏輯的中斷。
(5) 在SYSAHBCTRL寄存器中,禁用所有的外設(shè),除了計(jì)數(shù)器/定時(shí)器或WDT(如果需要)。
(6) 在ARM Cortex-M0 SCR 寄存器中,SLEEPDEEP位寫入1。
(7) 使用AMR Cortex-M0 中斷等待指令(WFI)。
圖5為進(jìn)入深度睡眠模式的示例代碼
圖5 代碼示例(深度睡眠模式)
3.6 進(jìn)入深度掉電模式的編程步驟
進(jìn)入深度掉電模式的步驟如下:
- (1)在PCON寄存器中,DPDEN位寫入1。
- (2)保存通用寄存器中的數(shù)據(jù)(更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè))。
- (3)ARM Cortex-M0 SCR 寄存器,SLEEPDEEP位寫入1。
- (4)在進(jìn)入深度掉電模式之前,在PDRUNCFG寄存器中,IRCOUT-PD和IRC-PD位寫入0,以確保對(duì)IRC供電。
- (5)使用ARM Cortex-M0 中斷等待指令(WFI)。
請(qǐng)注意,在進(jìn)入深度掉電模式之前,WAKEUP引腳需要外部拉高。
圖6 示例代碼(深度掉電模式)
3.7 喚醒
以下部分描述了LPC11xx、LPC11xx(L)、LPC11Cxx系列每種模式的喚醒。
3.7.1.1 從睡眠模式喚醒
當(dāng)NVIC 中斷或者復(fù)位發(fā)生時(shí),自動(dòng)退出睡眠模式。關(guān)于哪個(gè)中斷源與NVIC連接,請(qǐng)參考LPC11XX用戶手冊(cè)。中斷喚醒后,微控制器返回到最開始的電源配置狀態(tài)(由PDRUNCFG和SYSAHBCLKDIV寄存器決定)。如果發(fā)生復(fù)位,微控制器進(jìn)入激活模式的默認(rèn)狀態(tài)。
3.7.1.2 從深度睡眠模式喚醒
微控制器從深度睡眠模式喚醒有以下幾種方式:
(1) 連接到開始邏輯(start logic)的外部引腳信號(hào)。某一端口引腳可以作為開始邏輯的輸入。關(guān)于有哪些端口引腳連接到開始邏輯并可作為喚醒引腳,請(qǐng)參考LPC11XX用戶手冊(cè)。開始邏輯不需要任何時(shí)鐘,如果在NVIC中使能從深度睡眠模式喚醒,則可以產(chǎn)生中斷。
(2) 開始邏輯的輸入信號(hào)(由某一通用定時(shí)器外部輸入引起的事件所產(chǎn)生)。引腳(保持定時(shí)器匹配功能)在NVIC中設(shè)置為開始邏輯的輸入,在SYSABHCLKCTRL寄存器中使能相應(yīng)的定時(shí)器,且看門狗震撼器運(yùn)行在深度睡眠模式(更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè))。當(dāng)觸發(fā)了相匹配的輸入時(shí),喚醒機(jī)制允許器件自喚醒。如圖7所示,反饋到開始邏輯,引發(fā)器件自喚醒。這種方式不需要外部觸發(fā),減少了板上的外部元件。用這種方法所花的喚醒時(shí)間比第一種方法長(zhǎng)。關(guān)于喚醒時(shí)間將在演示部分討論。
圖7 自喚醒框圖
(3) BOD電路復(fù)位。此時(shí),需要在PDSLEEPCFG寄存器中使能BOD電路,且在BODCTRL寄存器中使能BOD復(fù)位(更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè))。
(4) 看門狗定時(shí)器復(fù)位。此時(shí),看門狗震蕩器必須運(yùn)行在深度睡眠模式(參看PDSLEEPCFG寄存器),且在SYSAHBCLKCTRL寄存器中使能看門狗定時(shí)器外設(shè)。
(5) 外部RESET引腳。
3.7.1.3 從深度掉電模式喚醒
拉低WAKEUP引腳從深度掉電喚醒,芯片復(fù)位。WAKEUP引腳最小脈沖寬度為50ns。
(1) 當(dāng)WAKEUP引腳從高電平到低電平轉(zhuǎn)換時(shí),喚醒有效(電平觸發(fā))。
- a.電源管理單元(PMU)打開片上電壓調(diào)節(jié)器。當(dāng)內(nèi)核電壓達(dá)到電源復(fù)位(power-on-reset)跳變點(diǎn),系統(tǒng)復(fù)位,芯片重新引導(dǎo)。
- b.所有寄存器(除了GPREG0-GPREG4、PCON)回到復(fù)位狀態(tài)。
(2) 一旦芯片引導(dǎo)完成,可以從PCON寄存器中讀取深度掉電標(biāo)志位,以確認(rèn)由喚醒事件引發(fā)的復(fù)位。
(3) 清除PCON寄存器深度掉電標(biāo)志位。
(4) (可選)讀取通用寄存器保存的數(shù)據(jù)。
請(qǐng)注意,RESET引腳在深度掉電模式下沒(méi)有任何功能。
3.8 降低功耗補(bǔ)充材料
進(jìn)一步降低電流損耗,可以考慮以下幾點(diǎn):
3.8.1.1 CPU時(shí)鐘頻率
可以根據(jù)需要控制CPU時(shí)鐘頻率。
(1) 改變時(shí)鐘源:內(nèi)部震蕩器(12MHz +/-1%)、系統(tǒng)震蕩器(1MHz to 25MHz),看門狗震蕩器(7.8kHz to 1.7MHz +/-40%)。
(2) 重設(shè)PLL的值,和/或變更AHB Clock Divider(SYSAHBCLKDIV)的值。
(3) 降低PLL輸出頻率(FCCO,156MHz to 320MHz)可以降低功耗。
(4) 8位系統(tǒng)AHB Clock divider寄存器(SYSAHBCLKDIV)可以降低CPU的操作到某一低的頻率,臨時(shí)降低功耗而無(wú)需關(guān)閉SYS PLL。見(jiàn)圖8所示。
圖8 時(shí)鐘發(fā)生單元(CGU)框圖
3.9 系統(tǒng)AHB 時(shí)鐘控制寄存器(AHBCLKCTRL)
如圖8所示,SYSAHBCLKCTRL寄存器使能系統(tǒng)和外充模塊的時(shí)鐘。根據(jù)需要,用戶可以使用該寄存器禁用未使用的外設(shè)時(shí)鐘,以達(dá)到降低功耗的目的。更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè)。
3.10 外設(shè)時(shí)鐘除法器
選定的外設(shè)有各自的時(shí)鐘除法器(SPI0CLKDIV,UARTCLKDIV,SPI1CLKDIV,WDTCLKDIV,CLKOUTDIV),可以控制提供給相應(yīng)外設(shè)的時(shí)鐘信號(hào)的頻率(見(jiàn)圖8)。根據(jù)實(shí)際需要,用戶可以使用除法器降低外設(shè)時(shí)鐘頻率或者關(guān)閉時(shí)鐘以降低功耗。更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè)。
3.11 掉電配置寄存器(PDRUNCFG)
PDRUNCFG 寄存器包含模擬塊電源開關(guān)的控制位,通過(guò)模擬外設(shè)可以消除電源消耗。更多細(xì)節(jié)請(qǐng)參考LPC11XX用戶手冊(cè)。
3.12 其他
3.12.1 軟件
大部分嵌入式應(yīng)用都以while(1) loop 結(jié)束,用于中斷。此時(shí),仍然從片上flash獲取代碼并執(zhí)行,增加了功耗。一種較好的解決方案是選擇睡眠省電模式,并等待中斷。外設(shè)的中斷可以把器件從睡眠模式喚醒。內(nèi)核在等待中斷時(shí)保持睡眠模式,可以有效的降低功耗。
3.12.2 端口引腳
可以增加一些步驟,在低功耗模式下降低電流損耗。LPC11xx、LPC11xx(L)、LPC11Cxx系列的通用端口引腳,默認(rèn)可編程內(nèi)部拉高。在進(jìn)入低功耗模式之前,可以通過(guò)以下幾種方法降低IO的電流:
(1) 所有通用I/O引腳(GPIO)默認(rèn)帶有輸入上拉電阻。首先,使用IOCON寄存器,禁用所有通用端口引腳內(nèi)部上拉(pull-ups)。其次,設(shè)置I/O為GPIO輸出,低電平。確保引腳沒(méi)有外部拉高。
(2) 所有通用I/O引腳(GPIO)默認(rèn)帶有輸入上拉電阻。首先,使用IOCON寄存器,禁用所有通用端口引腳內(nèi)部上拉(pull-ups)。其次,設(shè)置I/O為GPIO輸出,高電平。確保引腳沒(méi)有外部拉低。
(3) 使用IOCON寄存器,首先,禁用所有通用端口引腳內(nèi)部上拉(pull-ups)。其次,設(shè)置I/O為GPIO輸入且使用外部電阻,把I/O拉高或拉低。
請(qǐng)注意,在深度睡眠模式,端口引腳的狀態(tài)不影響電流的損耗,以上提到的方法在這個(gè)模式下無(wú)需考慮。
3.12.3 CAN引腳
LPC11C1x器件,如果不使用CAN部件,CAN引腳(CAN-RXD和CAN-TXD)建議外部拉低,以降低IO電流。
3.12.4 RESET-N/PIO0-0引腳
LPC11xx、LPC11xx(L)、LPC11Cxx,在深度掉電模式時(shí),RESET/PIO0-0引腳需要通過(guò)外部10K-47K電阻拉高。如果引腳懸空,用戶可以看到電流損耗的增加。
3.12.5 調(diào)試
用戶應(yīng)該知道的關(guān)于一些調(diào)度的限制。最重要的是,由于Cortex-M0集成方面的一些限制,LPC11xx、LPC11xx(L)、LPC11Cxx在一般方式下,不能從睡眠、深度睡眠和深度掉電模式下喚醒。建議不要在這些模式下調(diào)試。一旦通過(guò)SWD接口下載應(yīng)用程序,USB和SWD之間的適配器要從板上移除。另一個(gè)問(wèn)題是,調(diào)式模式改變了Cortex-M0 CPU處理降低功耗模式的方式。這將導(dǎo)致器件級(jí)的電源模式不同于通常模式下的操作。這些不同,意味著在調(diào)試時(shí)不能測(cè)試電源;在應(yīng)用中,測(cè)試結(jié)果將比通常操作時(shí)要高。
4.低功耗模式演示
5.總結(jié)
下載完整PDF文檔: