Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2976279
  • 博文数量: 401
  • 博客积分: 12926
  • 博客等级: 上将
  • 技术积分: 4588
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-22 14:51
文章分类

全部博文(401)

文章存档

2015年(16)

2014年(4)

2013年(12)

2012年(82)

2011年(98)

2010年(112)

2009年(77)

分类:

2009-05-22 13:28:54

想做一个在OBM跑之前的boot,因为以后会碰到Rom code不support初始化DDR,且OBM已经超过了sram的容量时,那obm就没法跑了。因为代码不全嘛。所以作了一个Load obm的工具。功能就是初始化ddr,然后把obm load到ddr里,之后跳转到obm去跑。
最开始功能都实现了,但是在mnh上一直跑不通,跳转应该是没问题了,已经成功在obm里跑了,但是就是不出log最开始怀疑是死在汇编里了。后来通过jtag跟,发现已经跑到了c code.只是由于c code的参数传入的不对。
void OBMBootMain(UINT_T PlatformSettings)
PlatformSettings,估计就是拷贝过程中或者load过程中把那个参数给覆盖掉了。后来在汇编代码发现了这段code。

    LDR     r1, = ISRAMDateSpaceBase
    STR        r10, [r1]
原来是Rom code会去读CPU内部的一个fuses值,之后放在r10寄存器。通过这种方式传递给obm。所以我们跳转前,把这个fuses值也存入r10寄存器就可以了。
UINT_T SaveParamsForEboot(FUSE_SET  Fuses)
{
    __asm("MOV r10, r0");
    return (NoError);
}
obm会根据这个fuses值去得到flash的type还有uart之类的一些硬件的类型。然后初始化硬件。
阅读(1091) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~