Tlelechips 8925的時鐘系統配置

這幾天仔細研究了下ARM的時鐘設置,現以Telechips 8925(cotex A5)爲例簡單記錄下:

  8925總共有16個時鐘源,一個XIN,XTIN,外加6個PLL,同時每個XIN,XTIN和PLL還可以經過一個分頻器產生一個時鐘。


因此在設置時鐘之前,我們要先選擇要用哪個時鐘源,8925的BSP在“SRC/Boot/”的main.c文件中,main函數調用了init_clock()函數來初始化時鐘系統,init_clock()函數的實現如下:

void init_clock(void)
{

PCKC lCKC = (CKC *)HwCKC_BASE;//設置時鐘的基地址

........

tca_ckc_init(); //初始化時鐘設置的基地址

tca_ckc_setpll(6240000,1); //設置PLL1爲312MHz

........

lCKC->CLKDIVC0 = 0x01010101;//設置分頻因子(就會產生新的時鐘源)

.......

tca_ckc_setswreset(RESET_DDIBUS, OFF);//開啓或關閉總線復位(DDIBUS,GRAPBUS等)

........

tca_ckc_setfbusctrl(CLKDDIBUS,ENABLE,0,3120000,DIRECTPLL1);//設置總線的時鐘頻率,就是上圖中後面那部分時鐘源選擇

.......

}

這些設置對應的數據結構是一個CKC的結構體:

typedef struct _CKC

{

volatile unsigned intCLK0CTRL; //0x000RW 0x14000000 CPU clock control register

........

volatile unsigned intCLK8CTRL;//0x020RW 0x14000000 SMU clock control register 

        這組寄存器(有8個)主要設置總線時鐘的使能,配置,以及選哪個時鐘源做爲自己的時鐘。

volatile unsigned intPLL0CFG; //0x030RW 0x14000000
volatile unsigned intPLL1CFG; //0x034RW 0x14000000
volatile unsigned intPLL2CFG; //0x038RW 0x14000000
volatile unsigned intPLL3CFG; //0x03CRW 0x14000000
volatile unsigned intPLL4CFG; //0x040RW 0x14000000
volatile unsigned intPLL5CFG; //0x044RW 0x14000000

這組寄存器主要是設置PLL的時鐘,有個對應的P,S,M,Vel表用於查詢對應設置,如果設置的時鐘頻率不在表裏面,可以聯繫廠商進行修改。關於PLL時鐘設置有一個計算公式:

FVCO = (m * FIN ) / ( p )  : 1000 MHz ~ 2000 MHz ( FIN is XIN oscillator) 
 
FPLL = FVCO / ( 2 ^ s )  : FPLL should be less than 1GHz. 

volatile unsigned intCLKDIVC0; //0x050RW 0x14000000 PLL0/1/2/3 Divider Configuration Register
volatile unsigned intCLKDIVC1; //0x054RW 0x14000000 PLL4/5/XI N/XTIN Divider Configuration Reg. 
volatile unsigned intCLKDIVC2; //0x058RW 0x14000000 Reserved for Future Use
volatile unsigned intCLKDIVC3; //0x05CRW 0x14000000
Reserved for Future Use

這組寄存器主要是設置時鐘源的分頻,公式:FP0DIV = FPLL0 / (P0DIV + 1)計算分頻頻率的,在復位情況下P0DIV=0x01,就是分出來的頻率是原PLL的1/2。

volatile unsigned intPLKCTRL0; // 0x080  R/W 0x24000000 Timer X Clock 

........

volatile unsigned intPLKCTRL51; // 0x14C R/W 0xA4000000 Clock for GPSB Controller 5 

這組寄存器設置的是上圖後面那部分,也就是硬件的時鐘輸出,這個設置決定了最終的時鐘設置。

其實歸納起來,時鐘的設置主要就兩步:

1.設置時鐘源,看清楚系統有多少個時鐘源,時鐘是怎麼設置的,如果有分頻器看它是怎麼分頻的;

2.時鐘源的選擇(這個很關鍵),你要設置(CPU,總線等)用的是哪個時鐘源,有沒有經過分頻器。

搞清楚這兩步,基本時鐘的設置就搞定了,不同CPU的時鐘系統不一樣,具體設置參考數據手冊,這只是本人對8925時鐘的一些理解,如果不對的,請大家指正,同時如果有在搞8925的同行,可以回覆我,共同學習!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章