嵌入式Linux系统中音频驱动的设计与实现
嵌入式Linux系统下基于UDA1341芯片的音频驱动程序设计

1
啪
SI D
音频 , 编解码芯片
tD五 4 TS J 3l
系统体 系结 构。软 件 部 分 主 要 是 以开 放 式 声 音 系 统 O S模 S 型 为基础实现嵌 入式 Ln x下 的各种 音频 功 能的驱 动程 序。 iu
本文 以 U A14 T D 3 1 S音频 编码解码芯片 为例 , 论了音频驱动 讨
根线 来与外部 芯片进行连接( 图 1 如 所示 ) 。它们是 :
・ Is I 串行 数据 输入 线。 2 D一
・ Is O 串行数 据输 出线 。 2D 一
场所 的多媒 体系统 中。与传 统 的音频 系统相 比较 , 入式 音频 嵌 系统具有操作简 单 , 成本低廉 , 能有效地控制功耗 并大幅提高产 品可靠性等 特点。但 要实 现这些 功能 , 系统 开发和设 计 的难度
Ab t a t sr c T e p p r d s u s sa u i r e r g a h a e ic s e n a d o d v rp o r mmi g d sg p r a h b s d o i n e i n a p o c a e n UDA1 4 h p fr e e d d L n x s se 3 1 c i o mb d e i u y t m. T i hs
第2 9卷 第 4期
21 0 2年 4月
计 算机 应 用与软 件
Co u e p i ain n o t r mp trAp l t s a d S f c o wa e
Vo _ 9 No 4 I2 .
Ap . 01 r2 2
嵌 入 式 Ln x系统 下基 于 U A14 iu D 3 1芯 片 的 音 频 驱 动 程序 设计
嵌入式音频系统的设计与开发

嵌入式音频系统的设计与开发嵌入式音频系统指的是将音频系统嵌入到某种设备、系统或产品之中,使其能够完成各种针对音频信号的处理、存储、传输等任务。
比如,我们常见的手机、耳机、音响、车载音乐系统等等,都是典型的嵌入式音频系统。
那么,如何进行嵌入式音频系统的设计与开发呢?在本文中,我们将会分享一些嵌入式音频系统设计与开发的经验。
一、硬件设计1.选择适合的音频处理芯片设计嵌入式音频系统的第一步,就是选择合适的音频处理芯片。
市面上有很多种不同的音频处理芯片,不同的芯片有着不同的特性,因此需要对需求进行充分分析,比较选出适合的芯片。
2.合理的电源设计电源是嵌入式音频系统的重要组成部分,其质量和稳定性直接影响整个系统的工作效率以及音质效果。
合理的电源设计需要考虑到功率因数、温度控制、电容器选择、电源过滤以及扰动等问题,以便保证整个音频系统的稳定性和效能。
3.精细的PCB布局PCB的布局是音频系统设计中的一个重要环节,它直接影响音频信号的传输效果和系统的EMC特性。
合理的PCB布局需要考虑到地位长、交叉干扰、距离阻抗、电源分配等多个因素,以确保系统稳定性和传输效率。
二、软件设计1.驱动程序嵌入式音频系统的驱动程序必不可少,它负责与硬件之间的数据传输和控制调度。
因此,驱动程序的设计需考虑到硬件接口、数据处理、控制逻辑、缓存策略等。
同时,应当兼容多种操作系统和硬件平台。
2.算法实现算法是嵌入式音频系统的灵魂,它决定了系统的音频效果。
常见的音频算法有音频编解码、滤波器、等化器、混响、压缩、降噪等。
这些算法需要根据音频信号的特点和算法的复杂度进行选取、优化,以提高系统的效率和性能。
3.界面设计除了驱动程序和算法实现之外,嵌入式音频系统还需要一个友好的界面,以方便用户进行操作。
使用LCD屏幕和按键开发图形化用户界面,可以提高用户体验和使用效率。
三、测试与验证在完成嵌入式音频系统的设计与开发之后,需要进行测试和验证,确保系统的功能和性能都能够达到预期。
SSI接口与嵌入式音频驱动的设计与实现

