【VC++开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VC++开源代码-利用Flash实现DSP对多个程序有选择的加载 - 其它论文的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
利用Flash实现DSP对多个程序有选择的加载 摘要主要介绍一种利用Flash存储器实现双DSP系统对多份用户
代码有选择的上电加载的方法。
其中重点介绍M29W800ABFlash的使用和编程方法TMS320
VC54XDSP的上电自动引导过程以及HPI模式和并行模式加载用户
代码的方法。
关键词Flash存储器DSP主机接口Bootloader引导表 引言 在TMS320C54X系列DSP系统的开发中由于DSP片内只有ROM和RAM存储器如要将用户
代码写入ROM中必须要由DSP芯片厂家来完成但这样做用户就不能再更改
代码很不实用。
由于RAM在DSP掉电后不能再保存数据因此常常利用EPROM、Flash等一些外部存储器来存放用户
代码。
在DSP上电
工作后利用DSP提供的boot机制再将程序下载到DSPRAM中运行。
如果使用EPROM外部存储器存放用户
代码需要用
代码转换工具将用户
代码转换为二进制目标文件然后用编程器将其烧写进EPROM而如果使用Flash存储器存放用户
代码则可直接使用DSP仿真器和CCSCodeComposerStudio仿真环境进行在线编程使用灵活方便不再需要其它编程设备。
在某一以太网通信系统中我们就采用Flash存储器来实现多份用户
代码的有选择加载。
下面就以此系统为例介绍对TMS320
VC54XDSP的一种用户
代码加载的方法。
1系统构架 此通信系统基于802.3以太网标准用以实现各终端之间的话音和其它数据的通信以及实现局域网内终端与外界的话音和数据
通信。
为节约开发成本提高系统的可扩展性、通用性和灵活性我们对每个网内终端采用同样的硬件架构通过使用不同的
软件代码而使其实现不同的功能发挥不同的作用。
每一通信终端由2块DSP芯片、1块网卡、1块CPLD和1块FPGA以及Flash存储器等器件组成可扩展的基本结构。
其中以TMS320
VC5410DSP作为主CPU负责系统的逻辑控制和一般数据传输以MS320
VC5416DSP作为从CPU负责话音的编解码和回声消除、语音检测等工作。
2块DSP之间通过主机接口HPI进行通信。
为了实现
代码的有选择下载可由FPGA配置一端口作为拨码开关使用户通过调节拨码开关可以有选择地下载存储于Flash中的用户
代码其结构如图1所示。
配置拨码开关是为了扩充系统的功能以实现一个硬件平台的多种用途。
我们可以将实现不同功能的多份用户
代码都写入Flash存储器中存放通过硬件拨码开关的设置选择其中一份用户
代码下载执行。
在系统上电加载用户
代码时系统先从Flash下载FPGA配置程序然后通过FPGA读出拨码开关的值再根据此值从Flash中选择对应的5410DSP用户
代码加载而5416DSP的用户
代码加载是在5410
代码加载完成启动运行后由5410程序从Flash中读出相应的5416
代码再通过HPI加载到5416的以此实现5416DSP的
代码加载与启动。
2M29W800ABFlash存储器介绍及使用 在此
系统中我们选用的是M29W800ABFlash存储器其容量为512K×16位分为16页每页32K。
其中第0页有4个模块0x000x1fff、0x20000x2fff、0x30000x3fff、0x40000x7fff。
其余各页每页为1个模块共有19个模块。
对Flash的操作要靠写入一系列特定的地址和数据序列来完成。
在每次对Flash写入之前要对其原来的内容进行擦除。
Flash的擦除包括块擦除和芯片擦除两种。
块擦除是对一个模块进行擦除芯片擦除是擦除整个Flash的内容。
因此对Flash的操作是以模块为基本单元的。
对Flash的操作由指令决定其必须满足Flash的时序要求每条指令需要16个不等的指令周期。
主要操作指令包括读数据指令、编程指令、复位指令、自动选择指令和擦除指令。
每个指令周期由一个命令构成每个命令
代码所执行的任务如表1所列。
表1Flash的命令说明HEX
代码命令00h有效/保留10h芯片擦除确认20h保留30h模块擦除继续/确认80h建立擦除90h读电平信号/模块保护状态A0h编程B0h擦除中止F0h读阵列/复位 下面以M29W800ABFlash的块擦除指令为例具体说明Flash的操作时序块擦除指令需要6个总线周期先以2个解锁周期开始然后是1个擦除建立周期接下来又是2个解锁周期最后是1个擦除确认周期其指令时序如表2所列。
表2Flash擦除指令说明周期第1周期第2周期第3周期第4周期第5周期第6周期地址5555h2AAAh5555h5555h2AAAh模块地址数据AAh55h80hAAh55h30h 其C语言程序设计
代码如下 defineflashvolatileunsignedint0x8000 Block_EraseADDR flash0x55550x00AA wait1000 flash0x2AAA0x0055 wait1000 flash0x55550x0080 wait1000 flash0x55550x00AA wait1000 flash0x2AAA0x0055 wait1000 flashADDR0x0030 需要注意的是Flash相对于DSP来说是慢速设备编程时对Flash的访问需要有足够的延时等待。
对其它指令这里就不一一介绍了。
要了解更多内容可参考具体的Flash存储器手册。
3引导装载 TMS320
VC5410和TMS320
VC5416片内ROM中固化有TI公司的引导装载Bootloader程序用于在上电复位时把用户
代码从外部存储器引导到片内RAM中运行。
引导程序是在一些片内固化的一个程序它负责上电时初始化存储器。
换句话说它将程序从非易失性存储器如Flash存储器中调入系统的存储器中。
其提供的片内引导模式有HPI主机接口引导、并行EPROM引导、并行I/O引导和串行口引导等。
下面先介绍这两块芯片的上电引导过程。
DSP上电复位后先检测其MP/MC引脚如果MP/MC“0”表示使用片内ROM引导。
此时DSP从0xFF80处开始执行TI的片内引导程序。
进入引导程序后HINT引脚变为低电平然后开始检测INT2是否为低电平有效。
如有效则进入HPI引导方式否则检测INT3引脚。
如有INT3请求中断则进入串行引导方式否则就进入并行引导方式。
在本系统中我们采用TI公司提供的Bootlooder程序进行引导装载为此应将MP/MC引脚接低电平。
引导程序流程如图2所示。
3.1HPI模式实现TMS320
VC5416的程序加载 按以上
设计5416DSP的程序加载采用HPI主机接口模式。
对于HPI引导模式必须将HINT和INT2引脚连接在一起以保证Bootloader程序能检测到INT2有效。
当检测其为低电平时进入HPI引导方式。
主处理器5410启动运行后5410程序从Flash中下载5416程序通过5410与5416之间的HPI写入5416RAM。
在将程序写入5416时要按照5416程序的cmd文件配置将从Flash中读出的
代码写入5416程序空间的
代码段。
写完
代码后还应将5416
代码的起始地址写入5416的0x7f单元将0写入0x7e单元起始地址可在CCS仿真环境中编译5416
代码后看出此时PC所指向的位置就是
代码的起始地址。
这是因为当5416进入HPI引导方式后Boodloader程序开始检测0x7f单元的内容0x7e和0x7f两单元内容在Boodloader程序开始执行时就清零。
当检测到其内容不为零时即将0x7e的内容赋给XPC将0x7f的内容赋给PC
程序跳转到PC所指向位置执行用户
代码。
这样就实现了从片5416的程序加载启动。
图3是HPI模式加载用户
代码的流程。
3.2并行加载模式实现TMS320
VC5410的程序加载 5410主处理器的用户
代码加载采用并行模式加载。
在本系统中有多份5410用户
代码存储于Flash中。
系统上电后先要从Flash中下载FPGA配置
代码然后读出拨码开关的值再选择相应的用户
代码下载完成后跳转到用户
代码的入口地址开始执行用户
代码。
为此需要设计一启动程序以实现以上功能。
启动程序的内容包括下载FPGA配置
代码读拔码开关值并根据此值选择下载相应的5410用户
代码到其cmd文件配置的相应程序空间。
完成后跳转到用户
代码起始地址。
代码的起始地址通过CCS仿真环境编译后获得启动程序的下载运行则要依靠TI的片内引导程序采用16位并行模式引导加载需要构建引导表。
所谓引导表就是引导程序要调入的
代码。
引导表中除了包括源
代码之外还包含一些附加信息。
这些信息指导引导程序的具体执行过程。
因此可以说引导表是由程序
代码和一些附加信息组成的一种数据结构。
在这里我们需要用启动程序构建引导表并将引导表也写入Flash中。
在此系统中Flash存储器映射为DSP的0x80000xffff数据空间。
对Flash操作时首先要选择页每一页都对应为DSP的0x80000xffff地址的数据空间。
需要注意除了将引导表写入Flash外还应将引导表的起始地址对于DSP处理器而言的地址如果在Flash中为0则对DSP即为0x8000写入Flash第一页的最后一个单元0x7fff单元即DSP存储空间的0xFFFFh单元。
引导程序进入并行加载模式后将
查询数据空间的0xFFFFh单元直到读入一个有效的地址数据。
此数据为用户引导表的入口地址。
这时引导程序就跳转到Flash中的用户引导表开始执行。
需要注意的是对于不同型号和厂家的Flash其引导表的格式和内容是不同的。
下面就M29W800ABFlash引导表的格式及我们所配置的内容说明如下10AAh16位模式7fffSWWSR寄存器值8000hBSCR寄存器值0h启动程序运行的XPC值d08h启动程序运行起始的PC值22f8h启动程序的长度0h启动程序装载的起始地址XPCd08h启动程序装载起始地址PC启动程序
代码??连接8个单元的0h表示引导表结束 程序根据引导表的内容将用户
代码下载到指定的程序空间中并将指定的程序入口地址值赋给PC使程序从此处开始执行从而完成5410DSP的引导启动。
并行引导流程如图4所示。
在系统的实际调试过程中通过HPI加载5416
代码时要注意5410和5416的时钟要匹配。
一般来说要求从片时钟为主片时钟的1.25倍以上。
在此系统中系统基准时钟为8MHz5410启动时钟设为8MHz5416设为10倍频80MHz。
本系统最大的优点是实现了一机多用扩展了系统的功能增强了系统的灵活性和通用性在实际应用中已取得了良好的效果。