AVR与TMS320VC5402的HPI接口通信接口设计.docx
《AVR与TMS320VC5402的HPI接口通信接口设计.docx》由会员分享,可在线阅读,更多相关《AVR与TMS320VC5402的HPI接口通信接口设计.docx(7页珍藏版)》请在冰豆网上搜索。
![AVR与TMS320VC5402的HPI接口通信接口设计.docx](https://file1.bdocx.com/fileroot1/2023-2/5/0e31397f-5158-4f83-abf3-0834344f86cb/0e31397f-5158-4f83-abf3-0834344f86cb1.gif)
AVR与TMS320VC5402的HPI接口通信接口设计
AVR与TMS320VC5402的HPI接口通信接口设计
摘要:
TMS320VC5402(VC5402)不具有可编程的非易失片内存储器,必须外扩存储程序代码和参数的存储器,在多数场合仅仅简单的扩充此类存储器会造成系统设计的繁琐。
利用AVR单片机片内大容量的flash存储器来存储DSP的程序和参数,使系统的整体设计更加紧凑,并弥补了VC5402控制和通用通信功能的不足,这不失为一种有效的解决办法。
文中详细分析了AVR单片机(ATMEL64L)同VC5402的HPI接口通信硬件设计和DSP程序代码的加载方法。
在通信软件的设计方面着重阐述了通信协议和DSP的bootloader实现方法。
关键字:
AVR,主机接口,bootloader,数字信号处理器
1. 引言
TMS320VC5402(简称VC5402)是TI公司的DSP处理器,具有高级的数据处理结构和丰富的片内资源。
但是VC5402DSP内部不具有可编程的非易失片内存储器,所以为了保存程序代码和参数表,一般情况下要外扩一片存储器。
VC5402可用的通用输入输出口(I/Oport)少,软件上对I/O口的控制不灵活,没有对I/O口按位控制的指令,且具有流水线延迟。
多不具有通用的通信接口如UART接口,CAN总线接口等,对控制的支持功能较少。
AVR(AdvancedRISCArchitecture)单片机是ATMEL公司的flash型单片机,广泛应用于数据处理和控制领域,具有丰富的片内资源和灵活的接口形式。
片内往往集成了几十kB乃至几百kB的flash存储器,每个端口几乎都可以通过软件设置为通用的I/O口和具有特殊功能的端口。
将AVR单片机和VC5402处理器相结合,发挥各自的优点将是一个很好的设计方案。
本文详细描述了AVR型单片机ATMEL64L和VC5402的HPI接口的硬件设计原理和软件设计构架,同时详细阐述了VC5402HPI形式的bootloader方法及AVR实现方法。
2. 硬件设计原理
2.1. VC5402的HPI接口
VC5402的HPI接口是一个增强版的8位并行的HPI接口简称为HPI-8[1]。
在HPI-8接口中VC5402是从机。
主机可以访问VC5402中位于0x60~0x3FFF存储器空间的片内存储器,这一区域是VC5402用户可用的所有的片内存储器资源。
主机通过两个寄存器:
地址寄存器(HPIA)和数据寄存器(HPID)访问VC5402内部的存储器。
还有一个控制寄存器(HPIC)包含有控制和状态信息。
HCNTL[0..1]是HPIA、HPID和HPIC的选址信号。
同时,VC5402对HCNTL[0..1]=“01”设置了特殊的访问模式以加快主机访问片内存储器的速度。
此时主机读写HPID的内容不用每次设置HPIA,当主机读HPID时VC5402将当前HPIA所指出的片内存储器的数据传送到HPID寄存器,同时HPIA的内容减1,当主机写HPID时DSP先将当前HPIA的内容加1,然后由此时HPIA所指出的片内存储器的数据传送到HPID寄存器。
由此可见此种方式比较适合于主机访问DSP内部的连续存储器空间。
由于DSP内部是按着16位的数据进行组织,所以主机通过8位的HPI口进行读写操作都必须由两次操作组成,在两次操作中由HBIL信号标明高低位字节。
2.2. ATMEL64L简介
AVR单片机是ATMEL公司的8位高性能的低功耗微控制器。
具有高级的精简指令集结构,绝大多数指令都是单周期指令,执行速度快。
ATMEL64L是Atmega103的升级版,具有64k字节在线可编程的flash存储器,可用于存储程序和固定的数据。
具有2k字节的EEPROM,位于数据区,可用于保存参数表。
具有4k字节的SRAM,为动态数据结构的存储建立了可能。
丰富的指令集、大容量而多样的存储器结构增加了ATMEL64L程序设计的灵活性。
另外ATMEL64L还具有丰富的片内外设,诸如:
USART、SPI、定时器/计数器、PWM通道、在片的模拟比较器等,提供了丰富的通信及控制资源。
2.3. 硬件设计实现
ATMEL64L和TMS320VC5402的HPI-8接口的硬件设计关键在于实现HPI-8接口的逻辑时序。
我们研究ATMEL64L外部数据空间的读写时序[2]和HPI-8接口时序[1]发现:
AVR的ALE信号在下降沿锁存低8位地址信号(DA7:
0),而HAS信号也是在下降沿锁存HCNTL[0..1]、HBIL和HRW信号。
在AVR的WR信号的上升沿数据总线上的数据DA7:
0已处于有效状态,在RD信号的上升沿来临时数据总线的数据DA7:
0必须处于有效状态,同时HPI-8的两个数据存储信号HDS1和HDS2均是在上升沿将相应的寄存器内容设置到HD[7..0]上或是将HD[7..0]的数据锁存到相应的寄存器。
由此可见HPI-8的重要控制线均可以和AVR相应的控制线直接相连而不需要其他逻辑电路。
设计的电路原理图见图1。
图1电路原理图
当DSP退出复位状态后,30个有效时钟周期内触发了一个有效的DSP中断2,则DSP将仅进入HPI的bootloader加载方式。
原理图中将HINT引脚和DSPINT2引脚直接相连就是为了DSP复位后实时的触发DSPINT2中断。
VC5402通过ATMEL64L的INT2中断申请加载DSP程序
3.HPIbootloader方式的实现
3.1. DSPbootloader方式简介
DSP的bootloader模式就是将DSP的程序代码和参数表由存储位置移动到运行位置。
之所以采用这一方式主要出于以下几方面的考虑:
1.DSP系统的运行速度很快,如果程序代码存储在访问速度较慢的非易失存储器,将严重影响数据处理的速度。
为提高效率有必要将程序代码移动到快速的存储空间[3]。
2.将程序代码存储位置和运行位置分开将有利于软件的在线升级。
VC5402的片内ROM存储器0xF800~0xFBFF中有TI公司固化的bootloader程序[3][4]。
当VC5402处于微计算机模式时,其复位后首先执行bootloader程序。
Bootloader程序依次扫描各种加载方式,当某一种方式满足时,程序停止扫描,开始以此种方式加载DSP程序。
这里我只介绍HPI方式的bootloader,其他方式的bootloader加载方法请参考[5-7]。
当DSP查询到有INT2中断发生时就进入HPI方式的bootloader,清零0x007F存储器单元,设置HINT信号向主机发送中断请求。
查询0x007F单元的内容是否为零,当不为零时表明DSP程序加载完毕。
将0x007F单元的内容作为程序的入口地址开始执行加载的DSP程序。
3.2.HPIbootloader方式的软件实现框架
通过CCS将DSP源程序编译连接成COFF文件格式得到.out文件。
然后,由.out文件获得DSP代码的二进制文件。
在AVR的C语言编辑环境ICCAVRV6.30C中采用下述方法将DSP的代码数据配置到AVRflash空间。
要注意const关键字使用。
/*dspvectorsectiondata.startaddress=0x1000,length=0x78*/
constunsignedintvector[120]={0xF073,0x3000,…,0xF495};
当DSP进入HPIBootloader方式时,AVR的外部中断2产生。
AVR响应外部中断2传输完相应的数据段到DSP对应的片内存储器后要撤销DSP的中断申请。
软件框架如下:
#pragmainterrupt_handlerint2_isr:
4
voidint2_isr(void)
{
unsignedintnumber;
HPIAL=0x0f;
HPIAH=0xff;
for(number=0;number<120;number++) /*传送vector数据段*/
{
AUTOWL=vector[number]>>8;
AUTOWH=vector[number];
}
…… /*传送其他数据段*/
HPIAL=0x00; /*设置DSP程序入口地址*/
HPIAH=0x7f;
WRITEL=0x30;
WRITEH=0x00;
while(((PIND&0x04)==0x00)) /*撤销DSP的中断申请*/
{
HPICL=0x0;
HPICH=0x8;
}
}
4. 通信软件设计框架
4.1. 主控器AVR命令的发布
AVR是主控器,DSP是从机。
AVR和DSP之间通过DSP内部存储器的命令缓冲区和响应标识缓冲区交换信息。
AVR触发DSP的HPI中断通知DSP有新的命令,DSP通过向响应标识缓冲区写入不同的内容向AVR表明DSP所处的状态。
AVR通过查询的方式确定DSP的处理状态。
AVR发布命令的程序框架:
HPIAL=0x00;
HPIAH=0x60;
WRITEL=orderhighbyte;
WRITEH=orderlowbyte; /*向命令缓冲区0x60写入命令*/
HPIAL=0x00;
HPIAH=0x61;
WRITEL=orderhighparameter;
WRITEH=orderlowparameter;/*向命令缓冲区0x61写入命令参数*/
HPICL=0x0; /*触发DSP中断*/
HPICH=0x4;
dsphpidata=0x00;
HPIAL=0x00;
HPIAH=0x62;
while((dsphpidata!
=0xaa))/*判断响应标识区0x62内容是否为0xaaaa*/
{
dsphpidata=READL;
dsphpidata=READH;
}
……
4.2. DSP对主控器命令的执行
AVR发给DSP的命令由DSP在HPI中断中处理。
DSP需要设置命令和响应缓冲区、处理响应的命令和设置响应标志等工作。
软件设计框架如下:
interruptvoidHPINT_isr(void);
#pragmaDATA_SECTION(orderbuffer,"order_sec") /*设置命令和响应缓冲区*/
volatileunsignedintorderbuffer[8];
……
interruptvoidHPINT_isr(void)
{
switch(order[0])
{
caseorder1:
/*处理命令1*/
……
orderbuffer[2]=0xaaaa; /*处理完命令1,设置响应标志*/
break;
……
}
}
5. 结论
1) 本文详细分析了AVR和TMS320VC5402HPI接口通信软硬件设计,给出了硬件设计原理图和软件设计框架。
实际测试表明该系统设计方案运行可靠。
2) 利用AVR控制功能强、集成flash存储器和DSP运算功能强、程序代码配置灵活的特点,形成AVR和DSP之间优势互补,是一个可以选择的合理的系统设计方案。
3) 有些DSP芯片内部集成的bootloader程序通过HPI口只能配置内部存储器,对于DSP程序比较大的系统仅仅利用集成的bootloader程序不能完成全部加载工作。
此时用户可以自行设计一个bootloader程序,将大的DSP程序加载到外部存储器空间。
6.参考文献
[1]TexasInstrumentsInc.TMS320C54xDSPReferenceSetVolume5:
EnhancedPeripherals.P182~287
[2]AtmelIncorporation.ATMEL64/ATMEL64Lpreliminary.
[3]TexasInstruments.TMS320VC5402andTMS320UC5402Bootloader.
[4]TexasInstruments.TMS320VC5402FIXEDPOINTDIGITALSIGNALPROCESSORdatasheet.
[5]TexasInstruments.APracticalApplicationoftheTMS320C54xHostPortInterface(HPI).
[6]李忠,李峰.DSP编程的几个关键问题.电子技术应用,2003,1:
15-17.
[7]香勇,施克仁.TMS320C54x的加载引导.国外电子元器件,2003,3:
4-7.