您的当前位置:首页正文

基于DSP_BIOS的设备驱动程序开发

来源:爱够旅游网
期计算机与数字工程

基于!/\"#$%&\"的设备驱动程序开发

李亦非

吴裕斌

曹丹华

李非一

(华中科技大学光电子工程系

武汉’)())*’

!

/然后具体讲述了+,介绍了!\"#$%&\"嵌入式实时操作系统上外设模块化驱动程序的开发规范,\"(-)./*00!\"1平台上音频设备驱动程序的开发过程,最后总结了外围设备驱动的一般开发方法。

关键词:!\"#$%&\"#%#驱动程序

中图分类号:+2300

/!\"#\"$%’(*+\"!,-./0,!\"#’1\"!2’#\"2&)

3’4’5\"’67478\"’9:%!:(+7:3’;\"’’<

(!,)467894:8;<#=;8;4>4?87;:@:B:447B:CD\"+,EF=6:’())*’5AA

://,=8>*2:1*+=BG5647B:87;HF?4G%&H4IB?4H7BI479;H4>J6G4H;:!\"#$%&\"H4G?7BJ4G6:4K69>4;+,\"(-)./*00!\"1,6:HGF9967BL4G8=44:476>948=;H8;H4I4>;4IB?4H7BI47MA5H

:,,,?\"%2A>!\"#$%&\"#%#H4IB?4H7BI47<@

:9$:>>(7B8\"2+#300

0引言

近年来,航天、雷达、通信、消费!\"#在航空、

类电子设备等方面得到了广泛的应用,其中,+%公司的+,\"(-)系列占据了!\"#市场的大部分。/!\"#$%&\"是+%公司推出的一个实时操作系统,与+(.集成在一起。%的..\";H4.;9;G47\"8FHB;)5应用!/\"#$%&\"可以大大简化!\"#应用程序的开发和调试。与外围设备的%/&接口是!\"#应用开发中不可缺少的重要部分,通过将外设驱动程序,把不同功能提取到不同的模块中加以简化和封装,使!提高了\"#系统软件系统与硬件系统相分离,软件的可重用性、可维护性和可移植性,降低了系统中软件模块与硬件模块之间的耦合性。

,以下简称控制模块),控制模块通过底层?;:87;>>47

/(N/接口与转接模块相连接。这两个模%&;O%&)块组成了设备的驱动程序,从而实现外围设备和应用程序线程(包括软件中断\"之间E%和任务+\"1)的数据交换。

/$-基于!\"#%&\"的设备驱动模型

如图0所示,!\"#/$%&\"驱动模型包含两个模块:底层%/(N,以下简称&转接模块%&6H68475转接模块)和底层%/(N&设备控制模块%&H4IB?4

!

收到本文时间:-))’年R月0(日

基于&/第D#!?\"$#的设备驱动程序开发D卷FI

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$用程序线程和控制模块之间,主要处理与硬件无关的操作,如缓冲区的管理、线程之间的通信,并实现了!\"!或#\"$缓冲管理模块与设备驱动的接口。

一共有两种基本类型的转接模块:第一种是与!!%\"$转接模块,\"!对象相接口。第二种是

与#/&%\"$转接模块,\"$&’(对象相接口。由这两种对象生成的实例()包含了转接模块提)*+,-*./供给控制模块的缓冲区信息,如缓冲区的大小,位置等。本文主要讨论的是!%\"$转接模块。和+()实现线程与外设之间的数据同步,是整381),

个模块化驱动程序的核心。%\"$接口实现了与硬件无关的转接模块和与硬件相关的控制模块之间的硬件状态和缓冲区的信息共享。

表A%\"$接口@!\"函数

函数名称

函数类型

函数功能

初始化设备控制模块初始化外围设备

()全局函数\".4*,0477/0#)*),

()全局函数\".4*,0477/0#+/,3C()4/*C

().74+/通道控制函数分配给设备相应的通道通道控制函数释放分配给设备的资源!%\"$主要功能是从上层线程获得一个缓冲

区,并把这个缓冲区提交给下层的控制模块。同时%\"$要能够辨别出控制模块何时能够完成对缓冲区的操作然后把缓冲区返回给上层线程。!%\"$包含三类函数:

!初始函数(!0)1/23*.,)4*+):这类函数一般包括05!0)1/()(接收初始函数)和,5!0)1/()(发送初始函数)。它们是应用程序与转接模块之间的接口,在应用程序把缓冲区发送给转接模块时调用。!回调函数(6-778-.923*.,)4*+):这类函数一般包括056-778-.9()、,56-778-.9()。它们是转接模块与控制模块之间的接口,在线程处理完某个缓冲区时调用回调函数通知控制模块,或者是控制模块提交给线程处理某个缓冲区时通知线程。!传输函数(:0-*+2/023*.,)4*):这类函数调用控制模块的+381),()。+381),()从转接模块获得一个缓冲区,并把缓冲区的信息通知\"#;(中断服务子程序)。

