歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 嵌入式Linux裸機開發(三)――BL0初始化

嵌入式Linux裸機開發(三)――BL0初始化

日期:2017/3/3 12:05:51   编辑:Linux技術

嵌入式Linux裸機開發(三)――BL0初始化

BL0階段的初始化過程如下: 1、關閉看門狗
2、初始化icache(打開icache)
3、初始化棧(設置中斷棧、SVC棧)
4、初始化堆
5、初始化塊設備copy函數
6、初始化PLL和設置系統時鐘(三星參考時鐘設置)

一、關閉看門狗

看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數器,一般給看門狗一個數字,程序開始運行後看門狗開始倒計數。如果程序運行正常,過一段時間CPU應發出指令讓看門狗復位,重新開始倒計數。如果看門狗減到0就認為程序沒有正常工作,強制整個系統復位。由於CPU默認打開看門狗,因此需要在啟動代碼的開始關閉看門狗(默認S5PV210的irom BL0中已經關閉看門狗)。
看門狗是一個內部外設,位於SoC內。查閱S5PV210文檔可知,看門狗的相關控制寄存器如下:
WTCON0xE2700000bit5: 0 = Disables 1 = Enables
關閉看門狗放在程序啟動代碼開始,匯編代碼如下:
#define WDTCON 0xE2700000
//關閉看門狗
ldr r0,=WDTCON
ldr r1,=0x8001//bit5設置為0,其它位設置為默認
str r1,[r0]

二、開啟iCache

S5PV210內部有32KB的icache和32KB的dcache。Dcache和MMU相關,裸機程序MMU關閉,不考慮。
//關閉icache,S5PV210默認IROM中已結打開
mrc p15,0,r0,c1,c0,0 //讀出cp15的c1到r0
// bic r0,r0,#(1<<12) //置0,關閉
orr r0,r0,#(1<<12) //置1,開
mcr p15,0,r0,c1,c0,0 //寫入r0到

三、設置棧

C語言運行時需要一定的環境,因此調用C語言代碼前需要設置C語言運行時環境。CPU復位後為SVC模式,DRAM尚未初始化,只有SRAM可用,查閱文檔S5PV210_iROM_ApplicationNote_Preliminary可知SVC棧空間從0xD0037780到0xD0037D80,大小1.5K。
匯編代碼如下:#define SVC_SP 0xD0037D80
ldr sp,=SVC_SP
設置好C語言運行時環境後就可以調用C語言的函數了。
本文出自 “生命不息,奮斗不止” 博客,請務必保留此出處http://9291927.blog.51cto.com/9281927/1786614
Copyright © Linux教程網 All Rights Reserved