基于HPI方式自举在TMS320VC5402 DSP芯片上实现
行一个块,这种分块的最大长度固定,因此在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程序的作用是用于突破TMS320VC5402 4K片内RAM空间限制的中间程序,其功能无非就是按照和HOST CPU的某种约定,获取DSP程序代码和相应地址信息,在DSP所能够访问到的存储器空间(片内和片外)生成DSP程序代码。由于 Kernel的功能比较少,故其可以做得非常小。其中关键的生成DSP程序代码部分的代码如下:
...
.bss addr 1 ;程序代码目的地址
.bss length 1 ;程序代码长度
.bss codedata 20 ;接收程序代码缓冲区
...
.text
START
...
MOVE
STM #addr AR4 获取程序代码目的地址
LD AR4 A
STM #codedata AR3 获取程序代码
MVDM #length AR5 获取程序代码长度
NOP
MAR +AR5 #-1
RPT AR5 定位
WRITA AR3+
...
ENDLOAD
B app_start 启动
...
4.3 运行流程
按照前述的系统构成,首先将PC机上调试好的Kernel程序和DSP应用程序(一般为COFF格式)转换成HEX文件,并通过串口将这些文件存放到CPU的Flash中,在存放过程中应将HEX文件原样保存,以保留其中所有的信息。在系统启动后,CPU从Flash中获取Kernel的HEX数据,通过HPI将其在TMS320VC5402中组合出Kernel运行程序并启动。然后,CPU从其Flash中获取DSP应用程序的HEX数据,通过HPI将其分块放入TMS320VC5402,并和已经开始运行的Kernel程序最终完成DSP引用程序的正确定位工作。最后启动DSP应用程序。
在实践中发现,虽然HPI的设计初衷是为了和低速8位机接口进行数据交换,但是HPI本身的工作速度非常高。通过HPI方式加载一段不小于130K的DSP应用程序代码所需要的时间不超过3秒钟。
TI系列DSP提供了如此丰富的应用方式,无疑给DSP系统开发者带来了极大的方便。
HPI TMS320VC5402 DSP 相关文章:
- DSP HPI口与PC104总线接口的FPGA设计(04-14)
- CPLD在DSP系统中的应用设计(04-11)
- 基于DSP的HPI接口的视频数据传输系统设计(03-01)
- FPGA与DSP协同处理系统设计之: FPGA与DSP的通信接口设计(06-05)
- PC/104总线与HPI口通信的解决方案(12-21)
- TMS320C6727 DSP两种引导方式设计(10-22)