為低功耗應(yīng)用選擇正確的 µC 外圍器件
選擇內(nèi)部振蕩器時(shí)應(yīng)慎重。雖然某些內(nèi)部振蕩器可以在數(shù)微秒內(nèi)喚醒處理器,但是,必須在經(jīng)過(guò)數(shù)毫秒,當(dāng)外部晶體達(dá)到穩(wěn)定之后, 才能以更高的速度運(yùn)行,然后 CPU 時(shí)鐘才能切換到更高的頻率。例如,如果一個(gè) 100 MIP 的處理器有一個(gè) 20kHz 的內(nèi)部時(shí)鐘,該時(shí)鐘與外部振蕩器的 1 MHz 時(shí)鐘同時(shí)啟動(dòng),內(nèi)部振蕩器將仍然能夠執(zhí)行 999 條指令,而更高速度的處理器用同樣的時(shí)間只能執(zhí)行 20 條指令。
定時(shí)器
利用好定時(shí)器有助于在處理器保持待機(jī)狀態(tài)的情況下實(shí)現(xiàn)系統(tǒng)處理功能。由于定時(shí)器功耗非常小,因此這有助于大大降低功耗。應(yīng)該使用實(shí)時(shí)時(shí)鐘模塊接受 32kHz 計(jì)時(shí)器定時(shí)器輸入和設(shè)置不同時(shí)間間隔的“警報(bào)”或中斷,在無(wú)需處理器干預(yù)的情況下,使計(jì)時(shí)器計(jì)數(shù)增加。同樣,應(yīng)該使用影子寄存器更新和比較來(lái)自 ISR 的值。一旦寄存器讀到有效的預(yù)編程值,即觸發(fā) ISR,使處理器脫離休眠或待機(jī)狀態(tài),而不需要 CPU 尋找 ISR 地址、更新周期或比較值。
管理開(kāi)銷(xiāo)
管理開(kāi)銷(xiāo)系統(tǒng)監(jiān)視程序、監(jiān)管工作有助于防范不安全的狀況,有關(guān)器件包括電壓監(jiān)控器和看門(mén)狗定時(shí)器。由于數(shù)字電路依賴(lài)觸發(fā)器或從負(fù)到正(或相反亦然)狀態(tài)的轉(zhuǎn)換,因此,即使工作電壓有稍小的下降,也可能會(huì)意外觸發(fā) RESET 條件,從而造成系統(tǒng)無(wú)法工作。電力減弱保護(hù)作為電壓監(jiān)控的一部分,一般用于確保電壓瞬變不會(huì)強(qiáng)制處理器進(jìn)入和退出RESET 狀態(tài)。
只要有可能,在電壓監(jiān)控解決方案中應(yīng)采用不可屏蔽的中斷 (NMI) 來(lái)識(shí)別電壓瞬變。這種方法讓用戶能隨心所欲地設(shè)定電壓觸發(fā)的門(mén)限電平,無(wú)需系統(tǒng)復(fù)位條件,其功耗一般比模擬-數(shù)字轉(zhuǎn)換器 (ADC) 通道更低。
看門(mén)狗定時(shí)器監(jiān)視故障情況。雖然在典型的嵌入式應(yīng)用中,內(nèi)嵌的系統(tǒng)程序器往往禁用看門(mén)狗定時(shí)器,但是在低功耗系統(tǒng)中,在電源電壓不穩(wěn)定的情況下,看門(mén)狗定時(shí)器是一種有用的工具??撮T(mén)狗定時(shí)器會(huì)執(zhí)行預(yù)先設(shè)定功能,例如在符合某些條件時(shí),比如電壓過(guò)低或有內(nèi)存問(wèn)題時(shí),向處理器發(fā)出 RESET 指令。所選擇的處理器應(yīng)該能夠生成已知的 ISR,使處理器無(wú)需執(zhí)行 RESET 而恢復(fù)聯(lián)機(jī)狀態(tài);因?yàn)閳?zhí)行 RESET,必須啟動(dòng)外圍設(shè)備,因而會(huì)消耗更多的處理器功率。
UART 通信
將一個(gè)數(shù)字時(shí)鐘與另一個(gè)數(shù)字時(shí)鐘精確到秒地同步是不可能的,因?yàn)槊總€(gè)時(shí)鐘均與其內(nèi)部晶體同步。在 MCU 驅(qū)動(dòng)的系統(tǒng)中,低功耗模式下使用的 32kHz 實(shí)時(shí)時(shí)鐘晶體與用于生成UART 波特率的普通 38.4kHz 頻率之間會(huì)出現(xiàn)類(lèi)似的同步問(wèn)題。因?yàn)閷?shí)時(shí)時(shí)鐘的 32,768 頻率使 15 位寄存器每秒溢出一次,所以非常適合時(shí)間保持(time-keeping) 應(yīng)用。比較而言,在UART 中使用相同的頻率,則在典型的 10 位(起始位、8 位數(shù)據(jù)和 1 個(gè)奇偶校驗(yàn)位)傳輸中保證至少有一位讀取不正確。這是由于 32,768Hz 時(shí)鐘必須除以 3.4,才能得到 9,600 波特率。由于沒(méi)有 3.4 這一選擇,因此必須選擇除以 3 或除以 4(參見(jiàn)圖2)。
將一個(gè)數(shù)字時(shí)鐘與另一個(gè)數(shù)字時(shí)鐘精確到秒地同步是不可能的,因?yàn)槊總€(gè)時(shí)鐘均與其內(nèi)部晶體同步。在 MCU 驅(qū)動(dòng)的系統(tǒng)中,低功耗模式下使用的 32kHz 實(shí)時(shí)時(shí)鐘晶體與用于生成UART 波特率的普通 38.4kHz 頻率之間會(huì)出現(xiàn)類(lèi)似的同步問(wèn)題。因?yàn)閷?shí)時(shí)時(shí)鐘的 32,768 頻率使 15 位寄存器每秒溢出一次,所以非常適合時(shí)間保持(time-keeping) 應(yīng)用。比較而言,在UART 中使用相同的頻率,則在典型的 10 位(起始位、8 位數(shù)據(jù)和 1 個(gè)奇偶校驗(yàn)位)傳輸中保證至少有一位讀取不正確。這是由于 32,768Hz 時(shí)鐘必須除以 3.4,才能得到 9,600 波特率。由于沒(méi)有 3.4 這一選擇,因此必須選擇除以 3 或除以 4(參見(jiàn)圖2)。
圖 2:9600 波特傳輸時(shí) 32Khz 驅(qū)動(dòng) UART Rx 錯(cuò)誤
評(píng)論