转自:http://www.chinabaike.com/z/gyzd/401000.html

近几年,嵌进式数字音频产品受到越来越多消费者的青睐。在MP3、手机等消费类电子产品中,人们对于这些个人终真个要求早已不限于单纯通话和简单的文字处理,高质量的音效是当前发展的重要趋势。嵌进式音频系统分为硬件设计和软件设计。硬件部分采用基于ⅡS总线的音频系统体系结构。软件上,嵌进式Linux是一种完全开放且免费的操纵系统。它支持多种硬件体系结构,内核运行高效、稳定,而且源代码开放,有着完善的开发工具,为开发职员提供了优良的开发环境。

本文利用samsung公司的S3C2410型微处理器和Philips公司的UDAl341型立体声音频CODEC构造了嵌进式音频系统,给出相关硬件电路的设计,先容该音频系统基于Linux2.4内核版本的驱动程序实现。

2 ARM920T及S3C2410简介

ARM920T是ARM公司系列微处理器核的一种,它采用5阶段管道化技术,同时配备了Thumb扩展、Embedded ICE调试技术和Harvard总线。在生产工艺相同的情况下,性能可达ARM7TDMI的2倍以上。S3C2410是Samsung公司采用0.18 μm工艺制
造的ARM9TDMI核微处理器。它有独立的16KB指令Cache、16KB数据Cache和MMU,这一特性使得开发职员可以直接将Linux移植到基于该处理器的目标系统中。

3 基于ⅡS总线的硬件框架实现

ⅡS(Inter-IC Sound)总线是Philips公司提出的串行数字音频总线协议。它是一种面向多媒体的音频总线,专用于音频设备之间的数据传输,为数字立体声提供序列的连接至标准编解码器。ⅡS总线只处理声音数据。其他信号(如控制信号)必须单独传输。为了使电路的引出引脚尽可能少,ⅡS只使用了3条串行总线:提供分时复用功能的数据线、字段选择线和时钟信号线。

整个音频系统的硬件部分主要是CPU和CODEC的连接与实现。本系统采用Philips基于ⅡS音频总线的UDAl34l型音频CODEC。该CODEC支持ⅡS总线数据格式,采用位元流转换技术进行信号处理,具有可编程增益放大器(PGA)和数字自动增益控制器(AGC)。

S3C2410内置ⅡS总线接口,可直接外接8/16比特的立体声CODEC。它还可以给FIFO通道提供DMA传输模式而非中断模式,从而使数据发送和接收同时进行。该ⅡS接口有3种工作方式,可以通过设置ⅡSCON寄存器来选择。本文先容的硬件框架基于传输和接收模式。在这种模式下,ⅡS数据线将通过双通道DMA同时接收和发送音频数据,DMA服务请求由FIFO只读寄存器自动完成。S3C2410支持4通道连接系统总线(AHB)和外围总线(APB)的DMA控制器。表1列出S3C2410的各通道请求源。

为了实现音频数据的全双工传输,需要使用S3C2410的通道1和通道2:接收数据选择通道1和发送数据选择通道2。S3C2410的DMA控制器没有内置的DMA存储区域,因而程序中必须为音频设备分配DMA缓存区,通过DMA直接将需要回放或录音的数据放在内存的DMA缓存区中。

如图1所示,S3C2410的ⅡS总线信号与U-DAl34l的ⅡS信号直接相连。L3接口的引脚L3MODE、L3CLOCK和L3DATA分别连接到S3-C2410的GPBl、GPB2和GPB3通用数据输出引脚。UDAl34l对外提供两组音频信号输进接口,每组包括左右2个声道。

如图2所示,2组音频输进在UDAl34l内部的处理存在很大差别:第一组音频信号输进后经过1个0 dB/6 dB开关后采样送进数字混音器;第二组音频信号输进后先经过可编程增益放大器(PGA),然后再进行采样,采样后的数据要再经过数字自动增益控制器(AGC)送进数字混音器。设计硬件电路时选用第二组输进音频信号。由于希看通过软件的方法实现对系统输进音量大小的调节,显然选用第二组可以通过L3总线接口控制AGC来实现。另外,选择通道2还可以通过PGA对从NIC输进的信号进行片内放大。

由于ⅡS总线只处理音频数据,因此UDAl34l还内置了用于传输控制信号的L3总线接口。L3接口相当于混音器控制接口,可以控制输进/输出音频信号的低音及音量大小等。L3接口接在S3C2410的3个通用GPIO输进输出引脚上,利用这3个I/O口模拟L3总线的全部时序和协议。这里一定要留意L3总线的时钟不是连续时钟,它只在数据线上有数据时才发出8个周期的时钟信号,其他情况下时钟线始终保持高电平。

4 Linux下音频驱动的实现

