目录
一·设置处理器模式
设置处理器处于SVC模式下。
设置CPSR寄存器的bit4-0,也就是M[4:0]为10011=0x13。读写状态寄存器具体操作为
MRS //将CPSR寄存器读出到通用寄存器
MSR //将通用寄存器里的值写入到CPSR寄存器
(如不了解何为svc模式的同学可以阅读arm体系架构)
二.设置SP指针
sp可以指向内部RAM,也可以指向DDR,我们将其指向DDR。
以6ull为例,512MB的DDR地址为0x80000000-0x9fffffff...栈大小为0x20000=2MB
一般arm架构代码为向下增长。
所以设置sp指向0x800000000+栈大小0x20000=0x80020000
.global _start /* 全局标号 */
/*
* 描述: _start函数,程序从此函数开始执行,此函数主要功能是设置C
* 运行环境。
*/
_start:
/* 进入SVC模式 */
mrs r0, cpsr
bic r0, r0, #0x1f /* 将r0寄存器中的低5位清零,也就是cpsr的M0~M4 */
orr r0, r0, #0x13 /* r0或上0x13,表示使用SVC模式 */
msr cpsr, r0 /* 将r0 的数据写入到cpsr_c中 */
ldr sp, =0X80200000 /* 设置栈指针 */
b main /* 跳转到main函数 */
此处参照左忠凯老师代码
若使用ddr时芯片需要先初始化ddr时需要在启动文件里面先初始化ddr