WINCE6.0+S3C2443的启动过程---eboot2
1.3系統時鐘設置
我的另一篇博客介紹了S3C2443的時鐘管理http://blog.csdn.net/chinesedragon2010/archive/2010/09/24/5903553.aspx
?
這些紅色字體的值在S3C2443.inc文件中定義,
Startup_Mdiv????? EQU ?? 81
Startup_Pdiv????? EQU ?? 2
Startup_Sdiv????? EQU ?? 1
這些值的實際意義是什么呢?我們先來看看上圖的第188行到190行對MPLLCON寄存器的設置,結合下表
?
可知FOUT=534MHZ,這就是MSysClk,也就是ARMCLK、HCLK、PCLK、DDRCLK等時鐘的基準時鐘,下圖可以很清楚描述這些時鐘的關系
?
現在我們知道FOUT=534MHZ了,S3C2443.inc文件中定義
Startup_ARMCLKdiv????? EQU???????????? 0??????????????????
Startup_PREdiv???????? EQU???????????? 0x1??????????????
Startup_HCLKdiv??????????? EQU???????????? 0x1??????????????
Startup_PCLKdiv???????????? EQU???????????? 1????
那么這些值代表的意義是什么呢?
其中Startup_ARMCLKdiv=0,根據CLKDIVO寄存器對ARMDIV位的定義可知ARMCLK=MSysClk=534MHZ,也就是ARM內核的主頻是534MHZ。
Startup_PREdiv=1,根據上圖,可知MSysClkPreDiv= MSysClk/2。
Startup_HCLKdiv=1,Startup_PCLKdiv=1,根據下表可知HCLK:DDRCLK:PCLK=4:2:8,可以得到HCLK=ARMCLK/4,PCLK=ARMCLK/8
這些關系會在bsp_cfg.h中對FCLK、PCLK和HCLK中得到體現。
?
下面接著看對CLKSRC寄存器的設置
ldr????????? r0,=CLKSRC??????????????????? ;????? Select MPLL clock out for SYSCLK
ldr????????? r1,[r0]
orr????????? r1,r1,#0x50
str????????? r1,[r0]???
上面代碼主要是選擇MPLL輸出作為MSysClk的基準時鐘,選擇EPLL輸出作為ESYSCLK的基準時鐘。
?
1.4??? 設置CPU的總線模式
通過調用函數MMU_SetAsyncBusMode來把CPU的總線模式設置為同步模式
bl?????????? MMU_SetAsyncBusMode
此函數體定義如下
MMU_SetAsyncBusMode
??????? mrc???? p15,0,r0,c1,c0,0
??????? orr???? r0,r0,#R1_nF:OR:R1_iA
??????? mcr???? p15,0,r0,c1,c0,0
??????? mov ?? pc, lr
?
通過上圖我們可知mrc???? p15,0,r0,c1,c0,0是用于讀取控制寄存器C1到R0中,也知道C1在系統復位后C1控制寄存器除了V位之外的所有控制位都為0,見下圖
?
那么就是上電復位后,控制寄存器C1的iA和nF位,也即iA和nF位這兩位的值也為0,下表是iA和nF位這兩位組合的定義
?
?
結合上面這些圖表及下面的定義
R1_iA??????????? EQU??????? (1<<31)
R1_nF??????????? EQU??????? (1<<30)
所以orr???? r0,r0,#R1_nF:OR:R1_iA的意義就是先判斷R1_nF是否為1,如為1,則對C1的nF位做或運算,也即把CPU的時鐘模式設置為Synchronous模式;如為0,則對C1的iA位做或運算,也即把CPU的時鐘模式設置為FastBus模式,接著通過mcr???? p15,0,r0,c1,c0,0語句把運算后的結果寫回C1控制寄存器。
?
1.5??? 設置CLKOUT0和CLKOUT1的時鐘源
設置CLKOUT0的時鐘源為PCLK,設置CLKOUT1的時鐘源為HCLK。
ldr????????? r0,=MISCCR
?????? ldr????????? r1,[r0]
?????? bic???????? r1,r1, #0x770
?????? orr????????? r1,r1,#0x320
?????? str????????? r1,[r0]
?????? 配置GPH13和GPH14分別為CLKOUT0與CLKOUT1。
?????? ldr????????? r0,=GPHCON
?????? ldr????????? r1,[r0]
?????? bic???????? r1,r1, #0x3C000000
?????? orr????????? r1,r1, #0x28000000
?????? str????????? r1,[r0]???
?
?
?
-------------------------------->
?
總結
以上是生活随笔為你收集整理的WINCE6.0+S3C2443的启动过程---eboot2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0+S3C2443的启动过
- 下一篇: MMU和cache学习