新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 开发DSP硬件驱动程序的一种方法

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

作者: 时间:2016-10-08 来源:网络 收藏

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

本文引用地址:https://www.eepw.com.cn/article/201610/305503.htm

通过建立硬件驱动程序的开发模式,可使上述现象得到改善。因此,本文介绍一种开发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 Mini-driver)模式。

IOM[2]是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所示。

1.jpg

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

2.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)所示。


上一页 1 2 下一页

关键词:

评论


相关推荐

技术专区

关闭