上篇比較詳細(xì)的講了一下GPIO跟中斷,這篇打算說一說PLL和EBIU。
先說PLL吧,PLL是什么?全稱Phase Locked Loop,是ADSP-BF53x 的內(nèi)核和時(shí)鐘設(shè)置的機(jī)制,叫做鎖相環(huán)。我們通過PLL 配置當(dāng)前處理器工作的內(nèi)核和系統(tǒng)時(shí)鐘。所以這個(gè)非常關(guān)鍵。
PLL 機(jī)制如下圖:
輸入時(shí)鐘送給 ADSP-BF53x 后,通過DF 設(shè)置是否對(duì)輸入時(shí)鐘分頻,然后將根據(jù)MSEL 的值對(duì)時(shí)鐘進(jìn)行倍頻,倍頻后將時(shí)鐘送給VCO,由VCO 根據(jù)設(shè)置的分頻系數(shù),分出內(nèi)核時(shí)鐘和系統(tǒng)時(shí)鐘。
MSEL 占用6Bit,最大可設(shè)置64 倍倍頻。通常情況下,該倍頻頻率不要超過芯片允許的最大頻率。
內(nèi)核時(shí)鐘分頻系數(shù)占 2Bit,最大可設(shè)置8 倍分頻,當(dāng)為00 時(shí),內(nèi)核時(shí)鐘等于VCO 時(shí)鐘。設(shè)置的內(nèi)核時(shí)鐘原則上不要超過芯片允許的最高頻率。當(dāng)然也是有很多猛人玩超頻的,這取決于你對(duì)自己硬件設(shè)計(jì)的強(qiáng)烈自信,官方不允許!
系統(tǒng)時(shí)鐘分頻系數(shù)占 4bit,最大進(jìn)行15 倍的分頻。設(shè)置的系統(tǒng)時(shí)鐘不要超過133MHz。
接口寄存器說明:
寄存器 功能
PLL_DIV PLL分頻寄存器,設(shè)置系統(tǒng)時(shí)鐘和內(nèi)核時(shí)鐘分頻系數(shù)
PLL_CTL PLL控制寄存器,設(shè)置VCO 倍頻系數(shù)和一些控制開關(guān)
PLL_STAT PLL 狀態(tài)寄存器,獲取芯片當(dāng)前工作的狀態(tài)
PLL_LOCKCNT PLL 計(jì)數(shù)器,用于設(shè)置計(jì)數(shù)時(shí)鐘
下面來個(gè)例子代碼分析一下,會(huì)容易理解了:
*pPLL_DIV = pssel; //設(shè)置系統(tǒng)時(shí)鐘分頻系數(shù),內(nèi)核不做分頻
asm("ssync;"); //系統(tǒng)同步
new_PLL_CTL = (pmsel & 0x3f) << 9; //將VCO 倍頻系數(shù)移位至需設(shè)置的位置
*pSIC_IWR |= 0xffffffff; //將系統(tǒng)中斷喚醒使能
if (new_PLL_CTL != *pPLL_CTL) //判斷是否已經(jīng)配置過倍頻系數(shù)
{
*pPLL_CTL = new_PLL_CTL; //配置倍頻系數(shù)
asm("ssync;"); //系統(tǒng)同步
asm("idle;"); //將處理器設(shè)置為空閑
}
配置完P(guān)LL 后,系統(tǒng)必須將系統(tǒng)設(shè)置為空閑后,系統(tǒng)再一次喚醒后,設(shè)置的值才會(huì)生效。
當(dāng)然,OP還是會(huì)上傳一個(gè)完整的例程來詮釋這個(gè)PLL。這個(gè)例程代碼就實(shí)現(xiàn)了將內(nèi)核時(shí)鐘配置為 16 倍倍頻,將系統(tǒng)時(shí)鐘配置為4 倍分頻。板卡上輸入時(shí)鐘為25MHz,所以VCO時(shí)鐘配置后為25*16 =400MHz,內(nèi)核時(shí)鐘沒有做分頻,所以內(nèi)核時(shí)鐘等于VCO 時(shí)鐘,也為400MHz,系統(tǒng)時(shí)鐘為400/3=100MHz。
運(yùn)行代碼后,處理器的內(nèi)核時(shí)鐘會(huì)運(yùn)行在 400MHz,系統(tǒng)時(shí)鐘運(yùn)行在100MHz。
例程源碼的百度云盤下載: 鏈接: http://pan.baidu.com/s/1dDAHim9 密碼: 0h3e
PS:下一篇的EBIU講完后,統(tǒng)一貼這2章的教學(xué)視頻,錄到一起了。 |