设备驱动程序是操纵系统内核和机器硬件之间的接口,为应用程序屏蔽了硬件细节。设备驱动是内核的一部分,主要完成以下功能:设备初始化和开释;设备治理,包括实时参数设置及提供对设备的操纵接口;读取应用程序传送给设备文件的数据并回送应用程序请求的数据;检测和处理设备出现的错误。

音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准的音频接口。笔者设计的音频接口驱动向上提供2个标准接口:数字音频处理(Digital Sound Processing-DSP),负责音频数据的传输即播放数字化声音文件和录音操纵等;混音器(MIXER),负责对输出音频进行混音处理,如音量调节、高低音控制等。这2个标准接口分别对应设备文件dev/dsp和dev/mixer。

整个音频驱动的实现分为初始化、打开设备、DSP驱动、MIXER驱动和开释设备等部分。

4.1 初始化、打开设备

设备初始化主要完成对UDAl34l音量、采样频率、L3接口等的初始化,并且注册设备。通过函数audio_init(void)完成以下具体功能:

S3C2410控制端口(GPBl-GPB3)的初始化;
     为设备分配DMA通道;
     UDAl34l的初始化;
     注册audio设备和mixer设备。
     打开设备由打开函数open()完成以下
功能;
     设置好ⅡS和L3总线;
     预备好声道、采样宽度等参数并通知设备;
     根据采样参数计算出缓冲区大小;
     分配相应大小的DMA缓冲区供设备使用。

4.2 DSP驱动的实现

DSP驱动实现了音频数据的传输即播放和录音的数据传输。同时提供ioctl对UDA134l中的DAC和ADC采样率进行控制。采样率的控制主要是读写UDAl34l内的采样率控制寄存器,所以驱动的主要部分就是控制音频数据的传输。

驱动中通过结构static audio_state来描述整个音频系统的状态,其中最主要的是2个数据流结构audio_in和audio_out。这2个数据流结构分别描述输进音频流和输出音频流的信息。通过对audio_in和audio_out的操纵分别实现音频的输进和输出(音频的播放和录音),本驱动的主要内容是数据流结构的设计和实现。该结构应该包含音频缓冲区的信息、DMA的相关信息、所用到的信号量及FIFO的进口寄存器的地址。

为了进步系统的吞吐量,系统使用DMA技术直接将需要回放或录制的声音存放在内核的DMA缓存区中,由于S3C2410的DMA控制器没有内置的DMA存储区域,因而驱动程序必须在内存内为音频设备分配DMA缓存区。缓冲区设置是否公道非常关键。以write()函数为例,由于音频数据量通常较大,而缓存太小轻易造成缓存溢出,所以要采用较大的缓冲区。而要填充大的缓冲区,CPU就要一次处理大量的数据,这样处理数据时间较长,轻易造成延迟。笔者采用多个缓存的机制,将缓冲区分为多个数据段。数据段的个数和大小分别在数据流结构中指定。这样把大的数据段分为几个小段处理,每处理一小段数据就可以通过DMA发送出往。read函数也是如此,DMA每发来一小段数据就可以处理,不用等到大缓冲区都填满才处理数据。这里还提供了ioctl接口给上层调用,这样上层可以根据音频数据的精度即数据流量来调整缓冲区数据段的大小和个数,以取得最好的传输效果。

4.3 MIXER驱动的实现

MIXER驱动只控制混音效果,并不执行读写操纵,所以MIXER的文件操纵结构只实现了1个ioctl调用,提供给上层设置CODEC的混音效果。驱动中主要实现了1个结构体struct UDAl34l_codec。该结构体描述了CODEC的基本信息,主要是实现了CODEC寄存器的读写函数和混音的控制函数。MIXER文件操纵结构中的ioctl就是调用U-DAl341_codec中的混音控制函数来实现的。

4.4 设备的卸载

设备的卸载由注销函数close()来完成。注销函数使用注册时得到的设备号,同时开释驱动程序使用的各种系统资源,如DMA和缓冲区等。

5 结束语

本文先容了在嵌进式系统中构建基于ⅡS总线的音频系统,实现音频的播放和录音的采集。具体讲述了基于Samsung公司S3C2410型微处理器的CODEC硬件连接的实现及嵌进式Linux下音频驱动的实现。该系统已经在基于S3C2410的开发平台上得到了实现,可以顺利进行音频的播放和采集,并取得良好的效果。

