打印
[ZLG-ARM]

启动代码

[复制链接]
1856|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leonlais|  楼主 | 2008-11-30 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在SMART 2400 启动代码中 

Reset                                                                   ;/*  中断向量表                 */
        LDR         PC, ResetAddr
        LDR      PC, UndefinedAddr
        LDR       PC, SWI_Addr
        LDR      PC, PrefetchAddr
        LDR      PC, DataAbortAddr
        DCD      0xb9206e50
        LDR      PC, [PC, #-0x120]
        LDR      PC, FIQ_Addr

ResetAddr           DCD     ResetInit
UndefinedAddr       DCD     Undefined
SWI_Addr            DCD     SoftwareInterruptAdd
PrefetchAddr        DCD     PrefetchAbort
DataAbortAddr       DCD     DataAbort
Nouse               DCD     0
IRQ_Addr            DCD     0
FIQ_Addr            DCD     FIQ_Handler

Undefined
        B       .
PrefetchAbort
        B       .
DataAbort
        B       .          

其中     


 DCD      0xb9206e50        ;这是保留地址,这个值由用户写进来,怎么算出这个值呢?
 LDR      PC, [PC, #-0x120]  ;这样写的目的是?#-0x120怎么来的?

IRQ_Addr            DCD     0 ; 这句是从地址IRQ_Addr 开始分配一个字(4字节)的内存空间并且用0来初始化?



Undefined
        B       .          ;这是什么意思?     

相关帖子

沙发
QAWSDEDR| | 2008-11-30 16:39 | 只看该作者

我来解释。仔细看ZLG的书,书上都有的!

DCD      0xb9206e50        ;NXP的BOOT通过判断这个位的植来判断用户代码是否有效。可以运算获得,大多情况,ZLG的模板都算好了,不用修改。
LDR      PC, [PC, #-0x120]  ;这是从中断向量寄存器里获得中断函数指针,因为执行这条语句时的PC和VICvectAddr寄存器的地址差是#-0x120。

IRQ_Addr            DCD     0 ; 这句话没用,属于制作模板的人写的废话。



Undefined
        B       .          ;死循环。  

使用特权

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

本版积分规则

17

主题

26

帖子

0

粉丝