开发DSP硬件驱动程序的一种方法

[复制链接]
1014|21
手机看帖
扫描二维码
随时随地手机跟帖
Jasmines|  楼主 | 2019-4-12 11:09 | 显示全部楼层 |阅读模式
开发DSP硬件驱动程序的一种方法



    引 言
    目前,TI公司的DSP应用很广泛,随着DSP的功能越来越强大,片上外设种类及应用日趋复杂。传统的DSP程序开发包含两方面程序:即配置、控制、中断等管理DSP片内外设、接口的硬件相关程序和基于应用的算法程序。这样的系统结构,应用程序与硬件相关程序紧密的结合一起,限制了程序的可移植性和通用性,软件开发总要从零开始,存在诸多重复工作。一旦硬件平台有变化,往往与硬件程序捆绑一起的应用程序也需改动,代码的维护性和可移植性均不高。

   通过建立硬件驱动程序的开发模式,可使上述现象得到改善。因此,本文介绍一种开发TI公司DSP片内及片外硬件外设驱动程序的方法,并以C5000 DSP的McBSP/DMA及TMS320C5509的USB驱动程序开发为具体对象,介绍这种方法的应用。




2 基于DSP/BIOS的IOM硬件驱动
     在CCS应用环境中集成的实时操作系统DSP/BI-OS中,硬件驱动程序最终以函数库的形式被封装起来,应用程序可不关心底层硬件外设的具体操作,通过调用DSP/BIOS相关的标准API与不同外设接口。接口按统一标准定义,即在DSP/BIOS中创建并配置硬件设备驱动模块为IOM(I/O Mini-driver)模式。

IOM是DSP/BIOS的设备驱动模块的一种接口方式,配置硬件设备驱动模块为IOM模式可在DSP/BIOS的图形化界面(GUI)中方便完成。IOM模式将设备驱动程序分为两个层次:上一层是"类"驱动程序(class driv-er),这部分程序负责对存储缓冲区管理、由DSP/BIOS各类标准的API函数与应用程序接口,与设备硬件无关。下一层是"迷你"驱动程序(mini-driver),这部分程序集成了实际硬件相关的代码。IOM接口将"迷你"驱动程序与"类"驱动程序联系一起,包括定义I/O数据包(IOM_Packet)以提交"迷你"驱动程序读写,定义功能函数包(IOM Fxns)完成相关初始化,打开或关闭通道,提交I/O数据传输与控制等任务,确保"迷你"驱动程序与"类"驱动程序运行协调一致。

"类"驱动程序直接在应用程序中出现,并且根据数据输入/输出的处理方式不同,有相应"类"驱动程序。主要是3种:流输入输出型"类"驱动(SIO)、管道型"类"驱动(PIP)和通用输入输出型"类"驱动(GIO)。

其中,SIO"类"驱动由两部分组成:SIO模块和DIO适配模块(Adapter),前者负责创建通道、数据流输入/输出,DIO提供负责缓冲管理、信号同步、将API及参数与下层"迷你"驱动程序接口;PIP"类"驱动由两部分组成:PIP模块和PIO适配模块(Adapter),前者创建管道、数据管道输入/输出,PIO提供负责缓冲管理、信号同步、将API及参数与下层"迷你"驱动程序接口。GIO"类"驱动是一种通用输入输出接口,调用的API函数,可通过阻塞线程读写数据,直接与"迷你"驱动通信。

SIO,PIP,GIO模块集成在DSP/BIOS中,SIO通道、PIP管道可在DSP/BIOS的输入输出模块图形化界面(GUI)中静态设置并创建,也可以在应用程序中动态创建。DIO,PIO适配模块(Adapter)创建在DSP/BIOS的设备驱动模块图形化界面(GUI)中完成。

由上可见,"类"驱动程序均为标准的API函数,故编写驱动程序的重点是"迷你"驱动程序方面。"迷你"驱动通过创建统一接口标准的功能函数包(IOM Fxns),应用程序就可以由DIO适配模块或PIO适配模块或GIO"类"驱动调用"迷你"驱动,控制底层硬件设备。这些统一接口标准的功能函数包括:

