一般來說,我們學習一款新的單片機或者ARM晶片,首先都會研究他的時鐘系統。本文基于國嵌的視訊教程,總結一下ARM時鐘體系架構。
其實學過單片機的同學尤其是基于ARM核心的單片機,對于系統時鐘的了解并不困難。S3C2440的系統時鐘框圖如下圖所示:
時鐘源則是由外部12MHz或者16.9344MHz的晶振提供,經過PLL倍頻電路最大可将主系統時鐘即FCLK提高至533MHz,PLL電路又主要分為倆個,一個是UPLL,另一個則是MPLL。UPLL提供的時鐘主要是UCLK,用于USB裝置。而MPLL提供的時鐘經由分頻器分成FCLK,HCLK,PCLK。FCLK主要為arm核心提供穩定的時鐘,FCLK再次經由分頻器分出HCLK(AHB總線時鐘)和PCLK(APB外設總線時鐘)。
晶振、分頻系數和FCLK的關系如下圖所示:
至于系統時鐘初始化主要分為以下幾步:
關于LockTime的設定,可以略去采用預設配置,而分頻系數則采用上圖中黃色高亮顯示的配置,FCLK運作在405MHz。具體代碼如下:
#define CLKDIVN 0x4c000014
#define MPLLCON 0x4c000004
#define MPLL_405MHz ((127<<12)|(2<<4)|(1<<0))
clock_init:
@set clock divide factor
ldr r0,=CLKDIVN
mov r1,#0x5 @set HDIVN=2 PDIVN=1
str r1,[r0]
@set asynchronous work mode
mrc p15,0,r0,c1,c0,0 @read control register
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0 @write control register
@set FCLK
ldr r0,=MPLLCON
ldr r1,=MPLL_405MHz
str r1,[r0]
mov pc,lr
具體可參考ARM相關技術手冊以及國嵌教育訓練視訊。