70 基于 DSP/BIOS的设备驱动程序开发 第 33卷
用程序线 程和控制模块之 间 ,主要处理与硬件无关
的操作 ,如缓 冲区的管理 、线 程之间的通信 ,并实现
了 PIP或 S10缓 冲管理模块 与设备 驱动的接 口。
一
共有 两 种 基本 类 型 的转 接 模 块 :第 一 种 是
PLIO转 接 模 块 ,与 PIP 对 象 相 接 口。第 二 种 是
DLIO转接模 块 ,与 SIO/DEV 对 象相 接 口。由这
两种对象生成 的实例(instance)包 含 了转 接模块 提
供给控制模块 的缓 冲 区信息 ,如缓 冲区 的大小 ,位
置等 。本文 主要讨论 的是 PLIO转接模块 。
PLIO主要 功 能 是从 上 层 线程 获 得 一 个 缓 冲
区 ,并 把这个缓 冲区提交给下层 的控制模块 。同时
PLIO要能够辨别出控 制模块何 时能够完 成对缓
冲区的操作然后把缓 冲区返 回给上层线 程 。PLIO
包含三类 函数 :
* 初 始函数 (Prime functions):这 类 函数 一般
包括 rxPrime()(接 收初始函数)和 txPrime()(发送
初 始 函数 )。它们 是应用程序与转接模块之间 的接
口,在应用程序 把缓冲区发送 给转接模块时调用 。
* 回调函数 (Callback functions):这 类 函数一
般包括 rxCallhack()、txCallback()。它们是转 接模
块 与控 制模块之间 的接 口,在线程处理完 某个缓冲
区时调用 回调 函数通知控制模块 ,或 者是控制模块
提交 给线程 处理某个缓 冲区时通知线程 。
*传输函数 (Transfer function):这类函数调
用控制模块 的 submit()。submit()从 转 接模 块获
得一个缓 冲区 ,并 把缓 冲区 的信息 通知 ISR(中断
服务子程序 )。
2.2控 制模块 (L10 Device Controller)
设备控 制模块 处于转接模块 和外围设 备之间 ,
这个模块功 能是 实现 对硬 件 的控制和数据 的读入
写出 。该模块 与硬件 相关 ,不 同设备有不 同的设备
控制模块 。这个模 块在 应用 线程 分配 数据缓 冲区
后由转接模块调用 。控制模块再把缓冲区提供给
硬件 ,在硬件完 成对 缓 冲的操 作后 ,把缓 冲返 回给
控制模块 ,这个操作通常通过硬件中断实现。控制
模块通过 回调 函数 (callback function)来通 知转 接
模块 。另外控制模块还应该完成硬件的初始化 、开
启和关 闭 。控制模块通 过 LIO接 口与转接模 块相
连接 ,控制模 块 中所 有 的操 作 全部 在 L10接 口中
实现 。
L10 接 口是一 套基 于 、P/B10S的标 准 API
函数 ,如表 1所示。它由全局函数 、通道控制函数、
中断服务 函数组成 。其 中的全局 函数 实现 必要 的
硬件软件初 始化 ;5个通 道控制 函数实现对 硬件操
作 ,是驱 动程 序 中非 常重 要 的组成 部分 ;ISR函数
和 submit()实现线程 与外设 之间的数据同步 ,是 整
个模 块化驱 动程序 的核 心 。LIO接 口实现 了与硬
件无 关的转接模块 和与硬 件 相关 的控制模 块 之 间
的硬 件状 态和缓冲区的信息共享。
表 1 LIO接 口API函数
函数名称 函数类型 函数功能
< omtrdler>
一 ink() 全局函数 初始化设备控制模块
<ommil ̄>
一 时 )全局函数 初始化外围设备
open() 通道控制函数 分配给设备相应的通道
close() 通道控制函数 释放分配给设备的资源
subrrfit()
cancel()
ctrl()
ISR()
通道控制函数 釜磊蓄 的缓冲区提交
通道控制函数 取消当前操作
通道控制函数 设备特殊操作
中断服务程序覆荬鸳 昌菱譬耋
3 C6711 DSK 平 台上 的音频设备 驱
动程序
3.1平 台简介
TMS320C6711 DSK 的核 心芯 片 是一 款 具有
高性能的浮点 DSP—TMS320C6711,模拟接口电
路包 括 一 个 双 通 道 的 语 音做 据 编 解 码 芯 片
T1,C320AD535,此 编 解 码 芯 片 可 以 完 成 8khz、
16khz音频信号采样 ,同时 可 以将采集 的数字音频
信号转换成模拟信号输 出。C6711片上包含 E1)-
MA(扩展 DMA)控制器 ,负责 DSP片内 L2存储器
和其他外设之间的数据传输。C6711 DSP有 2路
多通道缓 冲接 口 McBSP0和 McBSP1,具有独 立的
接 收、发送频率和帧 同步信号 。
3.2驱动程序框 架
如图 2所示 ,这是整个软件 的结构。一共有 四
个层次 :应用程序层 ,PLIO转接模 块层 、控 制模块
层 、硬件提取层 。
处于最 上层 的是应 用 程 序 的某个 线 程 ,通 过
PIP
—
get()、PIP—free()、PIP—aUoc()、PiP
— put()
对外 围设 备进 行操作 ,这样对 AD535的操 作就像
对 两个抽象 的管道进行操作 。
处 于第二 层 的是 PLIO 转接模 块 。这个 模块
通 过 PIP的数据 通 知 函数 (data notification func—
tion)notifyReader和 notifyWriter与 最 上 层 相 联
系。这一层 主要 包 括 三类 函数 :初 始 函 数 (Prime
function)、传输 函数 (Transfer function)、回调 函数
(Callback function)组 成 ,即图 中的 rxPrime()、tx—
Prime()、transfer()、rxCa llback()、txCallback()五
个 函数。因为这个模块是与硬件无关 的 ,所 以已经
在 DSP/13IOS的 plio.C文件 中实现 了 ,在不 同设备
维普资讯 http://www.cqvip.com