datasheet

基于AVR和TMS320VC5402的HPI接口通信设计

2018-03-01来源: eefocus关键字:AVR  TMS320VC5402  HPI接口通信

    1.前 言

    TMS320VC5402(简称VC5402)是TI公司的DSP处理器,具有高级的数据处理结构和丰富的片内资源。但是VC5402 DSP内部不具有可编程的非易失片内存储器,所以为了保存程序代码和参数表,一般情况下要外扩一片存储器。VC5402可用的通用输入输出口(I/O port)少,软件上对I/O口的控制不灵活,没有对I/O口按位控制的指令,且具有流水线延迟。多不具有通用的通信接口如UART接口,CAN总线接口等,对控制的支持功能较少。AVR(Advanced RISC Architecture)单片机是ATMEL公司的flash型单片机,广泛应用于数据处理和控制领域,具有丰富的片内资源和灵活的接口形式。片内往往集成了几十kB乃至几百kB的flash存储器,每个端口几乎都可以通过软件设置为通用的I/O口和具有特殊功能的端口。将AVR单片机和VC5402处理器相结合,发挥各自的优点将是一个很好的设计方案。本文详细描述了AVR型单片机ATMEL64L和VC5402的HPI接口的硬件设计原理和软件设计构架,同时详细阐述了VC5402 HPI形式的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。

36.gif
              图1 电路原理图

    当DSP退出复位状态后,30个有效时钟周期内触发了一个有效的DSP中断2,则DSP将仅进入HPI的 bootloader加载方式。原理图中将HINT引脚和DSP INT2引脚直接相连就是为了DSP复位后实时的触发DSP INT2中断。VC5402通过ATMEL64L的INT2中断申请加载DSP程序

    3.HPI bootloader方式的实现

    3.1. DSP bootloader方式简介

    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.HPI bootloader方式的软件实现框架

    通过CCS将DSP源程序编译连接成COFF文件格式得到.out文件。然后,由.out文件获得DSP代码的二进制文件。在AVR的C语言编辑环境ICCAVR V6.30C中采用下述方法将DSP的代码数据配置到AVR flash空间。要注意const关键字使用。

    /* dsp vector section data. start address = 0x1000, length = 0x78 */

    const unsigned int vector[120]={0xF073,0x3000,…,0xF495};

    当DSP进入HPI Bootloader方式时,AVR的外部中断2产生。AVR响应外部中断2传输完相应的数据段到DSP对应的片内存储器后要撤销DSP的中断申请。软件框架如下:

    #pragma interrupt_handler int2_isr:4

    void int2_isr(void)

    {

    unsigned int number;

    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需要设置命令和响应缓冲区、处理响应的命令和设置响应标志等工作。软件设计框架如下:

    interrupt void HPINT_isr(void);

    #pragma DATA_SECTION(orderbuffer,"order_sec")   /* 设置命令和响应缓冲区 */

    volatile unsigned int orderbuffer[8];

    ……

    interrupt void HPINT_isr(void)

    {

    switch(order[0])

    {

    case order1:              /* 处理命令1 */

    ……

    orderbuffer[2] = 0xaaaa;     /* 处理完命令1,设置响应标志 */

    break;

    ……

    }

    }

    5. 结论

    1)  本文详细分析了AVR和TMS320VC5402 HPI接口通信软硬件设计,给出了硬件设计原理图和软件设计框架。实际测试表明该系统设计方案运行可靠。

    2)  利用AVR控制功能强、集成flash存储器和DSP运算功能强、程序代码配置灵活的特点,形成AVR和DSP之间优势互补,是一个可以选择的合理的系统设计方案。

    3)  有些DSP芯片内部集成的bootloader程序通过HPI口只能配置内部存储器,对于DSP程序比较大的系统仅仅利用集成的bootloader程序不能完成全部加载工作。此时用户可以自行设计一个bootloader程序,将大的DSP程序加载到外部存储器空间。

    6.参考文献

    [1] Texas Instruments Inc. TMS320C54x DSP Reference Set Volume 5: Enhanced Peripherals. P182~287

    [2] Atmel Incorporation. ATMEL64/ATMEL64L preliminary.

    [3] Texas Instruments. TMS320VC5402 and TMS320UC5402 Bootloader.

    [4] Texas Instruments. TMS320VC5402 FIXED POINT DIGITAL SIGNAL PROCESSOR data sheet.

    [5] Texas Instruments. A PractICal Application of the TMS320C54x Host Port Interface(HPI).

    [6] 李忠,李峰. DSP编程的几个关键问题. 电子技术应用, 2003,1:15-17.

    [7] 香勇,施克仁. TMS320C54x的加载引导. 国外电子元器件, 2003,3:4-7.


