首页 » 通讯 » 基于TMS320VC5410 DSP的PCI语音卡设计_驱动法式_总线

基于TMS320VC5410 DSP的PCI语音卡设计_驱动法式_总线

雨夜梧桐 2025-01-21 15:51:00 0

扫一扫用手机浏览

文章目录 [+]

1、 硬件设计 1.1 PCI 总线掌握芯片 PCI2040

PCI 总线是一种不寄托于某个详细处理器的局部总线,它支持 32 位或 64 位的总线宽度,频率常日是 33MHz,目前最快的 PCI2.0 总线事情频率是 66MHz。
事情在 33MHz、32 位时,理论上最大数据传输速率能达到 133MB/s。
它支持猝发事情办法,提高了传输速率,支持即插即用,PCI 部件和驱动程序可以在各种不同的平台上运行。

基于TMS320VC5410 DSP的PCI语音卡设计_驱动法式_总线 基于TMS320VC5410 DSP的PCI语音卡设计_驱动法式_总线 通讯

实现 PCI 总线协议一样平常有两种方法,一是用 FPGA 设计实现,但 PCI 协议比较繁芜,因此难度较大;二是采取 PCI 总线掌握芯片,如 AMCC 公司的 S5933、PLX 公司的 PCI9080 等通用的 PCI 接口芯片。
TI 公司专门推出了针对 PCI 总线和 DSP 接口的芯片 PCI2040,它不但实现了 PCI 总线掌握的功能,而且供应了和 DSP 芯片无缝的接口,因而大大简化了系统设计的繁芜度并缩短了开拓韶光。

基于TMS320VC5410 DSP的PCI语音卡设计_驱动法式_总线 基于TMS320VC5410 DSP的PCI语音卡设计_驱动法式_总线 通讯
(图片来自网络侵删)

PCI2040 内部功能框图如图 1 所示。

PCI2040 是一个 PCI-DSP 桥接器件,它供应了 PCI 局部总线和 TMS320C54X 8 位主机接口(HPI)与 TMS320C6X 16 位主机接口的无缝连接。
一片 PCI2040 最多能同时挂接 4 片 DSP 芯片。
同时,它还供应了一个串行 EEPROM 接口,一个通用输入输出接口(GPIO)和一个 16 位通用总线接口(为 TI JTAG 测试总线掌握器供应接口)。
PCI2040 只能作为 PCI 目标设备利用,不能作为 PCI 主设备利用;它只支持单字的读写,不能供应 DMA 操作。
PCI2040 能够兼容 3.3V 和 5V 旗子暗记环境系统中的 3.3V 和 5V 旗子暗记可以直接从 PCI 插槽中得到。

1.2 语音卡硬件设计

1.2.1 功能简介及硬件框图

语音卡是基于 TMS320VC5410 DSP 和 PCI2040 而设计的。
此卡的紧张功能是:(1)通过电话旗子暗记音检测模块,将对方说话的声音经 A/D 转换后,交给 DSP 进行压缩处理,采取 G.729 编码算法压缩后速率可达到 8kbps,然后将压缩后的码流利过 PCI2040 经 PCI 总线存放在打算机硬盘上,从而实现录音功能。
(2)将存在硬盘上的压缩码流(以文件形式存在),通过 PCI2040 经 PCI 总线传送到 DSP 的内部缓冲区中,进行解压缩处理(G.729 解码算法),并将解码后的数据通过 D/A 转换回放出来。

语音卡硬件框图如图 2 所示。

电话旗子暗记音检测部分紧张实现振铃检测、摘挂机及话音传输功能。
系统的核心是 DSP,它完成各种繁芜算法的处理,包括 G.729 编解码算法、反应肃清算法、话音检测及软件摘挂机算法等。
TMS320VC5410 是 TI 54X 系列中一款高性能的 DSP,它的处理功能达到 100MIPS,因此能知足算法繁芜度的哀求。
它的最大特点是片内集成了 64K×16bit 的 RAM 和 16K×16bit 的 ROM 因而不须要外加 SRAM 或 SDRAM 就可以知足系统设计的哀求。
TMS320VC5410 内置了 3 个多通道缓冲串行口(McBSP)、6 个 DMA 通道和一个 8 位增强型 HPI 口,可以方便地和外部进行数据交流。
在语音卡的设计中,采取 PCI2040 来完成 DSP 与主机交流数据的任务。

