Blackfin處理器功耗由內(nèi)部功耗、外部功耗和實(shí)時(shí)鐘功耗組成。內(nèi)部功耗由內(nèi)部動(dòng)態(tài)電流和靜態(tài)電流引起。外部功耗取決于處理器內(nèi)外設(shè)的使用情況,在不同的應(yīng)用場(chǎng)合,片內(nèi)外設(shè)的使用有所不同,外部功耗也會(huì)不同。實(shí)時(shí)鐘功耗一般處于特定范圍之內(nèi),工作溫度為25~85℃時(shí),實(shí)時(shí)鐘功耗范圍為0.067~0.1825mW。Blackfin系列處理器提供了動(dòng)態(tài)電源管理功能,靈活的對(duì)時(shí)鐘頻率、工作模式及內(nèi)核電壓進(jìn)
行調(diào)整,以Blackfin533為例闡述Blackfin系列處理器低功耗設(shè)計(jì)的具體方法。
1 時(shí)鐘頻率控制
現(xiàn)代DSP芯片中大量使用CMOS FET(Complementary Metal-oxide Semiconductor FET互補(bǔ)金屬氧化物場(chǎng)效應(yīng)管)開(kāi)關(guān),穩(wěn)定時(shí)或者處于完全打開(kāi)狀態(tài)(很低的負(fù)載),或者處于完全關(guān)閉狀態(tài),但是在兩種狀態(tài)轉(zhuǎn)換過(guò)程中會(huì)產(chǎn)生漏電流,所以開(kāi)關(guān)頻率很高時(shí),F(xiàn)ET充放電會(huì)引起很大的電源功耗。因此,通過(guò)降低系統(tǒng)時(shí)鐘頻率可以有效降低系統(tǒng)功耗。
Blackfin533通過(guò)外部時(shí)鐘輸入引腳CLKIN接收外部時(shí)鐘源(10~40 MHz)的時(shí)鐘輸入,再通過(guò)鎖相環(huán)(PLL),電路模塊產(chǎn)生內(nèi)核時(shí)鐘(CCLK)和系統(tǒng)時(shí)鐘(SCLK),通過(guò)設(shè)置PLL相關(guān)寄存器實(shí)現(xiàn)對(duì)CCLK和SCLK的頻率控制。PLL系統(tǒng)如圖l所示。
CCLK和SCLK均由VCO(Voltage-ControlledOscillator-壓控振蕩器)輸出的時(shí)鐘分頻后得到。VCO輸出時(shí)鐘頻率由PLL控制寄存器(PLL_CTL)設(shè)置,CCLK和SCLK對(duì)VCO的分頻因子由PLL分頻寄存器(PLL_DIV)設(shè)置。PLL_CTL各位說(shuō)明如表1所示。
對(duì)于不同的DF和MSEL值,VCO輸出相應(yīng)的時(shí)鐘頻率,對(duì)應(yīng)關(guān)系如表2所示。
需要注意的是VCO最小輸出時(shí)鐘頻率為50 MHz,最大輸出頻率為內(nèi)核時(shí)鐘CCLK頻率的最大值。對(duì)BlackfinBF533,CCLK最大值為600 MHz,而B(niǎo)F532/531的CCLK最大值為400 MHz。所以VCO輸出頻率不應(yīng)超出范圍50MHz~CCLK。
通過(guò)設(shè)置PLL分頻寄存器PLL_DIV中的CSEL(PLL_DIV的4~5位)確定CCLK,設(shè)置SSEL(PLL_DIV的0~3位)確定SCLK,具體對(duì)應(yīng)關(guān)系如表3所示。
由于SCLK頻率不能高于CCLK的頻率,所以在對(duì)SSEL參數(shù)設(shè)置時(shí),需要確定當(dāng)前CCLK的頻率。
假設(shè)外部時(shí)鐘輸入CLKIN=27 MHz,將CCLK設(shè)置為594 MHz(27×22),SCLK設(shè)置為118.8 MHz(594/5),程序代碼如下
2 工作模式轉(zhuǎn)換
Blackfin533具有4種工作模式:全速、激活、睡眠、深度睡眠,功耗大小關(guān)系為:全速>激活>睡眠>深度睡眠。不同模式下處理器的內(nèi)核電壓及時(shí)鐘設(shè)置不同,如表4所示。所以靈活調(diào)整系統(tǒng)的工作模式可以有效的降低系統(tǒng)的功耗。
在轉(zhuǎn)換工作模式時(shí),應(yīng)該明確處理器當(dāng)前的工作模式,而系統(tǒng)的工作模式由PLL控制寄存器(PLL_CTL)中的PLL_OFF,BYPASS,STOPCK和PDWN狀態(tài)位共同確定。圖2說(shuō)明了各種工作模式轉(zhuǎn)換之間的聯(lián)系以及轉(zhuǎn)換條件。
通過(guò)設(shè)置PLL_CTL寄存器實(shí)現(xiàn)工作模式的轉(zhuǎn)換,新的設(shè)置不會(huì)立即生效,需要先執(zhí)行下面的一個(gè)程序段
從當(dāng)前工作模式轉(zhuǎn)換至另一個(gè)工作模式的具體過(guò)程簡(jiǎn)述如下
(1)設(shè)置喚醒請(qǐng)求,目的:將處理器喚醒,使PLL_CTL中新的設(shè)置生效以便進(jìn)入新的工作模式。
(2)按模式轉(zhuǎn)換條件,設(shè)置PLL_CTL。
(3)禁止一切中斷,將處理器置入空閑狀態(tài),等待喚醒請(qǐng)求。
(4)喚醒后恢復(fù)中斷,PLL_CTL中設(shè)置的新值開(kāi)始生效,處理器進(jìn)入新的工作模式,繼續(xù)執(zhí)行其他指令。
默認(rèn)狀態(tài)下,所有的中斷都能產(chǎn)生1個(gè)喚醒請(qǐng)求,即當(dāng)1個(gè)中斷產(chǎn)生時(shí),處理器內(nèi)核就會(huì)收到1個(gè)喚醒請(qǐng)求,如果此時(shí)處于空閑狀態(tài),則會(huì)退出此狀態(tài),處理相應(yīng)(中斷)程序。通過(guò)系統(tǒng)中斷喚醒使能寄存器(SIC_IWR)設(shè)置中斷與喚醒請(qǐng)求之間的對(duì)應(yīng)關(guān)系,其中24~31位保留,其他位分別對(duì)應(yīng)了不同的中斷源,如定時(shí)器中斷、看門(mén)狗定時(shí)器中斷、DMA中斷等,某一位如果置1,則相應(yīng)中斷發(fā)生時(shí)就會(huì)產(chǎn)生1個(gè)喚醒事件。系統(tǒng)復(fù)位后,SIC_IWR中的所有位均為1。
工作模式轉(zhuǎn)換的關(guān)鍵就是對(duì)PLL_CTL的設(shè)置,這就要求確認(rèn)系統(tǒng)當(dāng)前的工作模式,再根據(jù)圖2所示的轉(zhuǎn)換條件設(shè)置PLL_CTL寄存器。另外必須設(shè)置喚醒請(qǐng)求,因?yàn)樗兄诖_定處理器何時(shí)被喚醒,進(jìn)入預(yù)期的工作狀態(tài)。
下面是一個(gè)從全速模式到激活模式轉(zhuǎn)換的實(shí)例:
對(duì)喚醒請(qǐng)求進(jìn)行設(shè)置,本例中利用看門(mén)狗定時(shí)器中斷來(lái)產(chǎn)生這個(gè)喚醒請(qǐng)求。
(1)設(shè)置定時(shí)器的計(jì)數(shù)值:通過(guò)看門(mén)狗計(jì)數(shù)寄存器(WDOG_CNT)設(shè)置。
(2)設(shè)置相應(yīng)事件:當(dāng)定時(shí)器計(jì)數(shù)至O時(shí)產(chǎn)生中斷,即看門(mén)狗控制寄存器(WDOG_CTL)第3位置1,其余位為0。
(3)利用看門(mén)狗中斷產(chǎn)生喚醒請(qǐng)求:SIC_IWR寄存器第24位置1,其他位為0,使能看門(mén)狗中斷喚醒請(qǐng)求。
3 片內(nèi)外設(shè)控制
系統(tǒng)設(shè)計(jì)中不是所有外設(shè)都能用到,而系統(tǒng)具體運(yùn)行過(guò)程中,有些外設(shè)也不需要一直工作。所以,在適當(dāng)?shù)臅r(shí)候可以通過(guò)禁用不使用的外設(shè)來(lái)降低系統(tǒng)的功耗。Blackfin535有專門(mén)的外設(shè)時(shí)鐘寄存器(PLL_IOCK),統(tǒng)一控制所有外設(shè)的時(shí)鐘,禁用某外設(shè)只需要將PLL_IOCK中對(duì)應(yīng)位置0即可。Blackfin533/532/531沒(méi)有這種統(tǒng)一的時(shí)鐘控制寄存器,只能通過(guò)每個(gè)外設(shè)的控制寄存器來(lái)使能或禁用外設(shè)。
4 內(nèi)核電壓控制
Blackfin系列處理器通過(guò)片內(nèi)的調(diào)壓器可以將外部的2.2~3.6 V的供電電壓轉(zhuǎn)換成0.85~1.2 V,為內(nèi)核供電。由于功耗與電壓的平方成正比,降低內(nèi)核電壓可有效降低系統(tǒng)功耗。片內(nèi)的調(diào)壓器需要搭配一定的外部電路才能實(shí)現(xiàn)其調(diào)壓功能,外部電路圖3所示。
VDDEXT為I/O供電電壓,VDDINT為內(nèi)核供電電壓,VROUT為外部FET/BJT驅(qū)動(dòng),用于控制開(kāi)關(guān)頻率。
通過(guò)調(diào)壓器控制寄存器(VR_CTL)的VLEV(4~7位)來(lái)設(shè)置內(nèi)核電壓值,VLEV與電壓值的對(duì)應(yīng)關(guān)系,如表5所示。
修改VR_CTL的VLEV值可將內(nèi)核電壓控制在0.8~1.2 V,也可以將內(nèi)核供電完全關(guān)閉,即將VR_CTL中的FREQ(O~1位)設(shè)置為00,此時(shí)內(nèi)核時(shí)鐘和系統(tǒng)時(shí)鐘都會(huì)停止工作,而內(nèi)核電壓為0。修改內(nèi)核工作電壓的程序段需要放在對(duì)PLL_CTL設(shè)置程序之后執(zhí)行。