=<控制模块(%\"$&/>)./64*,0477/0

)设备控制模块处于转接模块和外围设备之间,这个模块功能是实现对硬件的控制和数据的读入写出。该模块与硬件相关,不同设备有不同的设备控制模块。这个模块在应用线程分配数据缓冲区后由转接模块调用。控制模块再把缓冲区提供给硬件,在硬件完成对缓冲的操作后,把缓冲返回给控制模块,这个操作通常通过硬件中断实现。控制模块通过回调函数(.-778-.923*.,)4*)来通知转接模块。另外控制模块还应该完成硬件的初始化、开启和关闭。控制模块通过%\"$接口与转接模块相连接,控制模块中所有的操作全部在%\"$接口中实现。

%\"$接口是一套基于&#!/?\"$#的标准@!\"函数,如表A所示。它由全局函数、通道控制函数、中断服务函数组成。其中的全局函数实现必要的硬件软件初始化;B个通道控制函数实现对硬件操作,是驱动程序中非常重要的组成部分;\"#;函数

+381),()通道控制函数

把从线程获得的缓冲区提交

给相应的硬件

.-*./7()通道控制函数取消当前操作.,07()通道控制函数设备特殊操作\"#;

()中断服务程序

通过调用回调函数实现控制模块与外围设备之间的同步

6EFAA&#G平台上的音频设备驱

动程序

=A平台简介

:H#D高性能的浮点&#!J:H#D、E9LM音频信号采样,同时可以将采集的数字音频信号转换成模拟信号输出。6EFAA片上包含’&N

H@(扩展&H@)控制器,负责&#!片内%<存储器和其他外设之间的数据传输。6EFAA&#!有<路多通道缓冲接口H.?#!I和H.?#!A,具有独立的接收、发送频率和帧同步信号。

=<驱动程序框架

如图<所示,这是整个软件的结构。一共有四个层次:应用程序层,!%\"$转接模块层、控制模块层、硬件提取层。

处于最上层的是应用程序的某个线程,通过!\"!O/,()、!\"!20//()、!\"!-774.()、!\"!C3,()对外围设备进行操作,这样对@&BDB的操作就像对两个抽象的管道进行操作。

处于第二层的是!%\"$转接模块。这个模块通过!\"!的数据通知函数(P-,-*4,)2).-,)4*23*.N)4*)*4,)2Q;/-P/0和*4,)2Q

R0),/0与最上层相联系。这一层主要包括三类函数:初始函数(!0)1/3*.,)4*)、传输函数(:0-*+2/023*.,)4*)、回调函数6-778-.923*.,)4*)组成,即图中的05!0)1/()、,5N!0)1/()、,0-*+2/0()、056-778-.9()、,56-778-.9()五个函数。因为这个模块是与硬件无关的,所以已经在&#!/?\"$#的C7)4=.文件中实现了,在不同设备!A2?3B2?@=>:$2?3=>8@?(

8A@?2\"=>A2?3B2?@<%和=>:$2?3=>8@?#8A@?2\"=>A2?3B2?@A2?3B2?@<%和=>(

和;+1&控制模块实际上是整个驱动的难点和重点,这个模块包含表D所示的E个函数,其中-./01)()和#9?

()是核心。!39F7GDD

@3=2

234541’1)

()和39F7GDD@3=223454-,).;

():39F7GDD@3=2234541’1)

()主要是实现控制模块上的软件初始化,这里为空函数。39F7GDD@3=2

23454-,).;

()主要是初始化硬件,这里包括对=%:98H进行初始化,设定23454的7个寄存器并使能@3=2中断。

!&;

,’():这个函数是用来建立一个专门的@3=2通道。包括@3=2的传输参数、

启动触发事件、中断时间和通道链接。先建立一个@3=2通道参数的结构体,然后检查所打开的通道是否正在被使用。设定回调函数指针和回调函数参数。并根据通道的传输类型(输入或输出)设定通道的启动触发事件和目标目的地址。最后设定@3=2的传输结束代码(I66)和相应的6#@?。

