pll作用就是對外部時鐘進行倍頻,降低產生高頻時鐘訊號的成本。但是倍頻配置的時候,需要在特定的條件下更改,因此需要檢測pll工作的各種狀態訊號,因此pll有兩個配置相關暫存器,pll狀態暫存器pllsts和pll控制暫存器pllcr。通過對狀態暫存器pllsts的判斷,可以判斷pll的工作狀態,在特定的工作狀態下,對pll控制暫存器pllcr進行配置,最後產生合適的時鐘訊號clkin輸入給cpu,完成整個過程的倍頻。本文詳細介紹了pll模組,並對初始化過程和初始化**進行了分析。
osc和pll模組方框圖如圖1所示。
基於 pll 的時鐘模組提供兩種操作模式:
• 晶振操作模式:允許使用乙個外部晶振/諧振器來提供到器件的時基。
• 外部時鐘源操作模式:允許旁通內部振盪器被,時鐘由乙個 x1 或者 xclkin 引腳上的外部時鐘源輸入生成。
三種輸入時鐘配置如圖2、圖3、圖4所示
30mhz 外部石英晶振的典型技術規範如下:
• 基本模式、 併聯諧振
• cl( 負載電容) =12pf
• cl1=cl2=24pf
• c併聯=6pf
• esr 範圍 = 25 至 40ω
tms320f23885上有乙個片載、基於pll倍頻器的時鐘模組,它提供所有的時鐘訊號以及實現對低功耗模式的控制。
pll作為dsp的時鐘重要組成部分,它除了提高系統內部sysclkout的頻率之外,還有乙個重要的用途就是監視外部時鐘是不是很好的為dsp內部提供系統時鐘。與pll配置相關的暫存器有兩個:pll狀態暫存器pllsts和pll控制暫存器pllcr,兩個暫存器具體的講解參見第3節。如果pll處於使能狀態,需要監視pplsts暫存器中的mclksts位的狀態。如果mclksts被置位,則軟體要採集恰當的措施保證系統不出現事故,該措施包括使系統停機、復位等。
兩個暫存器中最關鍵的位域分別為 2位的pllsts[divsel]和4位的pllcr[div]。比如tms320f23885最大工作時鐘為150mhz,通常外部晶振頻率為30mhz,先將30mhz進行10倍頻變成300mhz,再對300mhz進行2分頻得到150mhz的時鐘。(官方例程裡產生150mhz的方式)pllsts[divsel]選擇cpu時鐘的分頻係數(/4,/2,/1),pllcr[div] 選擇cpu時鐘的倍頻係數(*1,*2,……,*10)。
pll的設定如表1所示。
分頻係數的選擇如表2所示。
pll可能的配置模式如表3所示。
注: (1)預設情況下,分頻係數為4
(2)在改變pllcr[div]倍頻係數前,必須滿足兩個條件:
(3)一旦pll穩定之後,會鎖定在新的頻率下工作,pllsts[plllocks] = 1,可以改變pllsts[divsel]。
(4)在寫入 pllcr 暫存器之前, 安全裝置模組(看門狗)應該被禁用。
(5)在 pll 模組穩定後,重新啟用安全裝置模組(看門狗),重啟的時間為 131072 個 oscclk 週期。
(6)在 pll (vcoclk) 的輸出頻率不超過300mhz 時候,選擇輸入時鐘和 pllcr[div] 位。
(7)當pll啟用時,即pll不是旁路(pllcr[div]!=0),必須需要分頻器,即分頻係數不能為1(pllsts[divsel]!=3),這是因為確保反饋給核心的時鐘具有正確的占空比。
(8)只有外部復位訊號rst和安全裝置(看門狗)產生復位訊號時,pllcr和pllsts才會復位到預設值,而偵錯程式和missing clock detect logic產生的復位訊號不會使兩者復位到預設值。
(9)pllcr和pllsts是受ellow保護的。
特別注意:倍頻時一定要分頻,不倍頻時才允許不分頻。
pll控制暫存器pllcr如表4所示。
pll狀態暫存器pllsts如表5所示。
pllsts各位的描述如表6所示
注:跛行模式(limp mode)系統出現問題的時候,控制邏輯能夠根據對應的條件進行判斷,安排另外的一套控制電平,使得必須控制的負載按照既定的邏輯執行。
pll初始化流程圖如圖2所示。
根據流程圖,大致可以描述pll的初始化過程為:
(1)確保存在oscclk,系統能正常工作,即判斷pllsts[mclksts]==1?
(2)改變pllcr[div]前,確保pllsts[divsel]==0
(3)改變pllcr[div]前,禁用主振盪器故障檢測邏輯模組,即pllcr[mclkoff]=1
(4)根據需要,改變pllcr[div]
(5)判斷pll是否穩定鎖定,即pllsts[plllocks]==1?
(6)使能主振盪器故障檢測邏輯模組,即pllcr[mclkoff]=0
(7)根據需要,改變pllsts[divsel]
pll初始化的**如下(來自官方例程,主要對其注釋分析和講解)。
/*
* 函式名稱:initpll
* 函式輸入:倍頻引數val,分頻引數divsel
* val取值為0到10,表示倍頻數;divsel取值0到4,0和1表示4分頻,2表示2分頻,3表示不分頻
* 函式輸出:無
* 函式呼叫:initpll(10,2);
* 先將外部時鐘倍頻10倍,在分頻1/2,最後產生的時鐘clkin輸入cpu28x
*/void initpll(unsigned
short div, unsigned
short divsel)
// pllcr從0x0000改變前,pllsts[divsel]必須為0
// 外部rst復位訊號會使pllsts[divsel]復位
// 此時分頻為1/4
if (sysctrlregs.pllsts.bit.divsel != 0)
// 前面條件都滿足後,可以改變pllcr[div]
if (sysctrlregs.pllcr.bit.div != val)
eallow;
sysctrlregs.pllsts.bit.mclkoff = 0;
edis;
}// 如果需要分頻1/2
if((divsel == 1)||(divsel == 2))
//注意:下面**只有在pll是旁路或者關閉模式時,才可被執行,其他模式禁止。
//倍頻時一定要分頻,不倍頻時才允許不分頻
//如果需要切換分頻到1/1
// * 首先從預設1/4分頻切換到1/2分頻,讓電源穩定
// 穩定所需要的時間依賴於系統執行速度,此處延時50us只是作為乙個特例
// * 穩定後,再切換到1/1
if(divsel == 3)
}
dsp28335時鐘 總結
1.dsp28355的最高頻率為150mhz 30mhz晶振訊號oscclk經鎖相環10倍頻 pllcr設定 然後經過2分頻 pllsts設定 產生150mhz時鐘訊號 2.150mhz 1 lspclk 低速時鐘 spi,sci,iic,mcbsp 2 1 2 75mhz ecan 3 150mh...
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...