1导言
跟着微电子技能的飞速发展,嵌入式产品以其天然的人机交互界面和丰厚的多媒体处理才能敏捷得以推行,并取得了巨大成功[1].现在,在多媒体音频领域中,MP3播映器占有了肯定的主导地位。但现有的MP3播映器驱动才能十分有限,只适宜个人运用,不能满意大型公共场所在不同区域播映不同背景音乐的多通道播映需求。根据以上剖析,本文规划了一种根据S3C44B0X芯片的μClinux环境下的多通道专业MP3播映器。
2体系功用剖析与结构规划
多通道专业MP3播映器是专为满意公共语音播送商场的需求而规划的,其首要功用包括:(1)音频解码和播映功用;(2)经过USB接口与大容量外部存储设备进行数据传输;(3)操作界面统一办理功用;(4)多通道播映功用。
为了进步体系运转功率,完结多通道播映办理,本体系选用三星公司的S3C44B0X作为中心处理器,首要担任数据转化,输出通道的挑选,以及LCD的操控。一起,选意图法半导体的STA013作为解码芯片,合作AK4393完结模仿音频信号的输出,此外,运用SL811HS和ISP1520供给两个主USB接口,以完结移动硬盘或U盘的挂接。其体系整体结构如图1所示:
图1体系整体结构图
3体系硬件规划
作为一种典型的嵌入式体系,其开发的长处在于软硬件的可裁剪性[2],在保证有一个安稳的最小体系今后,再对外围的设备进行扩展。此多通道专业MP3播映器的中心芯片S3C44B0X是根据ARM7而开发的多功用SOC(Signal Operation Control)。S3C44B0X除具有一般嵌入式芯片所具有的总线、SDRAM操控器和3个串口等外设之外,还具有TFT LCD操控器、USB Slave、USB Host、I2C总线操控器、SPI操控器、IIS音频接口、SD
3.1 MP3解码电路规划
本体系解码部分的硬件选用了ST公司的STA013解码芯片以及AKM的AK4393芯片。STA013是一款优异的MP3解码芯片,它经过IIC总线来传输操控信息,经过串行数据线接纳语音数据。AK4393是一款高品质的立体声DAC芯片,支撑24bit/96KHz取样,选用“复合比特”技能使芯片的解码更为快速和精确。
解码部分与S3C44B0X的接口电路部分如图2所示。经过S3C44B0X的I/O口对STA013发送音频数据,解码进程由STA013的DSP核来进行。STA013解码后的数字音频信号由SDO(串行数据输出),SCKT(串行时钟),LRCKT(左右声道时钟),OCLK(采样时钟)4个脚输出到D/A转化器AK4393.经过AK4393将得到的模仿音频信号,再经过功率扩大电路扩大后就能够直接驱动无源音箱。
图2解码部分接口电路图
此外,因为完结多通道的播映方法,所以需求在规划进程中供给多套相同的解码芯片和DAC.
3.2多通道功用的完结
体系多通道播映选用的根本办法是(以四通道为例):当体系上电今后,解码操控信号为了完结对每一个解码通道的具体作业状况操控,经过选用外接一个四路转化开关(CD4066),操控各路通道解码芯片的作业状况。转化开关四路通道的输入部分衔接CPU的IIC总线的I%&&&&&%SDA,经过与CPU相连的多个操控引脚(CTRL1,2,3,4),确认操控数据的传输方向。四路通道的时钟信号则直接衔接在CPU上,只需操控数据传输时才产生效果。
在播映进程中,CPU实时呼应各通道传输数据的恳求,选通该路的解码芯片,被选通的解码芯片对从总线上获取的mp3文件数据进行解码,而未被选通的解码通道则疏忽总线上的音频数据。当数据恳求的中断恳求信号由高变低,体系开端呼应下一次数据恳求。经过这种各通道替换作业的方法,完结四通道同步播映的功用。作业原理图如图3所示:
图3多通道作业原理图
4体系软件规划
体系软件包括操作体系、驱动程序及播映器使用程序3部分。
4.1操作体系的完结
在嵌入式体系中,一般并没有像BIOS那样的固件程序,因而整个体系的加载发动使命就完全由BootLoader来完结。BootLoader的使命是初始化芯片和主板,体系选用的是U-Boot-1.1.2发动程序,因为U-Boot的长处在于对多体系和多渠道的支撑。因为S3C44B0X没有存储办理单元(MMU),所以无法移植规范的Linux内核,而μClinux首要是针对没有MMU的处理器规划的操作体系[4],因而能够作为播映器的操作体系渠道进行移植。经过修正相应的配置文件和驱动程序就能够完结移植进程中需求创立的开发板文件。
4.2驱动程序的规划
本体系所编译的μClinux内核中包括有USB、LCD等驱动程序,只需根据需求恰当的修正便能够使用。可是关于MP3解码部分芯片的驱动需求自己编写。音频驱动程序完结的首要功用是:(1)体系发动时能够完结芯片的初始化;(2)具体操作时能够供给给操作体系适宜的软件接口。音频驱动初始化程序如下:
void STA013_Init(void)
{
if(STA013_SendCommand(RESET_REG,0,0×00)) //复位STA013
STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0×00)) //未激活状况
STA013_PrintError();
if(STA013_SendCommand(PWR_CON_REG,0,0×00)) //上电
STA013_PrintError();
if(STA013_SendCommand(FS_CON_REG,0,
I STA013L_FsValue[SysInfo.SamplingIndex])) //挑选采样频率
STA013_PrintError();
if(STA013_SendCommand(IF_CON_REG,0,0×02+(06))) //挑选16位IIS数据格式
STA013_PrintError();
if(STA013_SendCommand(ANG_CTL_REG,0,0)) // 0x13, 0x12挑选DAC
STA013_PrintError(); 和Line In输入形式
if(STA013_SendCommand(DGT_CTL_REG,0,0×00)) // DAC静音
STA013_PrintError();