微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于DSP的内嵌PCI总线的卫星信号仿真器设计方案

基于DSP的内嵌PCI总线的卫星信号仿真器设计方案

时间:03-20 来源:3721RD 点击:

果不清除中断,它将一直有效.这将会导致中断响应函数不断的调用,从而导致死机。

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产生的中断属于电平敏感中断,如果不清除中断它将一直有效,这将会导致中断响应函数不

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top