首页 > 嵌入式硬件 > 驱动开发

近年来,随着信息技术的飞速发展,DSP在航空、航天、雷达、通信、消费类电子设备等方面都得到了广泛应用;同时,DSP的运算能力也越大越强大,TI公司新推出的TMS320C6400系列的运算能力可以达到8800MIPS。这些都要求开发DSP的应用程序要缩短开发时间,增加软件的可编护性和可重用性。语音压缩、语音识别、图像处理等方面的应用要求DSP的开发尽可能简单,还要求代码的执行效率高。

本文引用地址: http://embed.21ic.com/hardware/drivers/201806/63108.html

DSP/BIOS是TI公司推出的一个实时操作系统。DSP/BIOS与TI的CCS(Code Composer Studio)集成在一起。目前最新的版本是CCS 1.2中的DSP/BIOS II。应用DSP/BIOS可以大大简化DSP应用程序的开发和调试。与外部设备的I/O接口是DSP应用开发中不可缺少的重要部分。基于DSP/BIOS的I/O设备驱动将软件与硬件分离,提高了软件的可重用性,在软件或硬件改动时可使相互的影响降为最小。

1 DSP/BISO操作系统简介

DSP/BIOS实际上是一组可重复调用的系统模块API的集合。只占用DSP很少的资源,可以满足DSP实时运行时的调试性能分析,编写高效的程序。例如,在TMS320C6211上运行printf()函数需花费4000个周期,而运行LOG_printf()只花费36个周期,可printf()要比LOG_pfrintf()多花费100倍以上的时间。下面只对与I/O设备驱动有关的模块作简要介绍。

1.1 任务调度模块(HWI/SWI/TSK)

在DSP/BIOS中,任务的调度是通过HWI、SWI和TSK三个模块实现的。HWI(硬件中断管理模块)管理硬件中断,主要负责DSP与外设的交互,从外设中读写数据。由于硬件中断直接与硬件打交道,对应的中断服务程序ISR应尽可能短小精焊。HWI不引起任务调度,它在处理完数据的输入输出后调用SWI_post()来调度相应的软件中断SWI完成数据处理工作。

DSP/BIOS提供两类优先线程:SWI(软件中断管理模块)和TSK(任务管理模块)。SWI是DSP/BIOS任务调度的核心,SWI任务是抢断式的,即高优先级的任务可以抢断低优先级的任务。但是SWI任务是不可阻塞的,所有SWI任务共享一个堆栈,SWI任务只能在程序编制时预先定义好。DSP/BIOS中对任务的动态产生和对阻塞状态的支持是通过TSK模块来实现的。TSK也是可以抢断的,但每个TSK任务使用独立的堆栈。

1.2 通讯模块(PIP/SIO)

PIP(带缓冲管道管理模块)和SIO(流输入输出管理模块)是DSP/BIOS提供的两个接口对象,用于支持DSP与外设之间数据交换。PIP对象带有一个缓冲队列,可以执行带缓冲的读任务和写任务。SIO没有缓冲队列,SIO的操作get()和put()在应用程序和驱动程序之间交换缓冲的指针,而不是数据的拷贝,因此执行效率比PIP高。

PIP和SIO对象支持基于帧的信号处理系统的实现。在多速率系统中需要使用优先级线程来统一端口通信,在其它需要处理不同尺寸、不同速率的帧的系统中,优先级线程也是必须的。PIP对象可被SWI或TSK线程使用,而SIO对象只能被TSK使用。

2 低级设备驱动(LIO)

LIO(Low Level I/O)是一组基于DSP/BIOS设计的API函数。它由控制函数、I/O缓冲区管理函数、信令函数组成,如表1所示。应用程序可以通过LIO函数控制一个或多个外设通道。

表1 LIO API函数

LIO函数不考虑数据的转送方向,也就是说仅执行输出设备、仅执行输入设备和能执行输入、输出的设备执行的是同样的函数。输入与输出之间的主要不同点是传送到缓冲区队列函数的参数意义不同。既然所有其它的操作都是同样的,大多数控制代码能在单个驱动程序中被所有通道共享。

2.1 总体设计、设想和命名规范

所有的驱动程序函数都不能设置成全局中断。驱动程序应不影响全局中断使能标记的状态,仅影响由它控制的外设所能触发的中断所对应使能标记的状态。这样可以阻止一个驱动程序与其它驱动程序或应用程序争夺CPU资源。

为了避免由不同驱动程序使用同一函数名引起的命名空间冲突,也为了改变驱动程序而不需再编译应用程序代码,可以通过函数表访问驱动程序函数。用这种方式,仅需要为每个驱动程序定义一个外部符号。这种符号有其命名规范。此命名规范通过接线板、在片外设、LIO接口等来区分。如包含应用程序注释的源代码为TI TMS320VC5402 DSK的AD50音频编解码器执行基于DMA的驱动程序,驱动程序函数表名是DSK5402_DMA_AD50_TI_ILIO。

设备驱动程序支持的各通道半双工(输入或输出)通道。每个函数对应一个通道变量。一个能执行输入和输出的物理设备,如连接到音频编解码器的DSP串口,可通过两个半双工通道(一个输入,一个输出)来访问。一个驱动程序支持多少个物理设备和通道依具体实现而实。一般一个驱动程序应能控制一个物理设备,此设备可能有多个通道。通道号与物理设备通道的映射执行时确定。通道号应约定从0开始。对I/O设备,一般约定偶数号为输入,奇数号为输出。

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所示。

