This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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岂不是矛盾了?

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

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

  • Louis 说:

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

    thank you!

    这段话我之前看到了,所以我才有上面的问题,我没搞明白:

    1.为什么刚开始就跳走了,到0x42000010去了,那其后 的reset代码难道不执行了?

    2.如果说是EMIIFA方式加载的,那下面的ARMBOOT的第五BIT,也就是ADDRMOD为何又设置为0了?手册里,就在你这段话下面就有讲到若BITMODE[3:0]=0100的时候,ADDRMOD不是应该设置为1么?

    请问您能帮我详细讲一下么,我刚开始接触这个板子和UBOOT,不很了解~谢谢啦