关键字:AVR  TMS320VC5402  HPI接口通信

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018030137974.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:油缸压力嵌入式压力监测系统软硬补偿方法实现
下一篇:AVR看门狗使用范例即Reset程序详解

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR单片机——中断系统

中断的优点中断函数只在中断触发源触发的时候才会执行,其他时间不执行. 如果不使用中断而且如果要根据某个端口的变化而作相应的函数操作,就必须不断地查询端口的信号,而中断不用,只要端口一有变化,就会系统就会自动进入中断函数, 我觉得这就是中断的目的,也是优点.中断优先级1) AVR单片机在同一个优先级中,中断向量入口地址越低,其优先级越高。AVR单片机在响应中断以后,会禁止系统响应其余中断。如果程序需要在某个中断服务程序中响应其它中断事件,可以在该中断服务程序中用重新使能全局中断即可。否则,AVR单片机只有在退出中断进程时,才重新使能全局中断。2) AVR(至少是ATmega16)单片机采用固定的硬件优先级方式,不支持通过软件
发表于 2018-11-20
AVR单片机——中断系统

高手总结!AVR单片机学习笔记

下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。1、  AVR单片机采用RISC架构,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令2、  AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器3、  哈佛结构,131条机器指令4、  延迟开机功能5、  内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟6、 
发表于 2018-11-20

单片机抗干扰能力那家强?PIC、AVR....

单片机的抗干扰性能历来为大家所重视,现在市面上的单片机就我所接触过的,就有十家左右了,韩国的三星和现代;日本的三菱,日立,东芝,富士通,NEC;台湾的EMC,松汉,麦肯特,合泰;美国的摩托罗拉,国半的cop8系列,microchip系列,TI的msp430系列,AVR系列,51系列,欧洲意法半导体的ST系列。。。。。。这些单片机的抗干扰性能大多数鄙人亲自测试过,所用机器是上海三基出的两种高频脉冲干扰仪,一种是欧洲采用的标准,一种是日本采用的标准;日本的标准歉咂德龀辶⒊觯龀蹇矶却?0ns到250ns可调,欧洲采用的标准是脉冲间歇(间歇时间和发出时间可调)发出,脉宽也是从50ns到250ns可调;我们国家采用的是欧洲标准。一般
发表于 2018-11-20

AVR Mega8 V-USB general & multimedia keys via IR transmitor

(2)段)reportBuffer[1],0位USAGE (Volume Decrement);1位USAGE (Volume Increment);2位USAGE (Track Next);3位USAGE (Track Previous);4位USAGE (Play/Pause)reportBuffer[2] 没有用到。在report id为 2 报告发送函数:usbSetInterrupt((void *)&reportBuffer, 2); //因为只定义了两个字节的报告数据实验中IR处理用了AVR的ICP。需要注意的是,发送按键HID报告后,紧接着发送同类型的零数据HID报告
发表于 2018-10-17
AVR Mega8 V-USB general & multimedia keys via IR transmitor

AVR Mega16 PAL/NTSC制式 B/W 信号模拟

资料参考http://www.rickard.gunee.com/projects/video/pic/howto.phphttp://tinyvga.com/avr-sdram-vgahttp://www.serasidis.gr/circuits/colour_bar_gen/colour_bar_gen.htmhttp://belogic.com/uzebox/index.asp以下引用自 http://eyetap.org/ece385/lab5.htmSEQUENCE:Horizontal sync (hsync) pulse: Start each scanline with 0.3V, then 0V
发表于 2018-10-17
AVR Mega16 PAL/NTSC制式 B/W 信号模拟

AVR使用范例--使用Bootloader 升级芯片内程序详解

Bootloader是flash中高地址的一个程序区域,通过它可以实现程序的运行控制,程序更新等。本页给出的是通过串口实现在线更新的方法。程序编译环境:icc avr 6.31。如果你使用Atmega16芯片,7.3728M晶振,1024的bootloader区,19200的波特率,那么你直接使用下面的hex文件就可以了,下载hex文件。本站的开发板内,预制这个hex文件,可以按照本页的方法用串口线直接更新程序。否则,你需要对程序进行调整,然后重新编译Bootloader的hex文件,下载软件包,软件中需要更改的部分:芯片的类型#include //选择对应的芯片Bootloader区的大小,和ICC的option相对
发表于 2018-10-15
AVR使用范例--使用Bootloader 升级芯片内程序详解

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved