基于S3C2410和UDAl34l的嵌入式音频系统设计

[10-10 20:38:44]   来源:http://www.88dzw.com  电子制作   阅读:8152

文章摘要: 由于ⅡS总线只处理音频数据,因此UDAl34l还内置了用于传输控制信号的L3总线接口。L3接口相当于混音器控制接口,可以控制输入/输出音频信号的低音及音量大小等。L3接口接在S3C2410的3个通用GPIO输入输出引脚上,利用这3个I/O口模拟L3总线的全部时序和协议。这里一定要注意L3总线的时钟不是连续时钟,它只在数据线上有数据时才发出8个周期的时钟信号,其他情况下时钟线始终保持高电平。4 Linux下音频驱动的实现 设备驱动程序是操作系统内核和机器硬件之间的接口,为应用程序屏蔽了硬件细节。设备驱动是内核的一部分,主要完成以下功能:设备初始化和释放;设备管理,包括实时参数设置及

基于S3C2410和UDAl34l的嵌入式音频系统设计,标签:电子小制作,http://www.88dzw.com
    由于Ⅱ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接口给上层调用,这样上层可以根据音频数据的精度即数据流量来调整缓冲区数据段的大小和个数,以取得最好的传输效果。

上一页  [1] [2] [3]  下一页


Tag:电子制作电子小制作维修教程知识 - 电子制作

《基于S3C2410和UDAl34l的嵌入式音频系统设计》相关文章