关于adrl指令的问题: adrl r2, mem_cfg_val

学习韦东山老师sdram 实例程序,有部分看不懂什么意思,问题如下:
  mov r1,     #1207959552       @ #1207959552=0x48000000 存储控制器的13个寄存器的开始地址
    adrl    r2, mem_cfg_val         @ 这13个值的起始存储地址
    add r3,     r1, #52             @ 13*4 = 54
1:  
    ldr r4,     [r2], #4            @ 读取设置值,并让r2加4
    str r4,     [r1], #4            @ 将此值写入寄存器,并让r1加4
    cmp r1,     r3                  @ 判断是否设置完所有13个寄存器
    bne 1b                          @ 若没有写成,继续
    mov pc,     lr                  @ 返回

.align 4
mem_cfg_val:
    @ 存储控制器13个寄存器的设置值
    .long   0x22011110      @ BWSCON
    .long   0x00000700      @ BANKCON0
    .long   0x00000700      @ BANKCON1
    .long   0x00000700      @ BANKCON2
    .long   0x00000700      @ BANKCON3  
    .long   0x00000700      @ BANKCON4
    .long   0x00000700      @ BANKCON5
    .long   0x00018005      @ BANKCON6
    .long   0x00018005      @ BANKCON7
    .long   0x008C07A3      @ REFRESH
    .long   0x000000B1      @ BANKSIZE
    .long   0x00000030      @ MRSRB6
    .long   0x00000030      @ MRSRB7
 

第一次执行 adrl    r2, mem_cfg_val 是将mem_cfg_val的地址放到r2中, mem_cfg_val是标号,无实际意义,mem_cfg_val的地址就是  第一个立即数 0x22011110 所在的地址,也就是说, adrl    r2, mem_cfg_val 是将立即数  0x22011110 所在的地址放到任中。
ldr r4,     [r2], #4         @ 将0x22011110写入r4,并r2=0x22011110所在的地址+0x4,此时,r2中的数表示的
                                  @是第二个值0x00000700 所在的地址(.long表示定义长整型占4个字节,0x00000700 
                                   @所在的地址=0x22011110所在的地址+0x4)
str r4,     [r1], #4         @ 将0x22011110写入到地址0x48000000,并r1=0x48000000+0x4=0x48000004
cmp r1,     r3               @ 判断是否设置完所有13个寄存器
bne 1b                        @ 若没有写成,继续 ldr r4,     [r2], #4 (将0x00000700写到r4中,......)......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值