图2给出了此模式中最简单的传送状态集。圆圈中单词表示设备驱动程序缓冲区队列的状态。第一个单词是“to device”队列,第二个表示外设占用缓冲区指针,第三个是“from device”队列,第二个表示外设占用缓冲区指针,第三个是“from device”队列。E表示空,F表示满,EEE是起始状态。

每个队列可以是空(E),满(F),非空非满(N)。应用程序调用PutBuf()将缓冲区放到“to device”队列中。驱动程序立即将缓冲区放进外设,转移到状态“EFE”。当传送完毕,外设向驱动程序发中断信号,然后驱动中断处理程序将缓冲区从外设寄存器转移到“from device”队列,转移到状态“EEF”,接着调用应用程序的回调函数。回调函数调用GetBuf()从驱动程序的“from device”队列重新得到缓冲区,驱动程序返回起始状态。

如果驱动程序支持硬件排队,则当一个缓冲区正由外设传送时,“to device”队列能控制另一个缓冲区。与图2中状态转移不同,应用程序现在可能向“to device”队列增加另一个缓冲区。驱动程序将此缓冲区指针存进一个队列,此时状态为“FFE”,“to device”队列为满,外设正在传送一个缓冲区,“from device”队列为空。使用C数据结构实现这种状态机器的状态向量。

使用DMA全局重新加载寄存器来控制“to device”队列,状态结构如下所示。

Typedef struct drv_state{
Bool enabled;
Ptr currentBuffer;
Uns currentSize;
Ptr fullBuffer;
Uns fullSize;
LIO_TcallBack callback;
Arg calbackArg;
} LIO_Obj;

第一个字段“enabled”是一个布尔值,表示程序的开始或结束。下面两个字段“currentBuffer”“currentSize”控制当前传送缓冲区的起始地址和尺寸。当传送完毕,它们转移到“from device”队列。“fullBuffer”“fullSize”字段实现长度为1的“from device”队列。Callback()的地址和参数通过setCallback()存储在状态结构中。

驱程序对每个缓冲区只接收一个中断,而不是每个采样一个断。发生中断时,驱动程序已经知道缓冲区传送完毕,重新加载,DMA不需再重新编程。中断处理程序首先将currentBuffer内容移到fullBuffer中。如果缓冲区已在“to device”队列中,即已使用重新加载的DMA,则新缓冲区指针和长度记录进currentBuffer字段中,然后调用callback()。一旦定义了基本的状态机器,相似硬件的新驱动程序就很容易写出。

换一批

延伸阅读

[图酷] QD-DSP2407开发板

QD-DSP2407开发板

DSP处理器TMS320LF2407A,最高工作频率40MHz; DSP芯片内置2.5k字SRAM; DSP芯片内置32k 字FLASH; 外扩32k×16bit的程序RAM,32k×16bit......

关键字:

[新鲜事] 浅析DSP技术的创新应用及其发展前景

浅析DSP技术的创新应用及其发展前景

1 引言 DSP即为数字信号处理器(Digital Signal Processing),是在模拟信号变换成数字信号以后进行高速实时处理的专用处理器。它的工作原理是将现实世界的模拟信号转换成数字信号,再用数学方法处理此信号,得到相......

关键字:DSP 创新应用 发展

[猎聘集] 优秀嵌入式DSP工程师是怎样炼成的?

优秀嵌入式DSP工程师是怎样炼成的?

1、工作多年,总结您的经验和工作经历,您最想与想要或已经从事嵌入式电子行业新人说的话是什么?我当初进入DSP领域,是一个师兄的带领下进入的,但是我初学不久,他就离开学校,开始工作,因此我的DSP学习也暂时结束......

关键字:DSP工程师 嵌入式

[行业资讯] 电子半导体行业微处理器分类及主要原厂

电子半导体行业微处理器分类及主要原厂

中央处理器是一块超大规模的集成电路,是一台计算机的运算核心和控制核心,它的功能主要是解释计算机指令以及处理计算机软件中的数据。主要包括运算器和高速缓冲存储器及实......

关键字:半导体行业 DSP 处理器

[猎聘集] 17天70场面试,这位工程师是怎么样将面试“自动化”的?

17天70场面试,这位工程师是怎么样将面试“自动化”的?

人们通常认为求职方式应该分为两类:利用关系网和求职网站。尽管这些方式会管用,将你自己看做一个生意人也不失为一种非常有用的隐含性想法,即通过出售你的产品(你的时间)获得你的薪酬(你的收入)。......

关键字:工程师 求职

[猎聘集] 应聘电子工程师,我们都需要什么?

应聘电子工程师,我们都需要什么?

首先,要明白电子工程师这个行业是重视工作经验和电子技术方面的基本功。......

关键字:应聘 电子工程师

[破谣言] 同性恋是一种“不自然”的现象吗?

同性恋是一种“不自然”的现象吗?

在反对同性恋的意见里,这种观点十分常见。它的主张者认为,同性恋就意味着基因不能传给后代,就意味着灭绝,所以它不自然、应该反对。......

关键字:同性恋 现象
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14