mdBindDev:设备与"迷你"驱动绑定函数;

mdControlChan:设备通道控制函数;

mdCreateChan:设备通道创建函数;

mdDeleteChan:设备通道删除函数;

mdSubmitChan:按IOM数据包命令执行函数;

mdUnBindDev:设备从"迷你"驱动释放函数。

IOM数据包是其中一关键数据结构,为IOM驱动程序内部数据的输入输出服务。应用程序本身不会涉及IOM数据包访问,是IO适配模块、PIO适配模块或GIO"类"驱动通过他访问"迷你"驱动层,其中,数据结构的cmd项,即"类"驱动命令"迷你"驱动的mdSubmitChan功能函数执行硬件设备的读写等操作。"迷你"驱动完成相应操作,通过回调函数后向上返回该数据包。

3 McBSP/DMA驱动程序开发

     这是基于C5000系列DSP的McBSP和DMA硬件驱动开发。系统以TMS320VC5410为CPU,TLC320AD50C为音频编解码芯片,TLC320AD50C与DSP的McBSP0通道接口,数据传输采用DMA方式。

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

2008050410270819086_副本.jpg

在本文推荐的软件开发结构中,硬件设备驱动程序与应用程序隔离开,他们之间通过DSP/BIOS的API接口,包括硬件设备初始化参数的传递。本系统软件开发结构如图2所示。
2008050410272173030_副本.jpg
具体开发过程如下:

(1)IOM驱动程序

mdBindDev在DSP/BIOS启动时调用,具体完成硬件设备初始化参数传递、获取McBSP及DMA资源,McBSP及DMA的初始化参数用CSL配置,注意McBSP使用的是通道O。mdCreateChan在应用层与硬件设备创建两个逻辑通道,即DMA接收、发送通道。分别设置初始化参数。mdSubmitChan按IOM数据包数据结构的cmd项,命令"迷你"驱动执行向硬件设备的IOM写操作,即通过McBSP0输出数据。相应工程编译链接生成驱动库函数,完成IOM驱动程序。

(2)DMA/McBSP应用程序

在应用工程中,首先在DSP/BIOS配置工具中User-Defined Devices项进行"迷你"驱动程序注册,命名为"co-dec"。属性如图3(a)所示。注册信息中设置了驱动程序的初始化函数、IOM函数包指针、设备参数指针的名称。本应用采用IOM驱动程序的流输入输出"类"驱动(SIO/DIO),DIO适配模块与上述"迷你"驱动程序"codec''接口,DIO适配模块在DSP/BIOS配置工具中添加,命名为"dio codec",属性如图3 (b)所示。
2008050410274233123_副本.jpg

本应用选择DMA通道4,5,设置TLC320AD50C的4个控制寄存器初始化参数,即"迷你"驱动程序注册信息的设备参数指针所指内容。
2827xsj073731_4.jpg

然后,应用程序通过调用DSP/BIOS的API,动态创建DMA/McBSP输入、输出通道,如:
2827xsj073731_5.jpg
SIO输人、输出通道均采用双缓冲管理。获取双缓冲资源,管理缓冲数据的工作,同样由SIO相关API完成。

4 USB驱动程序开发

     这是基于C5000系列DSP(TMS320C5509A)的USB硬件驱动开发。TMS320C5509A内部集成符合USB 2.0标准的全速模式USB接口。SIE(Serial Interface En-gine)负责将数据按照USB物理电平信号串行转并行输入或并行转串行输出,并且具有错误校验机制。UBM(USB
Buffer Manager)负责数据缓冲管理,管理数据在SIE和缓冲RAM的输入输出,CPU或USB的DMA控制器在缓冲RAM收发数据。

