
当前,TI的DSP被广泛使用。随着DSP变得越来越强大,片上设备和接口的其他与硬件相关的程序,以及基于应用程序的算法程序。通过这种系统结构,应用程序和与硬件相关的程序紧密集成在一起,这限制了程序的可移植性和性。软件开发总是从头开始,并且有许多重复的任务。一旦硬件平台发生变化,通常也需要更改与硬件程序捆绑在一起的应用程序,并且代码的可维护性和可移植性也不高。
通过建立硬件驱动程序的开发模型,可以改善上述现象。因此,本文介绍了一种开发TI DSP片上和片设备驱动器的方法,并以C5000 DSP的McBSP / DMA和TMS320C5509的USB驱动器为开发对象,并介绍了该方法的应用。
2个基于DSP / BIOS的IOM硬件驱动程序
在集成到CCS应用程序环境中的实时操作系统DSP / BI-OS [1]中,最终将硬件驱动程序封装为功能库的形式。该应用程序不关心基础硬件设备的特定操作,并且可以使用不同的设备调用与DSP / BIOS相关的标准API接口。该接口是根据统一标准定义的,即,硬件设备驱动程序模块是在DSP / BIOS中以IOM(I / O微型驱动程序)模式创建和配置的。
IOM [2]是DSP / BIOS设备驱动程序模块的接口模式。可以在DSP / BIOS图形界面(GUI)中方便地将硬件设备驱动程序模块配置为IOM模式。 IOM模式将设备驱动程序分为两个级别:上级是“类”驱动程序(类driv-er),它负责存储缓冲区管理,API函数以及各种DSP / BIOS标准的应用程序。与设备硬件无关。下一层是“微型驱动程序”,它集成了实际的硬件相关代码。 IOM接口将“迷你”驱动程序与“类”驱动程序链接在一起,包括定义I / O数据包(IOM_Packet)以提交用于读取和写入的“迷你”驱动程序,定义功能包(IOM Fxns)以完成相关操作初始化,打开或关闭通道,提交诸如I / O数据传输和控制之类的任务,并确保“ mini”驱动程序和“ class”驱动程序协调运行。
“类”驱动程序直接出现在应用程序中,根据数据输入/输出处理方法,有一个相应的“类”驱动程序。主要有三种类型:流输入和输出类型“类”驱动程序(SIO),管道类型“类”驱动程序(PIP)和常规输入和输出类型“类”驱动程序(GIO)。
其中,SIO“类”驱动程序由两部分组成:SIO模块和DIO适配器模块(适配器)。前者负责创建通道和数据流的输入/输出,而DIO负责缓冲区管理,信号同步,API和与下层“微型”驱动程序的参数接口; PIP“类”驱动程序由两部分组成:PIP模块和PIO适配器模块(适配器),前者创建管道,数据管道输入/输出,而PIO提供缓冲区管理,信号同步以及与较低层的API和参数接口“迷你”驱动程序。 GIO“类”驱动程序是通用的输入和输出接口。被调用的API函数可以通过阻塞线程来读写数据,并直接与“迷你”驱动程序进行通信。
SIO,PIP,GIO模块集成在DSP / BIOS,SIO通道中,可以在DSP / BIOS的输入和输出模块的图形界面(GUI)中静态设置和创建PIP管道,也可以在申请。在DSP / BIOS设备驱动程序模块图形界面(GUI)中创建了DIO,PIO适配器模块(适配器)。
从上面可以看出,“类”驱动程序都是标准API函数,因此编写驱动程序的重点是“微型”驱动程序。 “迷你”驱动程序创建统一接口标准功能包(IOM Fxns),应用程序可以从DIO适配模块或PIO适配模块或GIO“类型”驱动程序调用“迷你”驱动程序,以控制底层硬件设备。这些统一接口标准的功能包括:

mdBindDev:设备和“微型”驱动程序绑定功能;
mdControlChan:设备通道控制功能;
mdCreateChan:设备通道创建功能;
mdDeleteChan:设备通道删除功能;
mdSubmitChan:根据IOM数据包命令执行功能;
mdUnBindDev:设备从“迷你”驱动程序释放功能。
IOM数据包是关键数据结构之一,用于IOM驱动程序内部数据的输入和输出。该应用程序本身不涉及IOM数据包访问。 IO适配模块,PIO适配模块或GIO“类”驱动程序通过他访问“ mini”驱动程序层。数据结构的cmd项是“类”驱动程序命令。“ mini”驱动程序的mdSubmitChan函数执行诸如读取和写入硬件设备的操作。 “ mini”驱动程序完成相应的操作,并在通过回调函数后向上返回数据包。
3 McBSP / DMA驱动程序开发
这是基于C5000系列DSP的McBSP和DMA硬件驱动程序开发。系统采用TMS320VC5410作为CPU,TLC320AD50C作为音频编解码芯片,TLC320AD50C和DSP的McBSP0通道接口,数据传输采用DMA模式。

