请问ut_s3c6410 stepldr start.s的一个有关问题

请教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

------其他解决方案--------------------
引用:
我目前也没有真正用过6410来开发,对6410不熟悉,不过楼主可以通过关键字MEM_SYS_CFG在6410的datasheet中查找相关内容,或者google一下,我现在也没有时间,否则我也学习一下,^_^。
up
------其他解决方案--------------------
引用:
感谢,LoongEmbedded

楼主是负责驱动部分的吧,你在看代码的时候要结合硬件(比如说CPU,nandflash,SDRAM或其他外围电路)来理解才能真正搞懂,不过这是需要一个过程的,加油。
------其他解决方案--------------------
学习了。
非常感谢!!