1.2.2 PCI2040 与 TMS320VC5410 接口

PCI2040 与 TMS320VC5410 HPI 口的连接如图 3 所示。

PCI_AD31~PCI_AD15 决定了 PCI2040 的掌握空间基地址(Control Space Base Address)寄存器的值,这个值实际上是系统自动分配的。
所有的 PNP 器件都是如此它将掌握空间映射到主机内存,映射的空间大小为 232-17=32KB。
DSP 芯片的选择是通过解码 PCI_AD14、PCI_AD13 来实现的。
而 PCI_AD12 和 PCI_AD11 分别映射到 HCNTL1 和 HCNTL0,用以决定访问 DSP HPI 寄存器的办法。
其对应关系如表 1 所示。

因此,DSP 与 PC 交流数据的过程,也便是读写 HPI 寄存器的过程。
详细描述如下:

(1)初始化 PCI2040 内部配置寄存器,指向特定的 DSP(本系统只有一个 DSP 和 PCI2040 相连),指天命据传输宽度为 8 位。

(3)分开复位状态后,PCI2040 解码从 PCI 总线来的地址,以此来做出相应。
若落入 32KB 的掌握空间中,则根据 HCNTL1 和 HCNTL0 及片选情形访问相应 HPI 寄存器。

(4)设定 HPI 掌握寄存器中的 BOB 位,选择精确的高低 8 位排列办法。

(5)主机开始对 HPI 寄存器进行读写。

2、 基于 WDM 的 PCI 驱动程序设计

2.1 WDM 驱动程序构造及事理

WDM 是新一代的驱动程序构架,它是一个跨平台的驱动程序模型,在 WINDOWS 98 以上的操作系统中都实现了全面兼容。
不仅如此,WDM 驱动程序还可以在不修正源代码的情形下经由重新编译后在非 Intel 平台上运行,因而为驱动程序开拓职员供应了极大的方便。

WDM 驱动程序是分层的,即不同层上的驱动程序有着不同的优先级,而 Windows 9x 下的 VxD 则没有此构造。
其余,WDM 还引入了功能设备工具 FDO(Functional Device Object)与物理设备工具 PDO(Physical Device Object)两个新观点来描述硬件。
PDO 代表示实存在的硬件设备,它是在总线驱动程序(BUS DRIVER)下列举并建立的,卖力与真实硬件进行 I/O 操作。
FDO 是由用户驱动程序建立的,一样平常来说,它是用户与真实硬件进行 I/O 操作的一个窗口,是 Win32 赖以沟通内核的一个桥梁。
对付驱动程序开拓者,真正须要做的便是开拓 FDO。
至于 PDO,则由 BUS DRIVER 建立,并在须要的时候作为参数由 I/O Manager 或其它系统组件传给你的 FDO。

在运用层与底层进行通讯时,操作系统为每一个用户要求打包成一个 IRP(IO Request Packet)构造,将其发送至驱动程序,并通过识别 IRP 中的 PDO 来识别是发送给哪一个设备的。
其余,WDM 不是通过驱动程序名称,而是通过一个 128 位的全局惟一标识符(GUID)来识别驱动程序的。

WDM 驱动程序都有一个初始化入口点,即 DriverEntry,它相称于 C 措辞中的 main 函数。
当 WDM 驱动程序被装入时,内核调用 DriverEntry 例程。
其余 WDM 设备驱动程序还须要一个即插即用模块,即 AddDevice。
AddDevice 例程便是 PnP 管理器在用户插入新设备时调用它来创建 WDM 设备工具的。

2.2 PCI 语音卡驱动程序设计

PCI 总线支持即插即用,因而采取 WDM 模型来设计驱动程序将使程序更加合理,支持更多的操作系统,并且在安装掩护上更加方便。

