|
最近这个工作是要把以前的6713上的一个程序移植到6727上,本来以为这两个芯片只有两个数字不同,应该差别不大,可是开发过程中却遇到了许多新问题。第一个重要的问题就是从flash自举。
由于6727的EMIF的地址线太少,只有13根,当要对较大的flash存储器寻址时,必须想办法确定地址的高位。硬件设计上将flash的A14-A17与DSP的HD0 – HD4相连。HD0 – HD4 属于UHPI单元,因此在启动之后第一件事情就是将HD0 – HD4设置为GPIO模式。对flash寻址的时候,先设置好GPIO这几根线,然后再读取地址0x9000xxxx中的值。
6727从0x00000000 – 0x10000000的地址空间属于片内ROM,当DSP启动时从ROM中的0x00000000开始运行,这里面有一段程序将自动读取DSP的几根启动配置线的值,以决定采用何种方式载入程序。这个项目从flash启动,当ROM中的程序确定从flash启动之后,它读取flash中的第一个字节的数据(地址为0x90000000),若为0则表示此flash为8bit,若为1则表示为16bit,然后它进行相应的EMIF的配置,接着复制flash中的头1024个字节到0x10000000。0x90000000 – 0x90000400 到 0x10000000 – 0x10000400,然后设置程序指针寄存器到0x10000004开始运行。
放在0x90000000 – 0x90000400的程序就是所谓的Bootloader。它负责把剩下的程序从flash复制到指定的位置,然后跳转到c_int00开始程序的执行。TI提供的Using the TMS320C672x Bootloader文档有这方面的详细介绍。但是其中推荐的启动格式是Application image script(AIS)。这和以前的6713的Boot table完全不同。为了能够识别AIS格式,1Kbyte的程序远远不够,因此TI提供的例子采用了二级启动。先由0x90000000 – 0x90000400这1Kbyte的程序将放在flash中的一个二级启动程序复制到内存中,然后运行这个二级启动程序,它分析flash中的AIS格式的数据,并将相应部分复制到内存中,然后再跳转到c_init00运行。
我觉得这样的程序写起来太复杂了,于是干脆还是用以前的那个boot table格式,和6713的程序基本相同,就是要多注意flash地址页更换的情况。
|