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有关于该部分的描述: