完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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所示。 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。 因为PCI设备的总线号和PCI2040的功能号一般为0,所以只需变化设备号来寻找硬件的位置。图2是基于Vtoolsd使用VC++6.0具体对PCI配置寄存器的访问程序框图。 5 HPI(Host Port Interface)寄存器介绍 PCI2040桥控制器可方便实现一个PCI插槽与4片C54x或C6x系列的DSP之间的通信,它提供了两种数据传输的方式:一是通过HPI口传输,另一种是通过GPBUS总线传输。其中GPBUS总线传输方式比较简单但传输速率低,通过HPI口的传输可以实现高速的数据通信,所以在该系统中采用了HPI口传输的通信方式。Win98先获取HPI寄存器的物理地址进行映射,然后用映射得到的线性地址就可以对HPI口进行访问。 (1)HPI控制寄存器(HPIC)。可以被PC机和DSP访问,它是一个16位的寄存器,其高8位和低8位表示的意义相同,低8位所表示的意义见表2。 (2)HPI地址寄存器(HPIA)。只可由PC机访问,寄存器中保存了当前要访问的DSP的片内存储器地址,它们可以被PC机映射,其映射空间大小为2K。 (3)HPI数据寄存器(HPID)。只可由PC机访问,它的值随HPIA变化而变化,它保存HPIA中地址所指向的DSP内存数据的值。通过对它的读写,可以访问相应的DSP内存的值,也可以设置成自增方式。这样,每对它读写一次,HPIA的数据就自动加1,HPID相应保存内存中下一个16位数据。 6 驱动、应用及DSP程序的设计 6.1 总体设计思想 为实现应用程序和DSP程序在工作中的同步问题,将在DSP与PC机映射的内存区间建立了一个公共标志数据区,用来传送DSP和PC机的工作状态和控制字。设有以下几个公共标志数据区: (1)DSP状态字(16位)。用来标识数据在传送中DSP的工作状态和命令(命令由DSP和PC机约定)。 (2)PC机状态字(16位)。用来标识数据传送中PC机的工作状态和命令。 (3)数据起始位置字(16位)。用来标识数据传送中,数据存放的起始位置。 (4)数据长度字(16位)。用来标识存放数据的长度。 (5)频率设置字(16位)。用来控制输入输出频率。 (6)保留字空间。用于以后扩展。 DSP与PC机之间采用中断的通信方式,每次中断发送之前,都先访问以上的这些控制字,这样就为PC机和DSP之间通信的协调带来了很多的方便。整体设计框图如图3。 6.2 应用程序设计 应用程序要调用驱动程序来完成两件事,一是获取DSP采集的数据,二是将自己的数据发送给DSP。应用程序整体功能框架如图4。 应用程序只需通过CreateFile()函数来加载驱动程序,加载成功之后,应用程序就可以通过调用Devi-ceIoControl()函数与驱动程序通信。 6.3 驱动程序设计 驱动程序在系统中起纽带作用,它响应DSP中断,并向DSP发送中断,传送或读取数据给应用程序。 6.3.1 响应DSP硬件中断 Vtoolsd提供中断类,可以方便地完成对中断的响应工作。其硬件中断信号处理函数如下: BOOL MyHwInt::OnSharedHardwareInt(VMHANDLE hVM) { //清除DSP上的中断寄存器,加人中断处理代码。 //读取公共数据区的数据,按要求进程操作。 sendPhysicalEOI0; //完成中断服务,打开中断, //准备接受下一次中断。 return FALSE; //因为中断号是共享的, //此时必须返回FALSE。 } 6.3.2 与应用程序通信 在Vtoolsd中使用VDevice类中的OnW32Devi-ceIoControl()函数响应应用程序发送的消息。同时驱动程序通过异步调用函数VWIN32 -QueueUserApc()向应用程序传送数据。驱动程序运行过程框架如图5,其中虚线框的工作由DSP程序或应用程序完成。 6.4 DSP程序设计 DSP程序实现多路数字音频信号实时处理,通过对定时器和Maxl25CEAX芯片的设置,实现采样率可以变化的多路输入输出,通过向PC机发送中断和响应中断,实现PC机保存数据和实时处理数据。DSP在内存中开设两个数据区,数据存放在两个数据区中交替进行。DSP的运行框架如图6。 7 结束语 多路数字音频系统已经调试通过,并成功地在盲源信号实时分离系统中获得应用。利用TMS320C54x系列DSP的实时信号处理能力,实现PC机与DSP通信在多路实时数字音频系统、智能机器人等领域中有广阔的应用前景。 |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 0 评论
1132 浏览 1 评论
2512 浏览 5 评论
2846 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2693 浏览 6 评论
684浏览 7评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
997浏览 3评论
198浏览 2评论
如果mmcblk1boot0启动失败可不可以从mmcblk1boot1启动呢
189浏览 2评论
用核心板GPIO直接控制网卡1的复位信号是否会导致液晶屏初始化失败?
231浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 02:31 , Processed in 1.113003 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号