TI中文支持网
TI专业的中文技术问题搜集分享网站

DM6467 uboot源码问题

u-boot-1.2.0_dvs6467拿到这份源码包,分析arm926ejs下面的start.S文件,入口第一行就让我很迷茫:

 .globl _start

_start:  

            MOV R1,#0x42000000   

            ADD R1,R1,#0x10  

            MOV PC,R1  

            MOV R0,R0

#ifdef CFG_DAVINCI_HD   //defined in davinci_dm646x.h  

            ldr r0,ARMBOOT_REG  //0x01C40024 ARMBOOT Register  

            ldr r1,[r0]  

            and r1,r1,#0xffffffef  

            str r1,[r0]

#endif

            //LDR PC,NOR_START_PC   

            b reset  

            ldr pc, _undefined_instruction  

            ldr pc, _software_interrupt  

            ldr pc, _prefetch_abort

哪位师傅能够告诉我为什么start刚开始就跳走了,跳到0x42000010处,是因为BTMODE[3:0] = 0100,默认对我这个SEED-DVS6467T开发板采用EMIFA boot方式?可是跳过去执行什么呢?

MOV PC,R1这样的跳转,链接寄存器也没有保存此指令下一条指令的地址,怎么能跳回来呢?还用类似本文件的方法(mov pc, #0x8)?

如果不跳回来,那难道不执行b reset及其以后的代码了?

另外,and r1,r1,#0xffffffef这句怎么会将ARMBOOT register的第五位ADDMOD设置为0?,手册中明明说BTMODE[3:0] = 0100的时候ADDMOD默认为1,反之则为0,如果这里是ADDMOD是0,那么和前面刚开始BTMODE[3:0]=0100岂不是矛盾了?

是不是我的分析有误?还请各位大神不吝赐教!本人刚开始接触达芬奇的板子,很多地方不明白,先谢谢大家了!!!!

Louis:

DM6467的数据手册4.4.2.4有关于该部分的描述:

jason lu:

回复 Louis:

Louis

DM6467的数据手册4.4.2.4有关于该部分的描述:

赞(0)
未经允许不得转载:TI中文支持网 » DM6467 uboot源码问题
分享到: 更多 (0)