首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
HPI自举在TMS320VC5402芯片上的实现 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 23:51:09 点击数:[] ![]() |
|||||
PI-8的使用是通过对HPIA、HPIC和HPID三个寄存器赋值实现的。HPIA是地址寄存器,HPIC是控制寄存器,而HPID是数据寄存器。简单地说,HOST通过外部引脚HcomTL0和HcomTL1选中不同的寄存器,则当前发送8位数据就到该寄存器。在使用上,由于HPIC是16位寄存器,而HPI-8是8位的数据宽度,所以HOST向HPIC写数据时,需要发送两个一样的8位数据。而地址寄存器HPIA选择后,直接向它写数据就可以了,但是要注意MSB和LSB的顺序。另外,HPIA具有自动增长的功能,在每写入一个数据前和每写入一个数据后,HPIA会自动加1。这样,如果使能了该功能,只需设定一次HPIA即可实现连续数据块的写入和读出。数据寄存器HPLD,严格就应该叫做数据缓冲寄存器,因为最终数据是要写到片内RAM的。只是在实现上,数据首先从HOST发到HPID中,然后根据HPIA指定的地址,HPID中的数据再写到片内RAM的地址中。不过对用户而言,该过程是透明的。 3 使用HPI对DSP进行自举 HPI是作为多机数据交换而出现的,但是由于其功能特性,又产生一种新应用——使用HPI对DSP进行自举。实际上,TMS320VC5x系列DSP在片内固化的Bootloader程序中对HPI自举提供了全面的支持。笔者在VOIP系统的开发中,实现了使用HPI对DSP TMS320VC5402的自举,从而省掉了DSP的EPROM,使DSP只使用SRAM,提高了处理速度,并使HOST CPU具有更大的控制权,很适合多处理器系统。对于计算机插卡式的DSP系统,程序可以从PC机的硬盘上获取,从而减小了插卡版面空间占用,提高了处理速度。 在实现上,需要解决以下几个问题。 3.1 DSP片内固化的Bootloader程序对HPI自举的支持 Bootloader查询HPI方式是否可用是这样进行的:在启动以后,DSP片内0x7f地址的值被置为0,Bootloader不断检验0x7f地址处是否出现了可用的程序指针的跳转地址。当其发现该地址内的值不为0时,即判定为DSP已由外部HOST CPU进行了HPI自举程序加载,并按照该值跳转PC指针,开始运行,从而完成HPI方式自举 3.2 突破4K的空间限制 由于HPI-8的特性,HOST能够访问所有的片内RAM空间,对于TMS320VC5402来说,其片内RAM地址空间从0000H到3fffH,一共4K。这已经大大超过了标准HPI的2K的大小,但是对于大多数DSP应用程序来说,片内RAM除了放置程序代码以外,很可能还需要留出一部分供数据空间使用。实际上,大部分代码都可能放置在片外的程序空间,而这部分空间并不是HOST通过HPI-8所能够访问得到的。所以需要使用某种技术突破4K的片内RAM空间限制。由于DSP程序本身是能够访问到所有DSP程序、数据空间的,所以HOST可以首先放置一个体积不大于4K的程序到DSP内,再由该程序和HOST协作完成超出片内RAM的代码放置工作。 一般将上述的首先放入DSP的程序称为kernel程序,其功能比较简单,本身不超过4K,可以由HOST全部放入到TMS320VC5402的片内RAM中,并被启动。 基于此种思路的流程图如图1所示。 编程序的时候使用符号作为地址,经编译、链接后,符号所表示的相对地址已经转化为绝对地址。要使程序能够正常运行,需要将程序代码写到指定的位置——绝对地址。在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.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 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系统开发者带来了极大的方便。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |