新闻中心

EEPW首页>嵌入式系统>设计应用> 基于PCI总线的DSP系统应用程序的更新

基于PCI总线的DSP系统应用程序的更新

作者: 时间:2013-06-15 来源:网络 收藏

1.2 C6416操作原理
C6416的操作可以设置为:
主模式写:DSP主设备通过接口写数据到外部PCI从设备。
主模式读:DSP主设备通过PCI接口从外部PCI从设备读数据。
从模式写:外部PCI主设备通过PCI接口写数据到DSP从设备。
从模式读:外部PCI主设备通过PCI接口从DSP从设备读数据。
1.2.1 C6416 PCI寄存器
PCI接口有以下3种寄存器:PCI配置寄存器,PCI I/O寄存器和映射在DSP存储空间的PCI控制状态寄存器。前两类寄存器只能被外部主机访问,DSP从机是不能访问的;而最后一类寄存器,DSP从机是可以访问的,并利用其来完成PCI通信的控制和操作。
PCI配置寄存器包含标准的PCI配置信息,包括设备标识,供应商标识,版本等信息,其可以在上电复位时自动访问E2PROM进行加载或上电复位时可以通过默认值初始化。
PCI I/O寄存器可以被主机用来对从机进行操作和状态监控。主机通过base2存储空间来访问该类寄存器。该空间大小为16 B,有三个寄存器:主机状态寄存器(HSR),主机-DSP控制寄存器(HDSR)和DSP页寄存器(DSPP)。
1.2.2 C6416 PCI存储器映射
PCI端口通过3种基址寄存器可以完全访问DSP的存储器映射。
Base0:4 MB的可预存取空间,通过设置DSP页寄存器映射来对应所有DSP存储空间,如图3所示。可以理解为,一个4 MB大小的存储窗口,来遍历整个DSP的存储映射区,而DSP页寄存器的值则决定了这个4 MB存储窗的起始地址。如图4所示。

本文引用地址://m.amcfsurvey.com/article/148014.htm

c1.jpg


Base1:8 MB的非预取址映射。其访问起始地址固定,为0x01800000,该存储空间映射为DSP片内寄存器。如图5所示。

c.JPG


Base2:PCI 16 B I/O寄存器,上已介绍。
上电后PCI主机将遍历整个PCI总线,建立一棵PCI总线树,然后对每个PCI总线树上的结点(设备)进行上述3个基地址的分配。利用这3个基地址,PCI主机即可以访问PCI总线上的从设备的全部存储空间。
1.2.3 PCI中断
如果设置了PCIIEN对应的中断使能位,当对应的中断源产生,DSP将进入中断状态。所有的中断事件对应于一个CPU中断:DSPINT。可以通过PCIIS中断源寄存器来判断产生中断的中断源。
1.2.4 PCI引导
PCI接口支持从PCI总线引导DSP启动。当其他设备从复位状态唤醒后,CPU被复位。在此期间,PCI主机可以尽可能的通过PCI初始化DSP内存。当PCI主机完成所需要的初始化工作,则向I/O寄存器HDCR.DSPINT位写1,使DSP核退出复位。DSP则从地址0处开始运行。值得注意是的是,当C6416使用PCI引导方式时,需要通过硬件设置来配置DSP上电逻辑选择PCI引导模式。