在传统的软件开发结构中,应用程序通常通过DMA中断服务例程来控制硬件设备和数据管理。传统的软件开发结构如图1所示。

在本文推荐的软件开发结构中,硬件设备驱动程序与应用程序分开,并且在它们之间使用DSP / BIOS API接口,包括硬件设备初始化参数的传输。该系统的软件开发结构如图2所示。

具体的开发过程如下:
([1)IOM驱动程序
当启动DSP / BIOS来完成硬件设备初始化参数的传输并获得McBSP和DMA资源时,将调用
mdBindDev。 McBSP和DMA的初始化参数是使用CSL配置的。请注意,McBSP使用通道O。mdCreateChan在应用程序层和硬件设备上创建两个逻辑通道,即DMA接收和发送通道。分别设置初始化参数。 mdSubmitChan根据IOM数据包数据结构的cmd项,指示“微型”驱动程序对硬件设备执行IOM写入操作,即通过McBSP0输出数据。编译并链接相应的项目,以生成驱动程序库函数以完成IOM驱动程序。
([2)DMA / McBSP应用程序

在应用程序项目中,首先在DSP / BIOS配置工具的“用户定义的设备”项中注册“微型”驱动程序,并将其命名为“ co-dec”。这些特性如图3(a)所示。在注册信息中设置驱动程序初始化功能的名称,IOM功能包指针和设备参数指针。此应用程序使用IOM驱动程序的流输入和输出“类”驱动程序(SIO / DIO)。 DIO适配器模块与上述“微型”驱动程序“编”接口。 DIO适配器模块已添加到DSP / BIOS配置工具中。这些属性名为“ dio编”,如图3(b)所示。

此应用程序选择DMA通道4和5,并设置TLC320AD50C的4个控制寄存器的初始化参数,即“迷你”驱动程序注册信息的设备参数指针所指向的内容。

然后,应用程序通过调用DSP / BIOS API来动态创建DMA / McBSP输入和输出通道,例如:

SIO输入和输出通道采用双缓冲区管理。获取双缓冲区资源和管理缓冲数据的工作也由SIO相关API完成。有关API的使用,请参阅参考中列出的手册。
4 USB驱动程序开发
这是基于C5000系列DSP(TMS320C5509A)的USB硬件驱动程序开发。 TMS320C5509A集成了符合USB2.0标准的全速USB接口。 SIE [3](串行接口引擎)负责根据USB物理电平信号将数据从串行转换为并行输入或从并行转换为串行输出,并具有错误检查机制。 UBM(USB

Buffer Manager)负责数据缓冲区管理,管理SIE和缓冲区RAM中的数据输入和输出,CPU或USB DMA控制器在缓冲区RAM中发送和接收数据。
此硬件驱动程序的软件开发结构类似于上述McBSP / DMA硬件驱动程序开发。上层是“类”驱动程序,即DSP / BIOS GIO,SIO或PIP模块,它为USB输入和输出请求提供了各种类型的“微型”驱动程序。 “ mini”驱动程序基于USB模块的DSP / BIOS CSL(芯片支持库),并调用CSL API来完成底层硬件的各种复杂操作。
([1)IOM驱动程序
C5509 USB mdBindDev在DSP / BIOS开始完成USB初始化参数,中断向量设置和初始化USB模块的传输时被调用; C5509 USB mdControlChan接受SIOcontrol等“类型驱动程序”命令,重置USB数据通道,并连接到主机USB接口等工作; C5509 USB mdCreateChan创建USB端点的数据通道并配置数据传输方向; C5509 USB mdSubmitChan负责USB数据流的输入和输出管理。
([2)USB应用
在DSP / BIOS配置工具的“用户定义的设备”项中注册“微型”驱动程序,并将其命名为“ usb”。属性显示在图4(a)中。该应用程序还使用流输入和输出(SIO / DIO),DIO适配器模块与上述“微型”驱动程序“ usb”接口,DIO适配器模块被添加到名为“ dio_usb”的DSP / BIOS配置工具中。 ,其属性如下所示,如图4(b)所示。

应用程序动态创建USB的某个端点作为输入和输出通道,例如:

从上面可以看到,应用程序层“类”驱动程序开发的性非常强。
5结论
本文推荐的这种DSP硬件驱动程序开发方法通过在应用程序与硬件设备输入和输出之间构造一个统一的数据接口来对接口代码进行分层。更换硬件设备时,可以修改应用程序,大大增强了应用程序的通用性和可移植性,并且硬件驱动程序还具有重复使用的特点
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-320704-1.html
台词功底也很好
土地谁说了算
这才是真爷们