DOI:10.3969/j.jssn.1009-9492.2016.z1.017SSI接口与嵌入式音频驱动的设计与实现胡小玉(广东省佛山市顺德区美的电热电器制造有限公司,广东佛山 528311)摘要:介绍了i.MX27处理器与wm9712L编解码芯片通过SSI接口实现的音频系统及其工作原理,阐述了SSI串行总线接口的使用以及工作在AC97模式下相关寄存器的配置方法,给出了嵌入式系统下音频驱动程序的设计流程及编写方法,并着重讲解了Linux系统下makefile文件的编写以及使用make命令实现编译的过程。
此设计方案最终实现嵌入式系统音频文件的播放,对嵌入式系统的研究和开发有一定的借鉴意义。
关键词:i.MX27处理器;wm9712L;SSI接口;AC97;Linux中图分类号:TP334.7 文献标识码:B 文章编号:1009-9492(2016)z1-0088-040引言嵌入式系统针对特定的设备应用而设计,通常这些设备的硬件资源非常有限,设备类型各不相同,针对特定应用,就需要设计特定的软硬件环境,以适应系统的需要。
本文就基于嵌入式处理器,通过SSI接口实现其与音频编解码芯片wm9712L的硬件连接。
处理器采用飞思卡尔公司的i.MX27处理器,它是一款基于ARM9E核的微处理器,具有UART、SPI、I2C和SSI等多种外围接口。
设计中硬件部分通过分析SSI接口的工作特点及使用方法,采用AC97总线协议实现处理器与编解码芯片之间的通信。
软件实现上,由于Linux系统是一种开放源代码的操作系统,内核运行稳定、高效,支持多种不同硬件体系结构,设计中基于Linux2.6内核进行驱动程序的开发,利用操作系统为扩展硬件设备而提供的驱动接口,分析了对编解码芯片驱动程序的设计流程及实现过程,并详细讲述了通过Linux下的make工具及makefile文件实现对源文件编译的方法,最终完成驱动的加载,实现了音频播放功能,为实际的工程应用提供了一种借鉴方法。
基于ARM Linux的嵌入式音频系统设计

