基于dsp内嵌pci总线的卫星信号仿真器设计
0 引 言
卫星信号仿真器在卫星导航的研究开发中占有重要地位,特别是多模接收机和高动态接收机的研发。多模卫星仿真器中涉及到大量的数据传输,为了保证pc机和dsp之间数据传输的实时性和准确性,选择基于pci总线接口进行数据传输。常用的pci开发是采用专门的pci接口芯片,但这样系统就会多一块芯片,性价比低,而ti公司tms320c6416系列的dsp拥有内置pci接口,使得硬件开发难度降低和主机对dsp资源访问更加透明。提出一种基于tms320c6416系列dsp的pci总线卫星信号发生器的硬件平台以及相应的pci接口电路设计。
1 系统结构与实现方案
1.1 系统总体结图
图1是仿真器的总体结构框图,其核心器件包括dsp6416,sdrram,flash,fpga,d/a,时钟以及pc机。其中,d/a完成数字信号到模拟信号的转换;sdram作为外设存储器存储由pc机传来的数据;flash用于在系统掉电后保存dsp的运行程序;fp-ga作为仿真器的另一核心部件,主要完成与dsp的通信、信号的合成和d/a的控制;pc机主要完成仿真器的数字信号处理与计算好的数据在pci接口和dsp间的传递。dsp作为主机和fpga之间的通信桥梁,主要完成两方面的工作:一是定时接收pc机计算的各种控制字和电文,按照时序要求,将各通道的控制字发送给fpga;二是由于pc机计算是双精度浮点型的,而fpga中只能以整型数据计算,这样必然会造成两者相位累加值的差异,随着时间的流逝,误差会越来越大,必须加以校正;但如果要将fpga累加的数据再返回到pc机进行比较校正,在实时性上得不到保证,因此需要在dsp中实现对频率字的校正。
在设计中,将sdram作为dsp的片外存储器,配置在emifa的ce0空间内,fpga与dsp通过emi-fa接口交互数据,它配置在emifa的ce1和ce2空间内。emifb的ce1配置成异步8位通信方式与flash通信。
1.2 dsp与pci接口电路连接设计
由于dsp tms320c6416内部集成pci接口,所以不需要桥接芯片,只需要设计与pci母板之间的接口,不需要设计pci与dsp本身之间的接口。由于仿真器是一个多电源系统,可以提供5 v,3.3 v,12 v的电源,所以对连接器采用多电源供电。此外,由于dsp是3.3 v系统,虽然它的pci口能承受5 v电压,但考虑到系统的稳定性,在dsp的pci口和连接器之间加3个电压转换芯片idtqs32x2245,将5 v电压转换成3.3 v电压。由于dsp是集成的pci接口,其电路设计较简单,将dsp pci接口的地址和数据总线直接连到idtqs32x2245芯片的b管脚部分,将铜手指上的地址和数据总线连接到idtqs32x2245芯片的a管脚部分,仲裁信号req,gnt、错误报告信号perr,serr、字节使能信号c/be[3:o]、接口控制信号fram,irdy,stop, idsel,devesel也都按相同的方法连接在相应的位置上。限于篇幅,这里仅给出dsp pci接口部分与连接器的连接示意图,如图2所示。
2 dsp6416内嵌pci关键寄存器及其中断机制
dsp6416的pci接口支持通过主/从总线接口连接dsp到pci主机,pci接口端通过edma内部硬件与dsp相连,它支持四种类型pci数据交换:从模式读,即外部pci主设备通过pci接口写数据到dsp;从模式写,即外部pci主设备通过pci接口从设备读数据;主模式读,即dsp主设备通过pci接口读数据到外部pci从设备;主模式写,即dsp主设备通过pci接口写数据到外部pci从设备。
pci寄存器主要包括3类:pci配置寄存器、pcii/o寄存器、映射在dsp存储空间作为外设的pci寄存器。前两类寄存器只能被外部主机访问,而第三类寄存器可以被dsp和外部pci主机访问。
pci配置寄存器包含标准的pci配置信息(设备标识,厂商标识,分类代码,基址等);pci i/o寄存器位于pci主机的i/o空间,主机只能在:base1和base2访问它们,pci i/o寄存器包括hsr,hdcr,dspp。如图3所示,hsr寄存器表明主机的状态,它的intsrc位和intam位对于中断处理至关重要。 intam位为1时,它可以屏蔽dsp发送的中断,当该位为0时,只要。dsp设置rstsrc字段中的intreq位时,可以使能pinta,即主机在这时可以响应中断。当intsrc位读为0时,表示pinta自上次清除后无效,当读为1时,表示pinta处于使能状态,该位写0无效,写1清除 pinta的使能状态。对于hdcr来说,pc机通过将dspint位置1产生主机中断。dspp主要和base0一起定义一段存储空间。
pci内存映射外围寄存器主要用于控制pci接口,它可以被主机和dsp访问,在该寄存器中,较重要的是rstsrc寄存器,如图4所示。
dsp通过将rstsrc寄存器中的intreq置1产生中断;pc机和dsp通过将intrst置1清除中断,这一点在驱动开发中至关重要,因为dsp 产生的中断属于电平中断类型,如果不清除中断,它将一直有效.这将会导致中断响应函数不断的调用,从而导致死机。
pci端口通过3种基址寄存器可以完全访问dsp的存储器映射。
base0:4 mb的可预存取空间,通过设置dsp页寄存器映射所有dsp存储器空间,预取读使所有的字节有效。
base1:8 mb非预取地址映射对应于所有的dsp存储空间,非预取支持字节使能。
base2:pci的16mb i/o包括i/o寄存器。
这3种寄存器属于pci配置寄存器,pci主机可以访问映射在pci存储器空间4 mb的dsp存储器,pci端口包含一个pci i/o寄存器(dspp寄存器)从pci地址到dsp地址的映射。当dsp作为pci本地总线从属时,使用该映射模式;当dsp上的pci基地址寄存器被配置成一个8 mb不可预取区域时,该存储空间映射为dsp内存映射寄存器(0180 0000h)。pci地址的22:0位与一个固定偏移相连,将base 1访问映射到内存寄存器;基地址寄存器2配置16 b i/o空间,使pci主机用于访问pci i/o寄存器。
3 仿真器程序及驱动程序的开发
3.1 驱动工具的选择
对于开发wdm型pci驱动,常用的开发工具有三种。一是直接使用windows ddk或者wdk工具;二是使用driverstudio;三是使用windriver。第一种方式要求掌握windows的体系结构、设备驱动的体系结构等知识,开发难度较大;第二种方式对ddk进行了封装,难度虽然降低了些,但依然不小,而且由于封装问题,可能带来一些bug,有可能导致项目失败;第三种方式克服了传统开发工具开发驱动周期长,效率低,需具有ddk和核心态程序开发经验等缺点,大大简化了isa-bus,pcibus等硬件设备驱动程序的开发过程,而且windriver还提供核心插件(kerneal plu-gin)功能,使开发者在用户模式下调试代码,然后将调试无误的代码搬到内核模式(kernel mode)中,因而使用windriver,具有简单、快速、高效的特点。
3.2 windriver的工作原理
图5是windriver的体系结构图,阴影部分是windriver提供的组件。windriver提供以windrvr6.sys为底层的驱动栈层,直接与硬件交互,避免了用户对硬件操作的复杂性,用户开发驱动只需在应用程序中调用windriver用户模式的api函数。这些用户模式的函数调用 windriver的kernel module函数实现对硬件的访问。对于某些要求比较高的硬件驱动(如要求响应中断的速度足够快),如果用户模式开发的驱动无法达到要求,开发者可以将用户模式下调试好的代码放入到windriver的kernel plugin模块中,使得驱动开发可以在用户模式下进行,而开发的驱动的效率完全可与内核模式下的驱动相媲美。
图6为用windriver开发pci驱动内部的api函数调用关系。
通常情况下,在应用程序中不直接调用这些api函数,而是通过二次开发,将这些api函数封装在动态链接库dll中,然后应用程序调用dll中封装好的函数。
3.3 卫星信号仿真器应用程序框图及相应pci驱动的关键代码分析
根据仿真器的总体设计,需要在pc机上实现二个功能模块;
数字信号处理模块该模块是仿真器的核心模块,实时仿真导航电文,计算卫星伪距、各通道的频率字和码控制字等。
通信模块 该模块主要是将pc机计算得到的相关信息通过pci传递给dsp。
考虑到整个仿真器数据要求的实时性,通过中断函数实现pc机中的程序传输数据,当dsp需要数据时,通过rstsrc寄存器intreq位写1产生一个中断信号发送给pc机,但要使该中断有效,必须要求主机状态寄存器(hsr)中的intam位为0。因此在上位机程序中,初始化阶段必须把该中断使能位打开。应用程序的结构如图7所示。
中断处理步骤如下:
(1)应用程序打开中断使能,系统等待中断;
(2)如果中断到来,则清除中断标志,取消中断源;
(3)在中断函数中执行数据传输;
(4)数据传输完后给dsp发中断,实现与dsp的握手;
(5)重新开启中断源。
第(2)步和第(5)步在中断使能函数中实现。
中断响应函数的关键代码如下:
pci主机给dsp发中断是通过将hdcr寄存器的dspint位置1实现的,要注意产生该中断的有效前提条件是pci的中断使能寄存器(pciien)hostsw位被使能,即hostsw=1。
为了便于使用pci的驱动函数和以后驱动程序发布的需要,将驱动函数封装在动态链接库dll中,它们中主要函数的关键代码如下:
为了使pc机能够正确地捕获到由dsp传来的中断,在动态链接的dsp6416_intenable()函数中,必须设置内核模式下的中断传输命令,因为它的优先级比用户模式下的中断响应函数高,因而一旦dsp产生中断,首先执行的是内核模式下的中断传输命令。由于dsp6416内嵌pci产生的中断属于电平敏感中断,如果不清除中断它将一直有效,这将会导致中断响应函数不断执行而死机。因此,必须在中断使能函数设置中断传输命令。在该例中,先从hsr中读取一个dword,然后在中断传输命令中设置cmd_mask位。如果前面从hsr中读出的值为0x04,则屏蔽dsp所产生的中断,否则不执行屏蔽命令,然后在中断传输命令中向dsp的rstsrc写入0x10清除中断。图6中用到的关闭中断使能和关闭设备2个函数可分别通过调用windriver中 wdc_intdisable(),wdc_pcide_viceclose(),wdc_driverclose()的函数等实现。此外,调用这些函数之前要判断中断是否存在,设备是否打开,否则会出现严重错误。
3.4 卫星信号仿真器实验验证
设置卫星信号仿真器场景:用户位置为北纬60°00'00,东经100°00'00,高程300 m,静止状态。gg24接收机的解算结果如图8所示。
gg24接收机解算结果是北纬59°59'59.867 52,东经99°59'57.636 24,高程为308.02 m,与设置的场景,即北纬60°00'00,东经100°00'00,高程300 m相当吻合。因此,这说明了仿真器的正确性和有效性。
4 结 语
在此设计的基于dsp6416内嵌pci数据传输硬件平台和驱动开发方案已用于多模卫星信号仿真器中,该方案数据传输稳定,速度快(可达115 mb/s),采用windriver软件工具包开发dsp6416内嵌的pci设备驱动程序,不但可以极大地缩短开发周期,而且还提高了卫星信号仿真器的开发效率和整体性能。
中国LED展望:照明规划能够提供推动什么?
视内和视外智能视觉传感器的划分与功能
TrendForce:第二季全球Enterprise SSD营收创新低,仅15亿美元
DALL-E 2的错误揭示出人工智能的局限性
走进胜宏科技、走近陈涛董事长
基于DSP内嵌PCI总线的卫星信号仿真器设计
激光切割的原理和方法
如何进行频谱的可视化?如何读懂频谱?
基于物联网技术的智能农业大棚设计方案
哪些扫地机器人值得购买
ADV7181C视频解码器和图形数字化仪的性能与特点
康瑞电子讲解医疗连接器的规范触点设计要求!
LTC2975电源系统管理器具有输入监控功能
OPPO Watch 3 Pro冰川灰正式推出 拉满隆冬时节气氛
2019年中国手机市场将进入新一轮景气周期
iPhone 12到底如何?你会买吗?
ch32v307记录程序运行时间
BowayMu6体验 性价比依旧是最终胜点
台媒:明年越南、泰国、印度供应链态势更分明
薄膜电容是怎么偷工减料的?