HPI自举在TMS320VC5402芯片上的实现
一般将上述的首先放入DSP的程序称为kernel程序,其功能比较简单,本身不超过4K,可以由HOST全部放入到TMS320VC5402的片内RAM中,并被启动。
基于此种思路的流程图如图1所示。
3.3 程序代码的定位
编程序的时候使用符号作为地址,经编译、链接后,符号所表示的相对地址已经转化为绝对地址。要使程序能够正常运行,需要将程序代码写到指定的位置——绝对地址。在HOST→Kernel→DSP应用的HPI自举方式中,HOST和Kernel需先后完成Kernel代码和DSP应用程序代码的定位工作。
因此,在HOST CPU的外存储器中,至少需要保存DSP程序代码和相应的地址信息。这些数据在由自举程序写到DSP后,被拼接成正确的可执行代码、已初始化数据等,并被正确定位。一般来说,HOST CPU的外存储器中的DSP自举数据是HEX格式的。虽然HEX格式有很多种,但任何一种包含有地址等信息的16进制HEX格式文件都是适用的。
常见的HEX格式有ASCII、Intel、TI-Tagged等格式,如图2所示。
在各种HEX格式中,Intel格式相对来说比较适宜,因为在Intel格式的HEX文件中,代码被分为每行一个块,这种分块的最大长度固定,因此在DSP内预留的缓冲区的大小容易计算。Intel格式的HEX文件的格式为:BYTE1作为每块的起始标志,总是“:”;BYTE2-3表示该真中有效数据的长度,最长为32个BYTE。这种有效数据可能是程序代码,也可能是扩展地址信息;BYTE4-7表示该真内代码的起始地址;BYTE8-9是类型,00表示程序挖出,01表示结束,04表示扩展地址信息;BYTE10之后是代码,直到最后两个BYTE,表示校验位。校验位的值是该真中先前数据值和的补码。
根据选定的HEX格式,CPU首先按照该格式的定义对Kernel的HEX数据进行解释,获取各种信息后,CPU将其在TMS320VC5402片内RAM中组成可执行DSP程序。然后在CPU和kernel的共同作用下,对DSP应用程序的HEX数据进行解释,最后完成其在DSP中的拼接、定位并启动DSP应用程序——跳转到DSP应用程序的起始地址。
4 系统软硬件设计与实现
4.1 系统框图
在笔者开发的VOIP系统中,使用了HPI对DSP(TMS320VC5402)进行自举的功能。其中相应部分的框图如图3所示。
对于PC机插卡的系统,该框图更可以省略掉HPI以右的部分,而直接使用PC机的CPU和硬盘作为相应的控制和只读存储器件。这样,仅需要为DSP配备RAM即可使其正常运行。
4.2 Kernel程序设计
按照前面所说,kernel程序的作用是用于突破MS320VC5402 4K片内RAM空间限制的中间程序,其功能无非就是按照和HOST CPU的某种约定,获取DSP程序代码和相应地址信息,在DSP所能够访问到的存储器空间(片内和片外)生成DSP程序代码。由于Kernel的功能比较少,故其可以做得非常小。其中关键的生成DSP程序代码部分的代码如下:
…
.bss addr,1 ;程序代码目的地址
.bss length,1 ;程序代码长度
.bss codedata,20 ;接收程序代码缓冲区
…
.text
《HPI自举在TMS320VC5402芯片上的实现(第3页)》