打印

菜鸟求教ARM问题

[复制链接]
1650|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
花花无落|  楼主 | 2008-12-11 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

ADS的init.s中有以下代码:

; On reset, an aliased copy of ROM is at 0x0.
; Continue execution from 'real' ROM rather than aliased copy
        LDR     pc, =Instruct_2
        
Instruct_2        

; Remap by setting Remap bit of the CM_ctl register
        LDR     r1, =CM_ctl_reg
        LDR     r0, [r1]
        ORR     r0, r0, #Remap_bit
        STR     r0, [r1]

这个an aliased copy of ROM,是不是相当于芯片硬件完成的映射?但是为何还要有
        LDR     pc, =Instruct_2
        
Instruct_2  
不明白这样有何意义?

相关帖子

沙发
flyingpigpig| | 2009-9-5 21:25 | 只看该作者
有的ARM核的芯片的Memory map是不一样的,比如normal mode下,地址0x0处是RAM,而地址0x24....处是flash,这样的memory map有一个问题:复位时,ARm会去地址0处找中断向量,显然会找不到正确的中断向量,为了避免这样的问题,硬件会做个复位时的alised copy,效果是:访问地址0就是访问0x24....,这样就能从flash中取到正确的中断向量。此动作是由硬件完成的,不用user做任何的设定。这是你的第一个问题。

复位中断正确的响应后,user写的firmware必须操作相应的register做地址重映射动作,导致的结果就是地址的重新分布。这样会导致的问题是:比如完成了抵制重映射时PC值为0x1,那么接下来就要执行地址0x2处的指令,由于此时地址分布已经改变,取地址0x2可能取到错误的指令,怎么办?解决办法就是你提到的那段指令:首先,在地址重映射前将重映射后该执行的指令地址保存下来,重映射后,由于arm的流水线机制, 指令“LDR     pc, =Instruct_2”的地址已经被载入,一定会被执行!而此指令的只用就是跳到地址去执行指令。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

39

帖子

1

粉丝