TMS320VC5416并行自举的巧妙实现
(1)将DSP的MP/MC引脚置高,让DSP工作在微处理器方式。
(2)将代码1通过仿真器下载到DSP中,但不运行该代码。
(3)将代码2通过仿真器下载到DSP中,运行此代码。
(4)代码2运行结束后,去掉仿真器,并将MP/MC引脚置低,让DSP工作在微型计算机方式。
(5)复位DSP,观察程序运行的结果是否正常。
“两次下载法”中两次代码的存储区分配情况如图3所示。
图中,代码1中的数据段起始地址
为0xA,数据段结束地址这0xB,代码段起始地址为0xC,代码段结束地址为0xD,其中0xB和0xC可以是同一地址,也可是不同地址;代码2中的数据段起始地址为0xG,数据段结束地址为0xFFFF,代码段起始地址为0xE,代码段结束地址为0xF,其中0xF和0xG可以是同一地址,也可以是不同地址。对TMS320VC5416而言,因其0x0000~0x7FFF对应的是内部的32K字空间,所以两个表中的地址大小关系为0xG<0xC<0xD<0x8000。
基于上述思想,假设代码1的程序段为0x4000~0x7FFF,数据段为0x3000~0x3FFF,代码2的程序段为0x2000~0x2FFF,数据段为0x3000~0xFF7F(需要注意的是,代码2的数据段必须包含代码1的代码段和FLASH所占据的地址空间,代码2的代码段绝对不能与代码1的代码段有重叠),外部FLASH占据的地址空间为0x8000~0xFF7F,自举表的首地址从0x8000开始,并且SWWSR和BSCR的值分别为0x0E38和0x8806,程序入口地址为0x004089,代码1长度为16K字,代码1的存放起始地址为0x004000,那么代码2在FLASH中建立自举表的程序如下:
UINT I; //定义临时变量
UINT *Addr1,*Addr2; //定义临时地址指针变量
Addr1=(uint *)0xffff;
Word_Program(Addr1,0x8000); //在数据空间0xffff地址写自举表起始地址0x8000
Addr1=(uint *)0x8000; //自举表首地址
Word_Program(Addr1,0x10AA); //自举总线宽度为16位,即第一个字为0x10AA
Addr1++; //累为地址
Word_Program(Addr1,0x0E38); //SWWSR的值
Addr1++; //累加地址
Word_Program(Addr1,0x8806); //BRSC的值
Addr1++; //累加地址
Word_Program(Addr1,0); //程序入口地址XPC为0
Addr1++; //累加地址
Word_Program(Add
《TMS320VC5416并行自举的巧妙实现(第3页)》