基于 A MLn x R i 的嵌入式音频系统设计 u
秦贵 和 , 徐 云鹏 , 洪 宇 , 李 宝玲
( 吉林 大 学 计 算机 科 学 与技 术 学 院, 吉林 长春 1 0 2) 302
摘 要 : 绍 了由处理 器 ¥ C 4 0和语 音处理 芯 片 U 介 321 DA1 8 组成 的基 于 A Ml u 30 R i x的音 频 系统 的构建 。提 出 了软硬件设 计 方 n
维普资讯
第 2 卷 第 1 期 8 1
Vo128 .
N o. 1 l
计 算 机 工程 与设 计
Co p trEn ie rn n sg m ue gn e iga dDe in
20 年 6 07 月
J n 0 u e2 07
Байду номын сангаас
案, 并就音 频文件 的 录制、 传输 、 放进 行 了探 讨 。 用 I 播 利 I 线,I S总 I C总线 实现 了音频数据 及控 制信号 的传输 , 驱动程序 设计 在 中通过使 用 D MA传输 及缓存 分段技 术提 高了对 音频 数据 的 实时处理 , 达到 了较好 实时性效 果 , 实现 了录放 同步 的音 频 系统 。 关键词 : 入 式 系统 ; 音频驱 动 ;D 嵌 MA传输 ;I I 线;I S总 I C总线 中图法 分类号 : P 1 T 36 文 献标 识码 : A 文 章编 号 :0 07 2 20 ) 1 6 10 10 .0 4(0 7 1- 1-3 2
r s s i n u rs b e t h o o y e h n e t e l i r c s f d o d t . t n mi s n a db fe u s c i n tc n l g n a c er a m ep o e so u i a a A y c r n z d r c r n ly a k a d o a o o e h t a s n h o i e e o d a d p a b c u i
浅析嵌入式设备驱动的设计与实现

嵌入式设备驱动的发展趋势
智能化:通过AI技术提升设备驱动 的性能和功能
云端化:通过云技术实现设备驱动 的远程监控和管理
添加标题
添加标题
添加标题
添加标题
物联网化:实现设备间的互联互通, 提升设备间的协同工作能力
安全性增强:提升设备驱动的安全 性能,防止黑客攻击和数据泄露
添加标题
添加标题
添加标题
添加标题
网络通信:适用于远程控制和数据 传输,具有传输速度快、距离远的 特点
SPI通信:适用于高速数据传输, 具有传输速度快、距离远的特点
驱动程序结构框架设计
驱动程序的基 本结构
设备驱动的接 口设计
驱动程序的初 始化与卸载
驱动程序的调 试与测试
嵌入式设备驱动的 实现
硬件接口实现
嵌添加入副式标设题 备驱动的 设计与实现
汇报人:
目录
PART One
添加目录标题
PART Three
嵌入式设备驱动的 设计
PART Five
嵌入式设备驱动的 优化与改进
PART Two
嵌入式设备驱动概 述
PART Four
嵌入式设备驱动的 实现
PART Six
嵌入式设备驱动的 应用与发展趋势
单击添加章节标题
பைடு நூலகம்
嵌入式设备驱动的分类
按照功能分类:系统级驱动、设备级驱动和应用级驱动 按照层次分类:硬件抽象层驱动、设备驱动层驱动和应用层驱动 按照使用场景分类:通用驱动、专用驱动和定制驱动 按照开发方式分类:开源驱动、闭源驱动和半开源驱动
嵌入式设备驱动的 设计
硬件接口设计
基于Linux操作系统的嵌入式音频系统设计

( 州 电 子科 技 大 学微 电子 C D研 究 所 , 江 杭 州 30 1 ) 杭 A 浙 10 8 摘 要 : 用 飞 思 卡 尔半 导 体 公 司提 供 的 MP 50 利 C 2 0芯 片 和 Wo sn公 司 的 WM 7 3C D C 芯 片构 建嵌 入 式 音 频 系统 , lo f 9 0 O E 采 用 了 D A 的 音 频 数 据 传 输 方 式 引 入 Ln x . 内核 和 设 计 具 多元 素 缓 冲 区的 音 频 驱 动 程 序 , 高 了 系统 的 实 时性 。 M i 6 u2 提
维普资讯
20 0 7年第 1 0期
计 算 机 与 现 代 化 J U N IY I N A H A I A J U XA D IU S
总第 16期 4
文章编号 :0 62 7 (0 7 1-100 10 。45 20 )00 4 -3
基 于 Lnx操 作 系统 的嵌 入 式 音 频 系统 设 计 iu
关 键 词 : 入 式 ;实时性 : 频 驱 动 嵌 音
ห้องสมุดไป่ตู้
中图 分 类 号 :V 1 T 36
文 献 标 识 码 : A
De i n o sg f Em b dd d Au i y tm s d o n x e e d o S se Ba e n Li u
S N Bn M i U i , A Q
MP 50 C 20足 以代替 D P芯 片 处 理 数 字 音 频 信 号 , S 同
时 MP 5 0 C 2 0通 过 周 边 串 口控 制 器 ( eih rl e a P r ea S r l p i
C nrlrP C) 供 了 多 种 音 频 C D C 的连 接 , ot l ,S 提 oe O E 包 括 与普 通 C D C IS C D C及 A 9 O E 的 O E 、2 O E C’ 7 C D C
基于嵌入式ARM-Linux的播放器的设计与实现

基于嵌入式ARM-Linux的播放器的设计与实现摘要随着21世纪的到来,人类进入了PC时代。
在这一阶段,嵌入式技术得到了飞速发展和广泛应用。
由此,本文提出了一种基于嵌入式ARM-Linux的播放器设计与实现的方案。
本文首先详细分析了ARM体系结构,研究了嵌入式Linux操作系统在ARM9微处理器的移植技术,包括交叉编译环境的建立、引导装载程序应用、移植嵌入式Linux内核及建立根文件系统,并且实现了嵌入式Linux到S3C2410开发板的移植。
由于嵌入式系统本身硬件条件的限制,常用在PC机的图形用户界面GUI系统不适合在其上运行。
为此,本文选择了Minigui作为研究对象,在对其体系结构等方面进行研究基础上,实现了Minigui到S3C2410开发板的移植,完成了嵌入式图形用户界面开发,使得系统拥有良好的操作界面。
对于播放器,本文实现了Linux系统下的通用媒体播放器—Mplayer到S3C2410开发板的移植。
通过对音频数据输出的研究,解决了Mp1ayer播放声音不正常的问题,实现了一个集音乐和视频播放于一体的嵌入式多媒体播放系统。
最后,总结了论文所做的工作,指出了嵌入式播放器所需要进一步解决和完善的问题。
关键词:嵌入式ARM-Linux; S3C2410; Mplayer; GUI界面; MiniguiPlayer Designing and Implement Based On Embedded ARM-LinuxAbstractAlong with the 21st century arrivals, the humanity enters the post PC time. In this stage, embedded technology gets rapidly developed and widely used. So, this paper aims to design a player based on embedded ARM-Linux.First, in this paper, ARM architecture and the characteristic are analyzed in detail. The emphasis of the study is put on the porting techniques of embedded Linux operation system based on the ARM9 micro-processor, which include setting cross complier、transplanting Bootloader、transplanting embedded Linux kernel and setting root file system; Furthermore, implement the technique of transplanting Embedded Linux to S3C2410 board.GUI (Graphical User Interfaces) systems which are supported by normal PCs cannot run well on the embedded systems, just because of the restriction of the hardware of embedded devices. So, this paper selects Minigui as research object. Based on the Minigui architecture and its other aspects, the technique of transplanting Minigui to S3C2410 board is given in detail, and then an embedded GUI system is established and it also makes the handle interface friendly.About the player, this paper implements transplanting the universal player on Linux-Mplayer to S3C2410 board. By learning of audio data, it solves the problem of sound abnormality, and achieves an embedded multimedia system which could play audio and video files.Key words: Embedded ARM-Linux; S3C2410; Mplayer; GUI interface; Minigui目录摘要 (I)Abstract ........................................................... I I 目录.............................................................. I II 第一章绪论.. (1)1.1系统研究背景 (1)1.1.1 多媒体播放器与嵌入式系统 (1)1.1.2 嵌入式多媒体播放器国内外发展现状 (1)1.2 嵌入式处理器 (3)1.3 嵌入式系统 (4)1.3.1嵌入式系统的概述 (4)1.3.2 嵌入式系统的选择 (5)1.4 本文的意义和主要工作 (7)第二章系统软硬件平台的搭建 (8)2.1 硬件开发平台的介绍 (8)2.1.1 核心板 (8)2.1.2 外设板 (8)2.1.3 设计所用硬件介绍 (9)2.2 硬件平台的设计方案 (9)2.2.1 核心板设计 (9)2.2.2 外设电路设计 (14)2.3 嵌入式软件开发环境 (15)2.3.1 引导装载程序 (16)2.3.2 宿主机开发环境配置 (17)2.3.3 交叉开发环境的建立 (18)2.3.4 内核的编译 (18)2.3.5 烧制内核映像和文件系统 (20)2.4 嵌入式图形用户界面的实现 (20)2.4.1 图形用户界面minigui的简介 (20)2.4.2 MiniGUI在S3C2410开发板上的移植过程 (21)第三章 Mplayer的移植 (25)3.1 Mplayer的简介 (25)3.2 Mplayer的移植 (25)3.2.1 安装交叉编译工具及解压源代码 (25)3.2.2 编译Mplayer (25)3.3 调试 (27)第四章嵌入式播放器Mplayer的设计 (31)4.1 播放器的工作流程 (31)4.2 播放器的逻辑结构 (31)4.3 Mplayer播放器的目录文件组织结构 (32)4.4 播放器对解码器和输出设备的管理方式 (34)第五章总结与展望 (36)5.1 本文主要完成的工作及结论 (36)5.2 完善与展望 (36)致谢 (37)参考文献: (38)第一章绪论1.1系统研究背景从上世纪末开始,随着计算机和电子技术的发展走上快车道,便携式电子设备,诸如智能手机,个人电子助理(PDA)的运算存储能力和通信能力都得到了长足的进步,便携式设备的用户界面也变的越来越友好,从早期的只能显示单色文字的LED,发展到现在大尺寸6万色彩色液晶屏幕。
嵌入式Linux中NVRAM的实现方案及驱动设计

162010,31(1)计算机工程与设计Computer Engineering and Design0引言NVRAM (non-volatile random access memory ,非易失性随机访问存储器)是广泛应用于网络路由器的一种存储器件。
它如同PC 上的CMOS ,作用是存放路由器的配置参数。
目前常见的NVRAM ,大都是静态SRAM ,即带有备用电源的SRAM ,它的实现最简单,同普通内存操作一样。
但是在实际应用中,不是所有的开发板都配备有静态SRAM 。
在这种情况下,如果使用该方案开发网络路由器,重新加入配备电源的SRAM 必须要重新排版,布线。
开发周期与开发成本将会大大增加。
因此,可以考虑在现有的硬件资源基础上,通过新的方式来实现NVRAM [1]。
本文就是以神州龙芯开发的CQ8401开发板为硬件平台,在自行裁剪和移植的嵌入式Linux 平台下,利用Nor Flash 来实现网络路由器的NVRAM 功能。
1NVRAM 新的实现方案分析由于NVRAM 仅用于保存启动配置文件(Startup-Config ),故其容量较小,通常在路由器上只配置32KB~128KB 大小的NVRAM 。
配备电源的SRAM 速度较快,是目前读写最快的存储设备,而成本也比较高。
一般的开发板所配备的Nor Flash空间足够大,在系统性能得到满足的前提下,可以把Nor Flash 分出一个区来当作NVRAM 使用。
SRAM 和Nor Flash 的对比分析,如表1所示。
网络路由器中的NVRAM 用于存放配置参数。
正常启动路由器后,NVRAM 中的内容会拷贝到内存一份,我们对路由器的设置实际上就是修改内存中的参数。
所以内存和NVRAM 中的内容可以不一样,直到使用write memory 将内存设置保存到NVRAM 。
在系统起来以后,我们可以根据需要修改配备参收稿日期:2009-07-17;修订日期:2009-09-18。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第31卷 第2期2008年4月电子器件Ch in es e Jo u rnal Of Electro n Devi cesVol.31 No.2Apr.2008Design and Implementation of Audio Driver for Embedded Linux SystemYU Yue,YA O G uo -liang*(N ational A S I C S ystem Eng ine ering Center ,S outhe ast Unive rsity ,N anj ing 210096,China)Abstract:This paper intro duces the fundam ental principle and architecture of the audio system w hich con -sists of the CODEC UCB1400and the 805puls,and describes the design of audio dev ice dr iv er based on Audio Codec .97for Embedded Linux System.The paper focuses o n the implementatio n of the DM A trans -port and ioctl interface.T he audio dr iv e is running w ell in actual Embedded Linux system equipments.Key words:805plus;embedded Linux;Audio A C .97driver;DM A;ioctl interfaceEEACC :1130B嵌入式Linux 系统中音频驱动的设计与实现虞 跃,姚国良*(东南大学国家专用集成电路系统工程中心,南京210096)收稿日期:2007-07-09作者简介:虞 跃(1982-),男,东南大学电子工程系国家专用集成电路工程技术研究中心硕士研究生,研究方向为嵌入式系统设计;姚国良(1979-),男,东南大学电子工程系博士研究生,yuyueo@.摘 要:介绍了由805puls 处理器和U CB1400编解码芯片构成的音频系统体系结构及工作原理,接着阐述了嵌入式Linux操作系统下基于A C .97协议标准的音频设备驱动程序的设计与实现。
其中着重讲述了采用循环缓冲区进行音频数据的DM A 传输流程以及ioctl 接口的实现。
此设计方案已在嵌入式L inux 系统中得到使用,运行效果良好。
关键词:805plus;嵌入式L inux ;AC .97音频驱动;DM A;ioctl 接口中图分类号:TP391文献标识码:A 文章编号:1005-9490(2008)02-0709-03嵌入式音频系统广泛应用于GPS 自动导航、PDA,3G 手机等移动信息终端,具备播放、录音功能的音频系统的应用使得移动信息终端上视听娱乐IP 电话、音频录制等成为可能,并推动了移动信息终端设备的发展。
在软件上,嵌入式操作系统的新兴力量Linux 的开源性,内核可定制等优点吸引了许多的开发者与开发商。
它是个和U nix 相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。
支持广泛的计算机硬件,包括X86,A lpha,Sparc,M IPS,PPC,ARM ,NEC,MOT OROLA 等现有的大部分芯片[1]。
本文针对805puls 微处理器选用Philips 公司的编解码芯片(CODEC)U CB1400,构建了基于Au -dio Codec .97(AC .97)标准的音频系统。
并介绍了该音频系统在Linux 操作系统2.4.19内核下驱动程序的实现技术。
1 音频系统构架1.1 微处理器805plus805plus 是东南大学ASIC 系统工程技术研究中心和北京大学微处理器研究开发中心共同设计和开发的32bit 嵌入式微处理器,是采用H ar vard 结构的RISC 处理器。
内部采用五级流水线结构,兼容16bit 和32bit 的指令系统805plus 嵌入式微处理器集成了存储接口EMI,时钟和功耗管理PM C,中断控制器INTC,通用定时器T IM ER,脉宽调制器PWM,实时时钟RT C,通用串口UA RT,LCD 控制器LCDC,AC .97控制器,同步外设接口SPI 。
1.2 AC .97协议标准[2]AC'97协议标准是一套关于A C'97数字音频处理(AC'97Digital Controller)、AC '97数字串口(AC-Link)、A C'97编、解码以及输入,输出支持(A C'97CODEC)的协议组。
AC '97规范中并没有定义AC -Link 的主控端,因此符合AC'97规范的UCB1400也只是作为一个编解码芯片接到了805puls 的AC .97控制器(AC'97Co ntro ller Unit)上面,该控制单元也符合AC'97规范,并且还支持AC -Link 。
它们的连接方式如图1所示。
图1 U CB1400通过A C -L ink 连接到805puls 的AC .97控制器上[3]需要注意的是对UCB1400芯片所有的操作都必须通过AC -Link 来进行,AC -Link 接口由5针数字串口组成:同步信号SYNC,位时钟信号BIT _CLK,数据输出SDAT A -OU T,数据输入SDATA _IN,RESET 信号。
一个音频帧包含帧头和数据两部分。
SYNC 信号的上升沿标识音频帧的开始,下降沿标识数据帧的开始。
在音频帧期间,当BIT _CLK 信号上升沿时发送数据,下降沿时接收数据,从而实现全双工的数据传输。
AC .97控制器提供基于A C -Link 协议通信的同步机制AC .97控制器与U CB1400之间的PCM 音频数据传输,以及对UCB1400片上寄存器的读,写都遵循了AC -Link 数据串口协议标准。
1.3 音频系统的构架如图2所示,整个音频系统可以简略地分为三个部分:CPU (805Plus)和主存(SDRAM ),CODEC 芯片(UCB1400),外设(麦克风和扬声器)。
图2 音频系统的构架图U CB 1400芯片中的DA (Digital to Analo g)和AD (Analo g to Digital)分别完成数字信号到模拟信号以及模拟信号到数字信号的转换,因此对于放音来说,用户进程中CPU 将音频文件解码成PCM 编码,音频管理模块主要就是将用户进程中的PCM 编码的数据通过DM A 通道写入AC .97控制器,然后AC .97控制器通过AC -Link 传到U CB 1400,由U CB1400来对其进行DA 转换,最后送到线性输出信号线上到扬声器,最终完成声音播放,录音部分原理一样,是上述过程的逆过程[4]。
2 音频驱动的设计与实现设备驱动程序中需要完成的任务包括:对设备以及对应资源初始化和卸载;控制音频数据在硬件中流动,并为音频应用提供标准接口。
读取应用程序传送给设备文件的数据并回送应用程序请求的数据。
这需要在用户空间、内核空间、总线及外设之间传输数据[5]。
2.1 初始化和卸载设备初始化是为了确保整个硬件能够正确的运转。
驱动程序首先在init_soundco re 中向内核注册了名为/mixer 0和/dsp 0的2个设备,主设备号为14,次设备号分别为0和3。
然后将A C .97控制器寄存器和GPIO 等相关寄存器到虚拟地址空间并配置AC .97控制器以及AC -Link 相关接口。
最后调用初始化音频设备:包括初始化UCB1400芯片并配置其基本寄存器。
上述工作完成后向内核注册DM A 中断。
初始化出错或设备卸载时调用卸载功能函数。
卸载时要停止DMA 通道,清除中断允许,up 信号量,关闭音频设备。
还必须释放驱动程序使用的各种系统资源包括DMA 缓冲区,AC .97,DMA 中断等。
2.2 CODEC 芯片操作接口和竞争操作系统中对于同步的控制一般采用锁和信号灯。
在Linux 中通用的防止并发数据访问的方式一般有:循环缓冲区、进行互斥的自旋锁以及使用p/v 操作的信号量[6]。
AC .97规范中AC -Link 属于连接AC .97控制器和CODEC 芯片的唯一通道,各模块均要通过它与U CB1400进行通讯,因此它属于一种临界资源。
音频驱动中要负责接收上层各模块的读写请求,然后对AC c 97控制器进行控制,其中还包含了对AC c 97控制器以及AC -link 的初始化、处理控制器自身的中断以及负责AC -link 这一临界资源的互斥使用。
其中实现的核心函数是读写函数ac97_read()710电 子 器 件第31卷和ac97_w rite(),所有对于CODEC 芯片的操作最终都由这两个函数完成。
为了保证读写函数的原始性,接口中加入了信号量机制,以写寄存器为例,当把一个值写入U CB 1400寄存器的地址空间,操作前先dow n(&CAR_mutex )这个信号量,然后再写寄存器,如果成功,在AC .97控制器中会产生一个标记,该操作正确得以执行,再up(&CAR_mutex ),完成写操作。
这部分仅以dow n()和UP()进行分析,给出整个实现的伪码:dow n(){保存程序状态字;关中断;semapho re--;恢复状态寄存器(开中断);if(sem aphore<0)挂入等待队列,转进程调度;}up(){保存程序状态字;关中断;sem aphore++;恢复状态寄存器(开中断);if(sem aphore<=0)唤醒等待队列;}2.3 DMA 传输由于音频应用对实时性有很高的要求,且需要处理的数据量较大,所以必须合理分配资源,使用合适的算法。
本方案中DM A 的数据缓冲区是用co nsistent_alloc()函数申请的一块16@12kbit 的连续的内存区域,然后用描述符的方式将这16个块形成一个循环链表。
每个缓冲块都有一个805_dm a _desc *dma_desc;的数据结构:ty pedef str uct {volatile u32ddadr;/*指向下一个描述符*/volatile u32dsadr;/*DMA 传输的原地址,是物理地址*/volatile u32dtadr;/*DM A 传输的目的地址,是物理地址*/}805_dma_desc;因为CPU 解码和DMA 传输是不相互影响的,所以有一个16@12kbit 的循环数据缓冲区会加快软件运行的效率,这样从用户空间将音频解码的数据拷贝到DM A 缓冲区时,不致使音频驱动在数据缓冲区上出现瓶颈[7]。