新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > DSP/BIOS中的IO设备驱动编程技术

DSP/BIOS中的IO设备驱动编程技术

作者: 时间:2010-12-22 来源:网络 收藏

2.2 三类函数

LIO接口中有三类函数:控制函数、缓冲区和队列管理函数、信令函数。

2.2.1 控制函数

控制函数用来实现设备的启动、关闭和控制。其初始函数为驱动程序保存资源(物理外设和内存)。它使用结构指针作为可选变量,此结构是一种设备的特殊变量结构。

2.2.2 队列管理

假定每个设备至少有一个用来传送数据的缓冲区。许多设备(如McBSP和DMA)带有允许双缓冲的缓冲队列。图1是一个有三个存储单元的LIO驱动程序,驱动程序中有:由外设填满或清空的缓冲区“todevice”(到设备)队列,将传送的缓冲区返回到应用程序的缓冲区管理程序的“from device”(来自设备)队列和当前传送数据的缓冲区。在虚线框里的认为是在驱动程序里面。当前传送数据的缓冲一般由外设寄存器控制,如DMA源寄存器或目标寄存器,在图1中画在“外设”中。含硬件队列(如DMA重新如载寄存器)的设备也会含一个或多个存储单元用业存储指针为以后传送用,此队列为“to device”队列。能包含缓冲区指针的第三个存储单元是“from device”队列,在驱动程序中为一变量。当设备准备传送缓冲区时,缓冲区从输入队列传送到外设寄存器。这些缓冲区然后移到输出队列以完成传送,作为对CPU中断的响应。

PutBuf()将缓冲区从应用程序传送到驱动程序的输入队列。GetBuf()从输出队列得到缓冲区。IsEmpty()和IsFull()返回输入队列、输出队列的状态。如果输入队列满,因为无空间装新缓冲区,调用putBuf()会返回错误代码。若IsFull()返回false,接下来可调用putBuf()。如果IsFull()返回true,但若在IsFull()返回true和调用putBuf()之间完成传送,则调用putBuf()也可能会成功。

2.2.3 信令

如图1所示,当传送结束一般会触发CPU中断。此中断会使应用程序将传送的缓冲区转移到输出队列,然后调用calback()传到驱动程序。Callback()应向应用程序发信号告知传送完毕。

3 LIO驱动程序例子

音频处理如语音压缩、呼叫过程音调检测等,是DSP的一般应用。本例是使用TMS320C5402 DSK上的DMA将音频编解码数据从McBSP移到缓冲区中。

当驱动程序响应应用程序调用和设备中断时,采用数据结构跟踪驱动程序的状态。有效状态是设备驱动程序缓冲区队列的状态,如图1所示。



评论


相关推荐

技术专区

关闭