打印

2410的启动代码的一部份,帮帮忙吧,说说思路

[复制链接]
1592|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
armfan|  楼主 | 2008-3-7 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;@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
    ]
    [ ENTRY_BUS_WIDTH=16
        DCD 0x0f10ee11
        DCD 0x0080e380  
        DCD 0x0f10ee01  
    ]
    [ ENTRY_BUS_WIDTH=8
        DCD 0x100f11ee  
        DCD 0x800080e3  
        DCD 0x100f01ee  
        ]

相关帖子

沙发
twentyone| | 2008-3-7 20:18 | 只看该作者

这是配置部分

相当于条件编译,[ ] 相当于if end组合。

所以,你的代码可以解释为:如果总线宽度为32,怎样。。。如果总线宽度为16怎样。。。

具体的配置,看看数据手册。

使用特权

评论回复
板凳
armfan|  楼主 | 2008-3-9 12:59 | 只看该作者

re

"具体的配置,看看数据手册"
我查找了一些材料,发现对这一块讲的都不是很清楚。
 DCD 0xee110f10  是什么意思?
“0xee110f10 => mrc p15,0,r0,c1,c0,0”
这句又是什么意思?0xee110f10是不是mrc p15,0,r0,c1,c0,0的机器码?
如果要是机器吗的话,又是怎么查找的?

使用特权

评论回复
地板
armfan|  楼主 | 2008-3-10 09:56 | 只看该作者

自己顶一下

确实很迷惑,请高手指教

使用特权

评论回复
5
dld2| | 2008-3-10 10:07 | 只看该作者

DCD

类似51上的DB。

使用特权

评论回复
6
armfan|  楼主 | 2008-3-10 10:12 | 只看该作者

re

dcd操作我明白是什么东西。

不明白的这段代码的作用是实现什么的,怎么实现。

使用特权

评论回复
7
dld2| | 2008-3-10 10:17 | 只看该作者

那要看上下文了

我认为这里存放的就是指令的机器码。

使用特权

评论回复
8
armfan|  楼主 | 2008-3-10 11:17 | 只看该作者

re

ASSERT    :DEF:ENDIAN_CHANGE
    [ ENDIAN_CHANGE
        ASSERT  :DEF:ENTRY_BUS_WIDTH
        ][ ENTRY_BUS_WIDTH=32
            b    ChangeBigEndian        ;DCD 0xea000007 
        ]
        
        [ ENTRY_BUS_WIDTH=16
        andeq    r14,r7,r0,lsl #20   ;DCD 0x0007ea00
        ]
        
        [ ENTRY_BUS_WIDTH=8
        streq    r0,][r0,-r10,ror #1] ;DCD 0x070000ea
        ]
    |
    b    ResetHandler  
    ]
    b    HandlerUndef    ;handler for Undefined mode
    b    HandlerSWI        ;handler for SWI interrupt
    b    HandlerPabort    ;handler for PAbort
    b    HandlerDabort    ;handler for DAbort
    b    .                ;reserved
    b    HandlerIRQ        ;handler for IRQ interrupt 
    b    HandlerFIQ        ;handler for FIQ interrupt

;@0x20
    b    EnterPWDN
ChangeBigEndian
;@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
    ]
    [ ENTRY_BUS_WIDTH=16
        DCD 0x0f10ee11
        DCD 0x0080e380    
        DCD 0x0f10ee01    
    ]
    [ ENTRY_BUS_WIDTH=8
        DCD 0x100f11ee    
        DCD 0x800080e3    
        DCD 0x100f01ee    
        ]
    DCD 0xffffffff  ;swinv 0xffffff is similar with NOP and r,un well in both endian mode. 
    DCD 0xffffffff
    DCD 0xffffffff
    DCD 0xffffffff
    DCD 0xffffffff
    b ResetHandler

这是2410 start.文件的一部份。
请高手帮分析一下

使用特权

评论回复
9
dld2| | 2008-3-10 11:34 | 只看该作者

这个代码

是说如何在系统复位时修改系统的大小端(big or little endian)方式。
如果ENDIAN_CHANGE有效,并且ENTRY_BUS_WIDTH=32
    就要:b    ChangeBigEndian
    而ChangeBigEndian所对应的地址处放的是几个指令机器码。

我建议你在这个地方不必认真。如果想认真,去看最原始的资料。

使用特权

评论回复
10
Ice_River| | 2008-3-10 12:50 | 只看该作者

建议去读读VIVI

结构非常好!对启动代码的理解也很有帮助!

使用特权

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

本版积分规则

38

主题

114

帖子

0

粉丝