天天看點

嵌入式學習筆記1—S3C2440的時鐘體系

一般來說,我們學習一款新的單片機或者ARM晶片,首先都會研究他的時鐘系統。本文基于國嵌的視訊教程,總結一下ARM時鐘體系架構。

其實學過單片機的同學尤其是基于ARM核心的單片機,對于系統時鐘的了解并不困難。S3C2440的系統時鐘框圖如下圖所示:

嵌入式學習筆記1—S3C2440的時鐘體系
嵌入式學習筆記1—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的關系如下圖所示:

嵌入式學習筆記1—S3C2440的時鐘體系
嵌入式學習筆記1—S3C2440的時鐘體系

至于系統時鐘初始化主要分為以下幾步:

嵌入式學習筆記1—S3C2440的時鐘體系
嵌入式學習筆記1—S3C2440的時鐘體系

關于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相關技術手冊以及國嵌教育訓練視訊。