问题描述
NXX板要使用国产化FT-C6416芯片,其与TI的C6416功能兼容,只是要额外安装仿真器驱动,且只支持CCS3.3以下版本。
NXX板硬件粗调后要用软件做测试,由于开发环境尚未准备好,只能使用老的BIN文件通过主机下载。测试发现闪灯程序运行正常。然而改用CCS5.4下开发的闪灯程序后,主机下载BIN文件功能不正常。灯只亮不闪。
问题分析
由于两者的代码是一致的,只是开发环境和配置的区别。因此先分析两个BIN文件的区别。
BIN文件的格式见图。先是一个入口地址,然后多个由“长度-地址-数据”组成的段,最后是一个0x00000000结束。
仔细比较新旧版两个BIN文件,发现地址范围不一致。然后追溯map文件发现老版本的内存中留了一段从零地址到0x20地址的空间未使用,而新版本中使用了全部地址,且起始处存放的是中断向量表。
会不会是这个差异导致的问题呢?找出C6000启动相关的文档,发现C6000的启动流程是这样的。
在HPI启动下,主机先给DSP发送一个复位信号,复位完成后DSP采集启动引脚信号发现是主机启动模式,则陷入Stall状态。这时主机可以通过HPI接口写DSP内存,然后通过DSPINT给DSP发送中断。DSP收到中断后跳转到内存起始地址执行。
然而一般情况下入口地址并不一定在内存起始地址处,而是随着代码和编译器而变化的。因此为了保证正常执行,需要主机在中断前先往DSP的起始地址入写一个跳转指令,跳转到入口地址那里。
这就解释了为什么老版代码避开了开始的一段空间了,因为这里是