主题 : 在启动代码中,尝试改变系统的运行模式,就改变大小端的问题。 复制链接 | 浏览器收藏 | 打印
向你学习!
级别: 新手上路
UID: 11311
精华: 0
发帖: 19
金钱: 105 两
威望: 27 点
综合积分: 38 分
注册时间: 2009-12-03
最后登录: 2010-07-20
楼主  发表于: 2009-12-15 21:15

 在启动代码中,尝试改变系统的运行模式,就改变大小端的问题。

在启动代码中,尝试改变系统的运行模式,就改变大小端的问题。

有代码:
ChangeBigEndian ;//here ENTRY_BUS_WIDTH=16
;@0x24
    [ ENTRY_BUS_WIDTH=32
        DCD    0xee110f10    ;0xee110f10 => mrc p15,0,r0,c1,c0,0
        DCD    0xe3800080    ;0xe3800080 => orr r0,r0,#0x80;  //Big-endian
        DCD    0xee010f10    ;0xee010f10 => mcr p15,0,r0,c1,c0,0
        ;对存储器控制寄存器操作,指定内存模式为Big-endian
        ;因为刚开始CPU都是按照32位总线的指令格式运行的,如果采用其他的话,CPU别不了,必须转化
        ;但当系统初始化好以后,则CPU能自动识别
    ]
    [ ENTRY_BUS_WIDTH=16
        DCD 0x0f10ee11
        DCD 0x0080e380
        DCD 0x0f10ee01
        ;因为采用Big-endian模式,采用16位总线时,物理地址的高位和数据的地位对应
        ;所以指令的机器码也相应的高低对调
    ]
    [ ENTRY_BUS_WIDTH=8
        DCD 0x100f11ee
        DCD 0x800080e3
        DCD 0x100f01ee
    ]
    DCD 0xffffffff  ;swinv 0xffffff is similar with NOP and run well in both endian mode.
    DCD 0xffffffff
    DCD 0xffffffff
    DCD 0xffffffff
    DCD 0xffffffff
    b ResetHandler

这段代码怎么理解,DCD就可以实现ChangeBigEndian了吗 ?

并且DCD 0xffffffff就是实现了延时?

谢谢