图10 视频显示流程图
Framebuffer 提供的API 接口:
(1)FBIOGET_VSCREENINFO 指令用来获取Framebuffer可修改的信息,保存在结构体fb _var _screeninfo 中,主要包括屏幕的分辨率、像素信息和一些时序变量。
(2)FBIOGET_FSCREENINFO 指令用来获取Framebuffer不可修改的记录,保存在结构体fb_fix_screeninfo 中,主要包括屏幕缓冲区的物理地址和长度。API函数定义在< linux /fb.h > 头文件中[15]。
4. 音频的采集与回放
4.1 音频输入输出电路的分析
系统音频输入输出模块电路设计选择了低功耗、低价格、高性能的微处理芯片S3C2440A和基于音频总线的飞利浦UDAl341TS音频编解码芯片做为该模块主要器件。其电路原理图如图11所示。
图11 音频输入输出电路
其中UDAl34lTS芯片石一款低功耗、全双工音频编码解码专用芯片,集ADC和DAC于一身,包括一个可编程增益控制器(PGA)和一个数字自动增益控制器(AGC)。它提供两个音频信号输入接口,一组音频输出线、一组IIS总线接口信号线,一组L3总线。其中一组音频信号输入后经过采样送入数字混音器;另一组音频信号输入后先经过PGA,然后再进行采样、采样后的数据要再经过AGC送入混音器,可以通过L3总线接口控制AGC或通过PGA对从MIC输入的信号进行片内放大。每一组音频输入有左右两个声道,可以通过L3总线控制选择单声道还是立体声。另外L3总线可以控制声音的重音、音量、高音以及静音等等。
4.2 音频采集播放方案
4.2.1 IIS总线
IIS(Inter-IC Sound bus)又称I2S,是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对IIS的支持。IIS总线只处理声音数据。其他信号必须单独传输。为了减少芯片的引出管脚,IIS只使用了一根提供分时复用功能的数据线,一根字段选择线(声道选择)和一根时钟信号线。
在S3C2440A处理器中内置了一个IIS控制器,这样它可以外接一个8/16位立体声音频编解码器接口,该总线接口支持IIS总线数据格式和MSBojustified数据格式。另外,控制器包含FIFO,可以支持DMA(直接存储器)传输模式和普通传输模式。普通模式下,处理器根据FIFO的准备状态传送数据到FIFO,而FIFO的准备状态通过IIS的FIFO控制寄存器IISFCON获取,数据直接写入IISFIFO。DMA模式下,对FIFO的访问和控制完全由DMA控制器完成,DMA控制器自动根据FIFO的状态发送和接收数据。采用DMA的发送/接收模式,这样可以实现录音和放音的同步。IIS总线控制流程如图12所示。
图12 IIS总线控制流程
4.2.2 音频采集与回放的实现
3C2440A微处理器为UDAl341TS编解码器都提供了IIS-BUS音频编解码器接口,这样可以直接相连,大大简化了系统的设计,同时基于DMA的发送/接收方式,来实现实时的录音和播放功能。系统用编解码器芯片UDAl341TS来完成语音信号采集、放大、滤波、A/D转换,而S3C2440A芯片则来将数字信号进行进一步的处理,系统利用直接数据存取控制器来控制发送和接收FIFO的数据存取,把语音数字信号从先进先出缓冲区送入直接数据存取缓冲区,用微处理器来进一步处理。
音频数据采集时系统为DMA传输分配了一个输入环形缓冲区,音频编解码器不断采集数据,由IIS总线接口通过直接存储器方式轮流输入各个缓冲区块,当前的缓冲区块填满数据后,用户程序就要读取当前缓冲区块数据,然后将其送往微处理器处理。待微处理器对数据处理过后,应用程序就会调用驱动程序实现的写函数,将数据由用户空间写入DMA输出环形缓冲区[16]。当缓冲区块内数据写满后,通过直接存储器方式由IIS总线送入音频编解码器,有扩音器实现音频的放音。音频的采集播放程序流程如图13所示。 ARM音视频采集与回放系统的设计(6):http://www.youerw.com/tongxin/lunwen_1387.html