基于S3C2410和UDAl34l的嵌进式音频系统设计相关推荐

  1. 基于ASP.NET Core SignalR的流式传输

    基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...

  2. collapse在PHP中是什么意思,在PHP中全面禁止SQL注进式攻击之二

    在PHP中全面禁止SQL注进式攻击之一 一. 注进式攻击的类型 可能存在很多不同类型的攻击动机,但是乍看上往,似乎存在更多的类型.这是非常真实的-假如恶意用户发明了一个能够履行多个查询的措施的话.本文 ...

  3. 基于S3C2410的触摸屏驱动程序设计

    基于S3C2410的触摸屏驱动程序设计   作者:沈阳农业大学 关键词:  ADS7843  S3C2410  触摸屏  嵌入式Linux  消费电子  触摸屏  消费电子 摘要: 本文介绍了基于三星 ...

  4. 个人操作系统V0.3(Personal Operating System,缩写为POS)是一种小型的多任务嵌 入式操作系统,用于ARM 公司Cortex-M0 内核的微控制器。

    1 简介       个人操作系统V0.3(Personal Operating System,缩写为POS)是一种小型的多任务嵌 入式操作系统,用于ARM 公司Cortex-M0 内核的微控制器.该 ...

  5. javaweb仓库管理系统的实现,基于ssm+mysql实现的WMS进销存出库入库系统

    javaweb仓库管理系统的实现,基于ssm+mysql实现的WMS进销存出库入库系统 感兴趣的朋友可以家 3060912346 主要技术 SpringBoot\SSM(两个版本都有) HTML.jQ ...

  6. 基于 STM32 和 NB-IoT 的可穿戴式老人防摔监测系统

    这是我本科毕设搞得一个小任务,现在稍微整理了其中一点内容,下面有相应的程序代码. 程序参考: 采用STM32作为主控,通过串口与ME3616通信,控制ME3616对接OneNET,将采集到的温度数据上 ...

  7. C#毕业设计——基于C#+asp.net+sqlserver药店进销存管理系统设计与实现(毕业论文+程序源码)——进销存管理系统

    基于C#+asp.net+sqlserver药店进销存管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C#+asp.net+sqlserver药店进销存管理系统设计与实现,文章末尾 ...

  8. 基于javaweb的超市进销存系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)

    基于javaweb的超市进销存系统设计和实现(java+Springboot+ssm+mysql+jsp+maven) 一.项目简述 本系统主要实现的功能有: 用户管理,商品管理,销售管理,进货退货管 ...

  9. 基于Java毕业设计晨光文具店进销存系统设计与开发源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计晨光文具店进销存系统设计与开发源码+系统+mysql+lw文档+部署软件 基于Java毕业设计晨光文具店进销存系统设计与开发源码+系统+mysql+lw文档+部署软件 本源码技术栈 ...

  10. 基于预训练语言模型的检索- 匹配式知识图谱问答系统

    基于预训练语言模型的检索- 匹配式知识图谱问答系统 张鸿志 , 李如寐,王思睿,黄江华 美团, 北京市朝阳区 100020 {zhanghongzhi03,lirumei,wangsirui,huan ...

最新文章

  1. HiveServer2
  2. DotNetTextBoxV3.0在线编辑器控件Ver3.4.2 Open Source开源版
  3. 利用SQL Server EXISTS结构
  4. 零基础如何学爬虫技术?
  5. jsp 连接sql数据库查询(源代码)
  6. jquery 获取input checkbox checked属性
  7. 50 years, 50 colors HDU - 1498(最小点覆盖或者说最小顶点匹配)
  8. 慕课java工程师2020版_2020年Java工程师就业前景怎么样?
  9. 简述计算机网络的五层协议体系结构,计算机网络五层协议体系结构分别是什么...
  10. android xutils加密,xutils
  11. c语言求最小公约数和最小公倍数,c语言求最大公约数和最小公倍数
  12. CHM格式的帮助文档制作与代码调用 Visual Studio C#
  13. RPM 包的构建 - SPEC 基础知识
  14. 专家通过六点考证唐村《李氏族谱》:辨别家谱真伪,有这些窍门
  15. 企业电子文档管理系统哪个好?怎么选?
  16. 从Linux角度以及JVM源码,深入NIO的细节
  17. 马丁富勒微服务论文学习
  18. 诺基亚(Nokia)E7-00联通定制版移动上网的方法(暴力推荐)
  19. asp.net857全科门诊的就诊管理系统#毕业设计
  20. Springboot整合WebSocket实现网页版聊天,快来围观!

热门文章

  1. win7 mysql 管理员权限,win7管理员权限问题 TrustInstaller 获取权限
  2. JavaScript中null、underfined、NaN的辨别以及数据类型的检测
  3. PageOffice——动态填充Word模板并在线编辑
  4. 苏宁API:item_get - 获得suning商品详情
  5. 基于PHP的班级分数量化管理系统
  6. linux创建文档并且打字,与 Linux 一起学习:学习打字
  7. 什么是Banner图?
  8. c 循序结构程序设计
  9. 使用阿里云,5分钟搭建私有云盘
  10. 2021-01-22