!-./01)():-./01)()从转接模块接收到一个缓冲区,首先应该禁止@3=2中断,以防止-./(01)6&.’)在#9?中修改,然后判断-./01)6&.’)是否达到最大值,如果达到,函数返回,如果没有,根据J*1),#’K,L获得此@3=2通道的参数位置,并根据输入输出方式设定目标和目的地址。!#9?():由于发送和接收共用一个中断程序。所以在#9?()中要判断中断类型,然后-./(01)6&.’)和*,MK#’K,L相应减或加D,然后调用相应的回调函数,最后清@3=2通道未处理中断标志寄存器(6#8?)

。N设备驱动开发的一般方法

针对不通设备,驱动程序不尽相同,但是本文所讨论的23454的驱动例程实际上是一个基于8#8模型的驱动程序的模板。如果开发人员编写一个新设备的驱动,而且这个驱动也是基于8#8模型的话,那么这个例程中的很多部分都可以利用。例如转接模块与硬件无关,是可以直接拷贝过来使用的;控制模块也是可以利用的,因为控制模

块三类函数是固定,任何驱动都要有&;

,’()、%+&-,、-./01)()、#9?()等函数,这些函数虽然是与硬件相关的,但是编程人员可以利用例程已经给定的流程,只修改与硬件相关的部分,如&;

,’()中@3(#()基于F/第,+0G@H+的设备驱动程序开发,卷&’

\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"硬件!\"中的设置在不同驱动中参数是不相同的;提取层是整个驱动开发中可重用性最差的,需要开发人员根据外设的资料自己编写。

修改少量代码就可以方便地移植到其他平台。

参考文献

[)]*!+,’-./---012351267891:121;<1$=3>1%*1?68@;A4

,8B2=C1;B8)((([]//’D23B3;+0G@H+F1I3<1F23I128:J2G7J1%*1?68@;8B2=C1;B8’--)

[](第’版)[!]电M*!+,’-./---系列F+08原理与应用%

子工业出版社,’--,

#小结

本驱动已经在$%&’(\"多通道语音压缩系统中得到了成功应用,驱动模块在多通道同时调用的情况下工作正常稳定。由于采用嵌入式操作系统进行任务调度,驱动模块化设计,虽然预先花费了较多的设计时间,但是整个软件架构简单健壮,只

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(上接第MN页)

数据归档分析主要侧重于对实例层单个属性的分析,比如该属性的数据类型、长度、取值范围、典型取值等等,通过这样的分析我们可以了解有关该属

[],性的各种数据质量问题。数据挖掘则主要是侧

步骤中至关重要的一步,我们应投入较多的精力。

()数据转换M

做完上述工作后,就是具体的数据转换实施。这个我们可以通过调度上面配好的工作流来进行实现数据的抽取、转换。

()干净数据的反馈#

在上述工作中,当我们清洗完单个数据源后,应该将清洗后的数据反馈给数据源,并用之替代原来的脏数据,以避免下次数据整合时还要再清洗一次。

重于对多个属性之间关系的分析。比如说通过数据挖掘出的某个关联规则,其置信度为(那么(O,就意味着有)是脏数O的记录不满足这个规则,据,需要清洗。

()然后定义有效地映射规则和工作流调度’

策略

由于数据源可能数目众多、彼此异构,且含有脏数据,因此我们需要做大量的数据转换和清洗的工作。在最开始的清洗工作中,我们的侧重点在解决单个数据源的实例层的数据质量问题,以确保各数据源所提供的数据自身是干净的。然后接下来就需要解决多数据源数据集成时的整合问题,比如如何消除重复记录,冲突记录。这些都应该在映射定义和工作流调度的过程中实现。

()验证,

定义好了映射规则和工作流调度策略后,我们需要对其进行验证以及评估。比如使用一些数据进行测试,若效果不好则应对映射以及调度进行调整。这个过程应该是个螺旋上升的反复过程,以达到最佳的清洗效果,从而获得干净的数据。这个过程对于数据质量的保证具有最直接的影响,是整个

#小结

本文归纳总结了高校信息化建设过程中,数据整合所需处理的几个典型的基本问题,并就每种问题都提出了相应的P*Q解决方案。然后针对可能的数据质量问题,提出了在实施这些P*Q方案时应该采取的数据质量控制策略。

参考文献

[])R6883736>380,+3C3B838\",+K36>JJ=7J8+%.J;<1B=6744

[!],CJ>173;:J2P*Q42J<18818%\".!02188’--’E[],,:’965C,P%FJS%S%F6B6<716;3;2JT71C86;><=2AE4

[U],21;B62J6<518%@PPPF6B6P;3;1123;=771B3;44EEG,():’---’,M,!),

[],L%!:*,V66>3;3;6B6T681JX62>8\"7J23B5C8:J2WWEFE

[U]Y;JX71>1F38,,()P;3;1123;)((N’))EE

因篇幅问题不能全部显示,请点此查看更多更全内容