本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于LabVIEW与C8051F340单片机构成的在线DSP自举模块
发布时间:2020-07-30
分享到:
基于LabVIEW与C8051F340单片机构成的在线DSP自举模块
发布时间:2020-07-30
分享到:

针对现有DSP自举模块普遍存在程序代码更新不便的缺陷,提出了一种可便捷高效地在线更新用户应用程序代码的DSP自举模块。该模块由基于LabVIEW的图形用户界面(GUI)软件与C8051F340单片机构成。GUI软件完成DSP应用程序代码的格式转换,并通过驱动USB将转换完成的程序代码传送给C8051F340。C8051F340通过其片上USB外设接收DSP程序代码并存储于片上FLASH中,同时借助标准串行总线控制DSP完成应用程序代码的自举操作。该模块采用在线方式,可一键实现DSP应用程序代码的更新升级与自举操作。

    TMS320VC54x系列DSP作为一种低功耗高速处理器在消费电子、通信等领域应用广泛[1-2]。通常为实现DSP程序代码的高速运行,一般需要将DSP的应用程序代码存储于DSP片内RAM中运行,但TMS320VC54x处理器是RAM型器件,掉电后DSP不能保存任何用户应用程序代码。因此,基于该型DSP的电子系统通常需要设计自举模块。所谓“自举”是指:DSP芯片内的程序引导装载器(Bootloader)自动地将DSP应用程序代码从DSP外部非掉电易失存储器加载到片内RAM中,脱离仿真器模式独立运行的过程。

    TMS320VC54x系列DSP有两类自举方式:基于静态存储器(如:EEPROM、FLASH)的自举方式和基于处理器的自举方式。基于静态存储器的DSP自举方式[3-4]使用外扩的静态存储器存储DSP程序代码,由于该方式无需外加控制器干预,因此具有电路简单等优点。基于处理器的DSP自举方式[5-6],利用单片机存储DSP程序代码并控制DSP完成自举,具有可有效控制DSP自举时机,可灵活选择自举通信接口等优势。然而,无论哪类自举方式,要更新DSP应用程序代码都需要先将DSP开发软件CCS编译产生的.out程序代码文件通过一系列的格式转换,生成DSP自举所需的程序代码格式,并将得到的代码移植到DSP应用系统片外扩展的静态存储器或单片机中存储。显然,传统DSP自举模块的上述程序代码更新操作非常麻烦。为此本文提出一种便捷高效的DSP自举模块。借助该模块,用户无需熟悉DSP自举设计过程,便可一键实现DSP程序代码的更新升级与自举操作。

    1 方案设计

    DSP开发软件CCS编译生成的.out文件不能直接用来自举,需要将其进行一系列繁琐的格式转换得到合适的格式并移植到DSP的外部存储器进行自举[7]。为解决该问题,本模块通过基于LabVIEW的GUI软件完成上述转换并控制代码移植到外部存储器。如图1所示。GUI软件首先将.out文件转换为.hex格式,并将得到的.hex文件转换为方便DSP自举的.dat格式。之后GUI通过USB将数据传送给C8051F340单片机完成DSP程序更新。C8051F340是一款可提供USB功能并具有较大FLASH存储空间的混合信号微控制器。本模块使用其片上FLASH作为DSP的外部存储器,可省去外扩存储设备,节约成本,简化电路。自举开始时,单片机将FLASH中的代码数据通过标准串行自举方式传送给DSP,控制DSP的自举。标准串行自举与其他自举模式相比,占用DSP硬件资源少、电路简单。通过本模块,开发者可在PC机上实现一键完成DSP代码更新。

    2 硬件设计

    本模块使用C8051F340的片上FLASH作为DSP的外部存储器。C8051F340通过标准串行接口与DSP通信,通过USB与处理代码格式转换的GUI软件通信。如图2所示,虚线框1为3线制的标准串行总线,负责数据的传输。虚线框2为复位与握手信号。DSP的bootloader通过拉低XF引脚通知单片机DSP已准备好接收数据;而单片机通过P1.3引脚拉低ˉRS来复位DSP。C8051F340与PC机通过USB连接。如图2所示,VBUS为USB电缆VBUS引线的感应输入端,当该引脚出现5V高电平信号时,表示该设备已经和主机连接好。D+、D-为USB的差分信号线,D+信号线接1.5k的上拉电阻R1使USB设备工作于高速。电容C1、C3为15pF的滤波电容。为了消除差模干扰,两信号线连接大小为33pF的电容C2。REGIN为C8051F340片内电压调节器的输入端。VDD为C8051F340片内电压调节的3.3V输出端。通过将REGIN和VDD短接,C8051F340被配置为USB固件自供电,片内稳压器禁止的工作模式。另外C8051F340电路模块中,通过C2调试接口(包括C2CK时钟信号和C2D双向数据信号)连接JTAG对单片机程序进行烧写和调试。

    3 软件设计

    本系统主要通过GUI软件完成DSP用户应用代码的格式转换和调用USB主机API控制USB传输数据;通过C8051F340程序调用USB器件API接收数据存入片内FLASH中并通过标准串行通信控制DSP的自举。下面分别介绍各软件设计的功能和具体流程。

    3.1 基于LabVIEW的GUI程序设计

    LabVIEW开发的程序一般由一个或多个VI组成,所有VI都可分为前面板和框图两部分。前面板是VI的交互界面,用户输入数据通过前面板传递给框图,计算和分析结果在前面板上以不同方式显示出来。图3为本模块的GUI前面板。如图所示前面板分为“输入配置区”和“状态显示区”。通过在前面板的“输入配置区”设置文件路径进行DSP代码文件的二次更新。“状态显示区”可实时显示USB连接状况、文件转换信息、自举代码文件内容等详细信息。

    框图是图形化的程序代码,主要完成两个任务:调用USB主机的API函数控制USB数据传输和控制代码文件格式转换。

    借助Silicon Laboratories公司为USB驱动程序开发提供的USBXpress,可以简便的实现在PC机上通过GUI软件与作为USB器件的C8051F340单片机的USB通信。USBXpress提供了10个USB主机API函数,通过LabVIEW中的CLF(调用库函数节点)调用USBXpress提供的USB主机API函数,便可访问USB底层硬件。图4为本设计LabVIEW上位机程序调用API的框图。图中VI作用分别是获取USB器件编号、获取USB器件序列码、设置USB读写延时、打开USB器件、向USB器件写数据块、关闭USB器件。

    在成功调用SI_Open()函数打开USB器件,并通过“file path control.vi”控件获取待转换文件的具体路径后,GUI软件对定位的代码文件开始进行转换。如图5框图程序所示:首先通过“Exec.vi”(“执行系统命令”VI)调用CCS软件环境提供的DOS批处理文件Hex500.exe软件(与自举文件位于同一个目录)将.out文件转换为.hex文件。Hex500.exe在DOS环境下运行需要输入大量转换配置文件,因此GUI需同时调用用来集中描述文件转换所需参数信息的.cmd文件。.cmd文件内容及注释如下:

    bootloader.out //待转化的程序文件

    -o bootloader.hex //输出文件名

    -map bootloader.map //生成存储器映像文件

    -boot //生成加载表

    -I //输出文件为Intel Hex文件格式

    -e _c_int00 //程序入口地址

    -memwidth 16 //标系统的存储器为16位

    -romwidth 16 //存储器芯片的位宽为16位

    -bootorg SERIAL //行装载

    之后通过“Exec.vi”函数调用hex-to-dat.exe软件将.hex格式转换为.dat格式。终在文件格式转换完毕之后提取代码并转换为数组,在循环中调用SI_Open()函数以每次512字节的速度将数据写入USB器件,直到所有文件传输完毕,关闭USB。

    3.2 C8051F340程序设计

    C8051F340通过USB从GUI软件接收DSP程序代码并存储到片内FLASH中,之后通过标准串行接口将代码传送给DSP进行自举。C8051F340程序主要包括初始化函数、自举函数、USB驱动函数、擦写FLASH函数几个部分。图6为C8051F340程序的流程图。

    3.2.1 初始化程序

    程序初始化部分主要包括USB设备初始化和C8051F340单片机初始化。USB初始化通过调用USBXpress提供的10个USB器件API函数实现,包括调用USB_Clock_Start()函数初始化USB总线时钟、调用USB_Init()函数使能USB总线、调用USB_Init_Enable()函数使能API中断;C8051F340单片机初始化中将单片机时钟设为48MHZ以满足USB全速工作方式的需要、配置单片机输出端口为推挽输出、开启外部中断0并通过配置寄存器“IT01CF=0x07”将P0.7配置为INT0的中断触发端口引脚,监视DSP所给自举信号。

    3.2.2 自举函数

    DSP启动速度比C8051F340快,因此自举之前需先复位DSP并初始化SPI接口,等待DSP的XF引脚触发INT0中断后启动自举操作。本程序使用16位标准串行方式对DSP自举。通信时序如图7所示,BFSR0脉冲之后可传输一个16位的数据,传输的每个16位数据之间需至少保证40个DSP时钟周期的延时时间。且单片机时钟频率(BCLKR0)不可超过DSP时钟频率的1/2。标准串行自举代码如下所示,程序中将BFSR0拉高后,传输一个字节的数据,并通过调用延时函数Delaynum(20)延时20微秒来满足传输两数据间CPU时钟间隔的要求,程序中w为当前传输的由四个ASCⅡ字符转换而来的16位无符号整形变量。

    BCLKR0=1;

    Delaynum(20);

    BCLKR0=0;

    BFSR0=1;

    Delaynum(20);

    BCLKR0=1;

    Delaynum(20);

    BCLKR0=0;

    Delaynum(20);

    for(i=0;i<16;i++)

    {

    BDR0= (w & (0x8000 >> i)) > 0;

    BCLKR0=1;

 

加入微信技术交流群

技术交流,职业进阶

关注电路设计技能公众号

了解最新技术方案

加入电路城 QQ 交流群

与技术大牛交朋友

讨论