请教ut_s3c6410 stepldr start.s的一个问题
菜鸟一个最近在看bootloader,对下面的语句不太理解,在datasheet中找到相关寄存器,但看了两遍还是不理解,
请高手指教,从哪里找资料看,或者怎样理解》
thanks!!
; Expand Memory Port 1 to x32
ldr r0, =MEM_SYS_CFG
ldr r1, [r0]
bic r1, r1, #0x80 ; ADDR_EXPAND to "0"
str r1, [r0]
[最优解释]
首先楼主要知道MEM_SYS_CFG的意义,其在S3C6410_SEC_V1\oal\inc\s3c6410.inc中定义,如下
MEM_SYS_CFG EQU (0x7e00f120)
也就是说MEM_SYS_CFG的值就是0x7e00f120,也就是内存子系统配置寄存器的地址(楼主可以看6410的datasheet),下面来说说我的理解
ldr r0, =MEM_SYS_CFG
---》把内存子系统配置寄存器的地址保存在r0寄存器中。
ldr r1, [r0]
---》把内存子系统配置寄存器的值,也就是0x7e00f120地址处的值保存在r1中。
bic r1, r1, #0x80 ; ADDR_EXPAND to "0"
---》显示用r1的值,也就是内存子系统配置寄存器的值和0x80来进行位清除运算,这里是对MEM_SYS_CFG[7]位进行清除,这个位清除运算之后,MEM_SYS_CFG[7]位=0,MEM_SYS_CFG寄存器的其他位保持不变,位运算后把内存子系统配置寄存器的值保存到r1中(这一步只是对MEM_SYS_CFG[7]位清零)
str r1, [r0]
把保存在r1寄存器上的值保存到r0寄存器(其值是0x7e00f120,是一个地址)指向的地方,也就是保存到内存子系统配置寄存器中。
上面的代码很简单就是用r1作为中间变量,先把内存子系统配置寄存器的值后放在r1中,在r1中修改,修改之后再写回到内存子系统配置寄存器中,相当于下面的C代码
volatile S3C6410_SYSCON_REG *m_vpSYSCONRegs;
m_vpSYSCONRegs->MEM_SYS_CFG &=~(0x80);
[其他解释]
多谢 LoongEmbedded
; Expand Memory Port 1 to x32
ldr r0, =MEM_SYS_CFG
ldr r1, [r0]
bic r1, r1, #0x80 ; ADDR_EXPAND to "0"
str r1, [r0]
以上代码是stepldr的start.s中的,stepldr相当于nboot
我还想知道 这句注释 ; Expand Memory Port 1 to x32 是什么意思
还有以上代码 修改内存子系统配置寄存器的值 对初始化硬件有什么用??
thanks
[其他解释]
我目前也没有真正用过6410来开发,对6410不熟悉,不过楼主可以通过关键字MEM_SYS_CFG在6410的datasheet中查找相关内容,或者google一下,我现在也没有时间,否则我也学习一下,^_^。
[其他解释]
感谢,LoongEmbedded
[其他解释]