多路实时数字音频系统中的PCI通信

多路实时数字音频系统中的PCI通信,第1张

关键词: PCI , 多路实时 , 数字音频 , 通信

1 引言

多路实时数字音频系统采用TI公司的TMS320C5402数字信号处理芯片来实现,由于该系列芯片采用了改进的哈佛结构,拥有专用的硬件乘法器和专为数字信号处理而设计的指令系统,快速的指令周期和良好的多DSP并行运行特性,使得DSP芯片非常适合于实时数字信号处理,广泛应用于无线通信、语音识别、工业控制、自动化仪器等领域。该系统用TMS320C5402芯片外接一个2X4路的A/D芯片Maxl25CEAX实现对多路数字音频的实时处理,然后将处理数据通过PCI2040传送到PC机进行后继处理并保存,或从PC机接受命令进行相应 *** 作,实现PC机和DSP之间的数据传送,需要DSP程序、应用程序、驱动程序三者相互协调工作。

2 WindOWS管理体系

Win98体系结构支持4种基本程序:管理程序、win32应用程序、winl6应用程序和DOS应用程序,每种程序在不同的执行环境中运行。(1)管理程序在Ring0层(核心态)中的保护模式下运行,所以能访问和控制实际硬件环境,管理程序是在实际机器上,而不是在虚拟机上运行,在所有构成win98的组件中,只有VMM和驱动程序在管理程序的环境中执行,可以直接对硬件进行 *** 作。(2)Win32应用程序和Winl6应用程序都在Ring3层(用户态)的保护模式下运行,Win32应用程序可以访问4GB的虚拟内存,而Winl6应用程序只能访问16MB的虚拟内存。(3)DOS应用程序运行在V86模式下,它也运行在Ring3层的访问级别上,硬件访问和中断被隐藏和虚拟,该系统编写的是32位应用程序,它运行在虚拟环境之下,它对I/o端口的查询,对一个内存映射的外围设备的查询以及可能导致传送到虚拟机之外的 *** 作都会被Windows捕获,所以其本身并不能直接访问硬件和系统数据,而需要通过驱动程序来完成。

即插即用(PnP)是微软公司为了使新的硬件设备更加方便使用而采取的一种策略,PnP设备能够自身识别、自动提出资源要求,并且可以在运行时接受资源分配。该系统开发中的PCI总线就是即插即用的。在即插即用的系统中的配置管理是由配置管理器来控制。配置管理器使用设备节点、设备节点树、注册表来保持数据;配置管理器由枚举器、仲裁器、设备安装器、设备驱动器4个主要软件来工作;配置管理器的工作流程如图1所示。

多路实时数字音频系统中的PCI通信,多路实时数字音频系统中的PCI通信,第2张

 

3 设备内存映射方法

尽管驱动程序运行在核心层,但它所见的是平面内存,只能用线性地址进行访问。所有驱动程序对内存的访问都必须经过页表将线性地址转换成物理地址。因此,驱动程序在访问一个特殊的内存映射硬件之前,必须先配置页表,保证设备的物理地址与一个线性地址相联系。这个线性地址可以用作指针。驱动程序不能控制页表,它必须调用虚拟机管理器提供的服务。

对老式非即插即用设备,只要给出设备内存的物理地址和字节长度,获取一般在硬件上手动设置,然后调用MapPhysToLinear()函数获取此物理地址的线性地址,就可进行访问。

对即插即用设备,其物理地址可以通过调用函数CM_Get_Alloc_Log_Conf()获取,但因为在Windows运行期间,即插即用的物理地址可能改变,而MapPhys-ToLinear()函数返回的线性地址所对应的物理地址不变,这样就会造成访问错误。对于物理地址可变的动态配置设备,驱动程序必须将内存映射过程分成3步。

(1)使用PageReserve()函数,分配一块线性地址空间。此空间并不和具体的物理地址相关联,仅是线性地址的页表进入项。

(2)使用PageCommitPhys()函数,将线性地址映射到设备的物理地址,此时对线性地址的 *** 作就是在相应的物理地址之上 *** 作。

(3)使用LinPageLock()函数,阻止虚拟内存管理器将这些页交换到磁盘空间,以保证在硬件中断期间,这些地址都是有效的。

当设备卸载时,驱动程序可以调用LinPageUnLock(),PageDecommit(),PageFree()来解除设备的内存映射,这里每一个调用都是上述3步调用的反过程。

4 PCI配置寄存器访问

根据PCI总线规范要求,任何PCI设备都必须提供256字节的配置空间,用来完成对设备的安装、配置、引导和设备再定位等功能。在该系统中要求将HPI控制标志和状态寄存器以及HPI控制空间映射到PC机内存,所以必须对PCI2040配置寄存中的命令寄存器进行修改,从而实现设备内存映射。这需要通过32位配置地址端口(占用IO地址OxOcf8~OxOcfb)和32位配置数据端口(占用IO地址OxOcfc~OxOcff)访问PCI配置寄存器。其中位于0xcf8的IO端口的寄存器相当于一个地址寄存器,位于0xcfc端口的寄存器相当于数据寄存器。配置数据端口中存放着配置地址端口中的配置地址所指向的内存的内容。配置地址端口寄存器各位的意义见表1。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2633868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-11
下一篇 2022-08-11

发表评论

登录后才能评论

评论列表(0条)

保存