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