该驱动程序紧张用 DriverStudio 2.5 加 VC++ 6.0 设计。
DriverStudio 对 DDK 进行封装,利用引导可天生驱动程序框架。
在此根本上再添加针对语音卡处理的函数及语句即可完成设计,调试工具为 SOFTICE。
程序构造框图如图 4 所示。

PCI2040.lib 和 PCI2040.dll 处于 Ring3 层,它封装了和底层驱动打交道的函数,对外只显现出如 Open_Device、Close_Device(HANDLE hDevice)、Record(HANDLE hDevice,LPSTR FileName)、Play(HANDLE hDevice,LPSTR FileName)等 API 函数。
这样可以让多种编程措辞以 DLL 的形式来调用,给利用者供应了方便。

核心编程是 PCI2040.sys,它处于 Ring0 层,为 Ring3 层和 PCI 语音卡进行数据交流搭建了一个桥梁。
驱动程序中紧张模块有:

(1)OnStartDevice,在这个例程里驱动程序将得到 PnP 管理器为语音卡所分配的硬件资源,包括 HPI CSR 基地址和 HPI 掌握空间基地址,对 PCI 配置空间进行初始化。
初始化中断等。
须要把稳的是,在初始化中断之前禁止卡向主机发中断,因此应有屏蔽中断的操作。

(2)DeviceControl,在这个例程中可以定制自己的函数来达到 Ring3 层和 Ring0 层相互通讯的目的。
通过 IOCTL_CODE 可以区分不同的要求。
例如:

#define SEND_HEVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)

在 DeviceControl中,可实行如下语句:

case SEND_HEVENT:

status = SEND_HEVENT_Handler(I);// 吸收运用程序通报给 WDM 的事宜句柄

m_Irq.Connect(LinkTo(Isr_Irq), this); // 连接中断

INT_MASK_SET_UL=(ULONG)0x80000001; // 开相应中断屏蔽位

m_CtlMemoryRange.outw((ULONG)0x0000,0x0b0b);// 打消中断位,等待中断到来

break;

把连接中断的函数放在 DeviceControl里,并没有和初始化中断(在 OnStartDevice中)放在一起,不然会在 Win2000 里引起去世机。

DSP 语音卡是基于中断处理的,因此上面的程序就起了这样一个浸染:当语音卡向主机发中断时,驱动程序就跳到 Isr_Irq 实行,并在 DpcFor_Irq 中将事宜设置为旗子暗记态,从而关照上层运用程序进行处理。

(3)Isr_Irq,这个例程是用来处理中断的。
Windows 2000 的中断处理机制是假定多个设备可以共享一个硬件中断。
因此,Isr 的紧张事情便是找出哪一个设备发生了中断。
如果没有,则该当急速返回 FALSE,以便 HAL 能把中断送往其它设备驱动程序。
中断做事例程 Isr 实行在提升的 IRQL 上,在 DIRQL 级别上运行的代码须要尽可能快地运行。
常日情形下,若判断中断是由自己的设备产生的,则调用一个在 DISPATCH_LEVEL 级别上运行的延迟过程调用(DpcFor_Irq)。

在处理的过程中要把稳,当确定是自己卡的中断时,要立时屏蔽中断位防止中断再进来,等到 DpcFor_Irq 的结尾处再开中断。
Dpc 中部分语句如下:

if(m_pEventToSignal!
=NULL) m_pEventToSignal-》Set // 将事宜设置为旗子暗记态

t 《《 ″Event Set!
\n″;

INT_MASK_SET_UL=(ULONG)(0x80000001); // 开中断

M_CtlMemoryRange.outw((ULONG)0x0000,0x0b0b);

相关文章

步进电机驱动NSD8381调试指南_电流_波形

本文将结合详细的案例,针对纳芯微全新发布的微步掌握步进电机驱动NSD8381,在用于步进电机掌握的实现流程,以及堵转检测的实现流程...

通讯 2025-01-23 阅读0 评论0