DSP28377s系統時鍾配置注意事項


DSP28377s系統時鍾配置注意事項

問題一臉嫣然的向我們走來。。。

近日,一個兄弟在配置基於28377s芯片的主控系統時鍾時,遇到點困難。

具體是這樣的,原來的主控板使用的是20MHz外部晶振,為取200MHz系統時鍾,倍頻設為20,分頻設為2,這樣sysclock = 20MHz * 20 / 2,正好200MHz。具體調用TI公司的庫函數,實現代碼是這樣的:

InitSysPll(XTAL_OSC,IMULT_20,FMULT_0,PLLCLK_BY_2);

但新的控制板上面使用了30MHz外部晶振,為配置200MHz系統時鍾,此兄弟將倍頻設為40,分頻設為6,代碼如下:

InitSysPll(XTAL_OSC,IMULT_40,FMULT_0,PLLCLK_BY_6);

 

計算下來,系統時鍾也應該是200MHz,不過,按此配置后,程序運行就卡死在定時器1、2溢出while循環里了。

為什么呢?

這個算術應該是很簡單的,30MHz x 40 / 6 不就是200MHz嗎?為什么芯片會執行不正常呢?

我們來看看,28系列dsp的系統時鍾產生模式:

內外部時鍾,可通過CLKSRCCTL1來選擇哪個作為時鍾源,之后所選的時鍾源可由SYSPLLCTL1選擇是否經PLL倍頻后使用,一般為了DSP能夠高速運算,我們都會選擇使用PLL的。那么經過PLL之后,我們會得到PLLRAWCLK,然后再通過SYSCLKDIVSEL進行分頻,最終就會得到我們想要的系統時鍾了。

結合上面的代碼,倍頻過程就是通過IMULT_xx,FMULT_x兩個參數實現的,前者代表整數,后者代表小數,具體就不贅述了;分頻就是由PLLCLK_BY_x這個參數實現的。

好,說了這么多,還沒有說到正題呢,倍頻又分頻,搞這么多事,問題到底出在哪兒呢?

原來,我們的PLLRAWCLK並不是super man,你跑多快它都能接住,它是有一個acceptable range ,那這個可接受范圍是多少呢?

請君移步來看TI公司的28377s的規格文檔,在里面表5-12有清晰的說明,如下:

原來PLLRAWCLK最大只能到400MHz,那么反過來看我們前面的配置,30MHz的晶振經過40倍頻,已經達到了1200MHz,遠遠超出了允許范圍,DSP很抱歉的說,它玩不轉了。

華麗麗的解決方案

原因搞清楚后的感覺真是讓人很暢快的,既然搞清楚了原因,那么怎么解決這個問題會比較好呢?當然可以簡單的降低倍頻,比如30MHz做10倍頻,然后2分頻,得到150MHz的系統時鍾。不過28377s的最大系統時鍾可以到200MHz,這樣解決貌似還是犧牲了點芯片性能呢。

讓我搜腸刮肚的想想,400除以30得13.3333。。。。抱歉,它可以無限循環下去,那么比它小的可以配置的最大數是多少?13.25(小數只能有0,0.25,0.5,0.75四個選擇),沒錯,就是它!這樣可以得到397.5MHz的倍頻輸出,再作2分頻,系統時鍾198.75MHz,應該是最大限度的利用了。

按照上面的配置,代碼如下:

InitSysPll(XTAL_OSC,IMULT_13,FMULT_0pt25,PLLCLK_BY_2);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM