tms320f28335通過外部時鐘訊號、osc和pll產生倍頻時鐘訊號clkin後,clkin經過cpu後產生時鐘sysclkout(clkin和sysclkout頻率是一樣的),sysclkout給各個片內外設提供時鐘訊號。為了實現低功耗和提供高低頻率時鐘訊號,需要把sysclkout進一步分頻,本章主要講解了對sysclkout分頻產生低頻時鐘訊號和高頻時鐘訊號,完成外設時鐘初始化的過程。
時鐘系統結構如圖1所示。
從圖1可以看出,時鐘clkin經過cpu後產生時鐘sysclkout(clkin和sysclkout頻率是一樣的),sysclkout給各個片內外設提供時鐘;除了spi、sci、mcbsp模組使用低頻時鐘,adc使用高頻時鐘外,其他外設模組都是採用sysclkout時鐘。為了實現低功耗,必須對每個片內外設時鐘進行開關控制;為了實現高低頻率時鐘,必須對sysclkout進行不同的分頻處理,因此與外設時鐘配置相關的暫存器主要有兩類:外設時鐘控制暫存器pclkcr和高低頻外設時鐘分頻暫存器spcp。
第一類暫存器是外設時鐘控制暫存器pclkcr,它包括16位的pclkcr0、pclkcr1、pclkcr3(不知道為什麼跳過了pclkcr2??),主要是控制使能和禁用外設時鐘;控制片內外設時鐘開關的外設時鐘控制暫存器pclkcr0、pclkcr1、pclkcr3如表1、表2、表3所示。第二類暫存器是高低頻外設時鐘分頻暫存器,它包括高頻外設時鐘分頻暫存器16位的hispcp(high-speed peripheral clock prescaler register)和低頻外設時鐘分頻暫存器16位的lospcp(low-speed peripheral clock prescaler register)
從表1、表2、表3可以看出,預設情況下,除了3個cpu定時器和gpio口輸入取樣時鐘使能外,其他所有外設的時鐘是禁用的。
**注:
- pclkcr0、pclkcr1、pclkcr3均受ellow保護。
- 不使用某外設模組時,可以禁用該時鐘模組的時鐘以省電。 **
產生高低頻外設時鐘的分頻暫存器hispcp和lospcp分別如表4和表5所示。
兩個暫存器具體位域描述分別如表6和表7所示。
從表4到表7可以看出,16位的高頻外設時鐘分頻暫存器hispcp和低頻外設時鐘分頻暫存器lospcp都只用了低3位;兩個暫存器都受ellow保護;分頻計算方法:當分頻係數為0,表示時鐘等於sysclkout/1,當分頻係數不為0時,clk=sysclkout/(n×2)。
sysclkout可以按1、2、4分頻從tms320f28335的xclkout引腳輸出,sysclkout輸出示意圖如2所示。
從圖2可以看出,上電或復位預設情況下,sysclk2分頻產生xtimclk,xtimclk再通過2分頻產生xclkout時鐘,該時鐘訊號通過引腳xclkout輸出,即預設情況下xclkout=sysclk/4=oscclk/16,除錯時可以觀察該引腳的訊號以判斷裝置是否在正確的時鐘下工作。
注: - xclkout引腳上電或者復位預設情況下是啟用狀態的。
- xclkout引腳沒有上拉或者下拉電阻。
- 如果xclkout引腳不使用時,可以通過xintcnf2[clkoff]=1關閉。
- 預設情況下,xtimclk=sysclkout/2,它是外擴模組(外擴flash、sram等)的時鐘
此初始化**主要來自ti官方例程,注釋是個人理解。
/*
*函式名稱:initperipheralclocks
*輸入引數:無
*輸出引數:無
*函式功能:初始化外設時鐘模組,主要包括產生高低速時鐘、開關所需片內外設模組時*鐘等
*/void initperipheralclocks(void)
本章主要講解了對sysclkout分頻產生低頻時鐘訊號和高頻時鐘訊號,完成外設時鐘初始化的過程。 DSP28335系統時鐘
鎖相環是一種控制晶振使其下你跟對於參考訊號保持恆定的電路。主要作用是通過軟體實時配置片上外設時鐘 譬如當30mhz的oscclk訊號經鎖相環倍頻後,倍頻倍數可通過pllcr div 設定,可設定為10,經過pll後的訊號變為300mhz,因為28335的時鐘頻率為150mhz,所以需要將pllsts...
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...
DSP28335進入非法中斷
進入非法中斷是因為cpu核心讀到了非法指令,之所以會讀到非法指令,一般是因為程式跑飛。程式跑飛不一定是軟體問題,硬體上的時鐘電源不穩定也會導致這個問題。1.程式中是否使用了delay us 函式,如果是,是否已經copy到ram中?2.檢查是否開了足夠的stack空間?3.進入程式後,先單步執行,看...