本硬件驱动的软件开发结构与上述McBSP/DMA硬件驱动开发类似,上层为"类"驱动,即DSP/BIOS GIO,SIO,或PIP模块,提供针对USB的"迷你"驱动的各种输入输出请求。"迷你"驱动是基于DSP/BIOS关于USB模块的CSL(Chip Support Library),调用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配置工具中User-Defined Devices项进行"迷你"驱动程序注册,命名为"usb"。属性如图4(a)所示。本应用也采用流输入输出(SIO/DIO),DIO适配模块与上述"迷你"驱动程序"usb"接口,DIO适配模块在DSP/BIOS配置工具中添加,命名为"dio_usb",属性如图4(b)所示。

2008050410280265549_副本.jpg
应用程序动态创建USB的某端点为输入、输出通道,如:

2827xsj073731_7_副本.jpg

由上可知,应用层"类"驱动程序开发的通用性是很强的。


5 结 语

   本文推荐的这种DSP硬件驱动开发方法,通过构建应用程序与硬件外设输入输出的统一数据接口,将接口代码层次化。当硬件设备改动后,应用程序可不做修改,应用程序的通用性、可移植性大大加强,硬件驱动程序也具有反复利用的特点。

使用特权

评论回复

相关帖子

Jasmines|  楼主 | 2019-4-12 11:09 | 显示全部楼层
开发DSP硬件驱动程序的一种方法

文档1.pdf

183.07 KB

使用特权

评论回复
usysm| | 2019-4-12 21:58 | 显示全部楼层
DSP/BIOS是一个简易的实时嵌入式操作系统

使用特权

评论回复
typeof| | 2019-4-12 21:58 | 显示全部楼层
DSP/BIOS是TI推出的嵌入式实时操作系统

使用特权

评论回复
yujielun| | 2019-4-12 21:59 | 显示全部楼层
bios配置文件命名为test.cdb或者test.tcf

使用特权

评论回复
htmlme| | 2019-4-12 21:59 | 显示全部楼层
加载不带bios的就行了        

使用特权

评论回复
pklong| | 2019-4-12 22:00 | 显示全部楼层
传言DSP/BIOS实时性不足           

使用特权

评论回复
touser| | 2019-4-12 22:00 | 显示全部楼层
CSL:Chip Support Library 芯片支持库 BIOS     

使用特权

评论回复
myiclife| | 2019-4-12 22:00 | 显示全部楼层
DSP/BIOS可以进行软件仿真吗   

使用特权

评论回复
uytyu| | 2019-4-12 22:01 | 显示全部楼层
对于实时DSP上的应用而言,API模块是最优的。  

使用特权

评论回复
iyoum| | 2019-4-12 22:01 | 显示全部楼层
推荐  DSP集成开发环境:CCS及DSP_BIOS的原理.pdf

使用特权

评论回复
jkl21| | 2019-4-12 22:02 | 显示全部楼层
工程是不是带DSP/BIOS的?   

使用特权

评论回复
usysm| | 2019-4-12 22:02 | 显示全部楼层
主要面向实时调度与同步、主机/目标系统通信,以及实时监测等应用

使用特权

评论回复
uytyu| | 2019-4-12 22:02 | 显示全部楼层
它能在嵌入式程序中提供基本运行服务  

使用特权

评论回复
myiclife| | 2019-4-12 22:02 | 显示全部楼层
另一种方法是使用DSP/BIOS API的LOG模块  

使用特权

评论回复
typeof| | 2019-4-12 22:02 | 显示全部楼层
CCS5中SYS/BIOS有像DSP/BIOS的那类API

使用特权

评论回复
touser| | 2019-4-12 22:02 | 显示全部楼层
TI的DSP芯片的应用程序分为两种:一般应用程序,和DSP/BIOS应用程序。

使用特权

评论回复
yujielun| | 2019-4-12 22:02 | 显示全部楼层
从ti官网上下到的头文件,有bios和non-bios两类  

使用特权

评论回复
pklong| | 2019-4-12 22:02 | 显示全部楼层
不知它能否胜任这项工作            

使用特权

评论回复
htmlme| | 2019-4-12 22:02 | 显示全部楼层
bios就是操作系统,是ti公司自己研发的系统  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

745

主题

1077

帖子

10

粉丝