嵌入式Linux裸机开发(三)——BL0初始化
2019-07-13 00:58发布
生成海报
嵌入式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,=WDTCONldr 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 0xD0037D80ldr sp,=SVC_SP设置好C语言运行时环境后就可以调用C语言的函数了。本文出自 “
生命不息,奋斗不止” 博客,请务必保留此出处
http://9291927.blog.51cto.com/9281927/1786614
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