2 利用PCI总线来更新系统软件的设计
2.1 应用程序的数据格式生成
通过DSP的开发平台CCS,可以把编写的应用程序编译、链接成.out文件。该文件包含了应用程序的各个段的数据,如text段,cinit段,const段,switch段等。这些段是CCS的编译器把所写的C语言编译成汇编语言,然后生成COFF目标文件,再链接实时动态库和静态库生成DSP核可执行的COFF文件,提供给C6416使用。但是该文件不可直接被FLASH识别,同时也不可被C语言所识别。
CCS提供了一个实用工具hex6x.exe来完成.out文件的转换。该工具可以把.out文件的COFF数据格式转换成16进制的ASCII码数据格式文件.hex。然后利用TI公司提供的hex2aray.exe工具,把生成的.hex文件转换成C语言能够识别的数据数组格式文件.h。
hex6x.exe工具的使用可以直接在Windows的cmd中调用命令。如下:
hex6x-a-o firm.hex filename.out
也可以创建一个命令文件来存放命令行操作和输入、输出文件命,以被hex6x.exe所调用。
filenamc.out
-a
-o firm.hex
生成的.hex文件都是以ASCII格式所保存。利用hex2aray.exe工具则可以完成ASCII码到16进制数据的转换。利用该工具生成的.h文件把所有数据段的数据顺次存放在一个数组中,这样则可以被C语言所访问。
本设计中在CCS生成.out的文件夹中,加入了上述两个工具,然后创建了一个命令文件c6416_test.cmd,来输入hex6x.exe.所需要的命令行;创建了一个批处理文件c6416_test.bat,来综合调用两个工具,代码如下:
hex6x c6416_test.cmd
hex2aray-i c6416_test.hex-o c6416_test.h
2.2 PCI上电直接加载应用程序到DSP存储空间
对于PCI总线上的从DSP设备,如果没有片内或片外FLASH,则PCI主机在上电时可以直接把从DSP设备的应用程序数据写到DSP的片内RAM或片外RAM,然后指定DSP PC指针运行的起始地址。而从DSP设备应用程序的数据应当存放在PCI主机的系统存储设备中(如片外FLASH,电子盘等)。
首先通过调试编译DSP的应用程序,完成所有功能需求,生成C6416可执行的.out文件;然后利用上述工具,生成.out文件所对应的.h文件,该文件中数组的内容,则是应用程序的二进制代码数据;接着通过硬件管脚电平控制,来使DSP处于PCI引导方式,并利用DSPPCI从写模式,在系统上电后,主机把.h中的数据传输到指定的C6416程序存储空间;最后向I/O寄存器HDCR.DSPINT位写1,使DSP核退出复位,C6416则从0地址开始运行。
上述流程中有一个关键问题,就是在进行PCI数据传输时,存放数据的地址如何确定。这些地址表示的是应用程序各个数据段、代码段在C6416中运行时所存放的位置,其由应用程序中的.cmd文件指明。在应用程序.out生成后,可以查看.map文件来清楚的获知各个段的存放地址。可以用.map文件来明确主机PCI数据发送的具体地址,手动输入各个段存放的起始地址。然而,此方法主要用于程序调试和测试,当应用程序发生变化,主机的PCI传输程序也需要变化;此外如果使用了DSP/BIOS,.out文件会包含很多的代码段、数据段,手动输入将是一个很繁琐的工作。hex6x.exe工具有一个命令-boot,利用该命令生成的数据包含了系统程序的入口地址c_int00和各个段的起始地址、段的长度。利用这些信息,可以很方便的使用程序把各个段的数据写入到指定的C6416存储空间中,避免了繁琐的手动输入操作。由于当DSP退出复位后,PC指针是从0地址开始运行,如果数据段和代码段是存放在片外RAM时,则需要在0地址存放一段指针跳转语句,使PC指针跳转到片
外RAM,继续运行。
2.3 利用PCI总线完成从DSP设备外围FLASH应用程序的更新
更多的嵌入式设备中,从DSP设备都接有外围的FLASH等ROM设备,用来存放DSP运行的应用程序。这样一方面可以减少PCI主机存储空间的压力,同时可以提高从机的启动速度。
2.3.1 C6416的FLASH启动方式
C6416的启动方式是由硬件逻辑来决定,通过EMIFB地址总线上的BEA[19:18]两个管脚的上拉、下拉来决定引导配置。[0,1]:主机引导(HPI或PCI);[1,0]:EMIFB 8bit宽FLASH引导。
当选择FLASH启动时,C6416的引导逻辑决定了,从FLASH的0地址开始,将会拷贝1 KB的数据到C6416片内RAM的0~1KB位置,然后C6416的PC指针将从片内RAM的0地址开始运行。那么对于所要启动的应用程序的大小一般都是大于1 KB,因此可以利用来完成C6416的程序加载。所谓,是指在应用程序的工程中,写一段bootload程序,该程序主要完成EMIF接口的配置,和应用程序从FLASH向C6416存储器搬移的工作。程序应当利用.cmd文件,来为bootload代码分配存储空间,其空间地址范围应该是0~1 KB。同时烧写bootload到FLASH时,应当烧写到0~1 KB的空间范围内。当系统上电,FLASH中的0~1 KB数据自动搬移到C6416片内RAM 0~1 KB,然后PC指针从0开始运行,此时EMIFA和EMIFB将被配置,允许C6416可以访问片外RAM和片外FLASH;然后完成从FLASH到存储器(片内或片外RAM)的代码段、数据段数据搬移;最后设置PC指针跳转到应用程序的入口地址c_int00来初始化C语言环境,从而开始运行应用程序。Bootload程序应该用汇编来完成,因为它是在C语言环境初始化之前被执行,此时C6416是不识别C语言的语言符号的。



评论


相关推荐

技术专区

关闭