a. DAI接口
EP7212/7312的数字音频接口(DAI)主要用于支持高质量立体声的音频处理。图4是CS43L42与嵌入式微处理器EP7212的DAI接口电路。该接口主要由以下五个信号组成:
(1)LRCK,左/右帧同步。
(2)SCLK,位时钟,等于MCLK的1/2,每帧有128位。
(3)MCLK,2x过采样时钟,仅在从模式下输入。
(4)SDOUT,数字音频数据输出。
(5)SDIN,数字音频数据输入。
用MSB/Left数据调整格式意味着数据在帧同步信号(LRCK)电位改变后立即被计时。MSB在第一位时是左调整,这与I2S格式相比有些不同,I2S格式的数据在改变电位后要延迟一个时钟。数据帧每帧是128位长,这样每个声道64位长。帧的大小和LRCK的运行周期在EP7212/7312中不能被设置。SCLK可从MCLK中得到,频率等于1/2 MCLK。缺省模式中,DAI处于主模式。该模式下自己产生的MCLK时钟等于9.216MHz。这样,SCLK等于4.608MHz。对于需要SCLK有不同速率的应用,DAI可以被设置成从模式。在从模式下,外部源通过MCLK引脚给MCLK提供主时钟,然后分成两半生成SCLK。不管DAI模式如何设置,SCLK和LRCK通常都设置成输出。数据一般在SCLK的上升沿锁入,在下降沿释放。
DAI接口是一种高质量的数字音频接口,可以连接与DAI接口兼容的音频设备。EP7212 的DAI接口通过位时钟和帧同步时钟产生128bit帧数据。数字音频数据的接收和发送均采用全双工方式,对应于12采样深度的接收FIFO和8采样深度的发送FIFO。在DAI 接口信号中,MCLK是主时钟,它是音频采样频率的256倍,SCLK为音频采样频率的128倍,LRCK固定为采样频率。由于本系统中的MCLK连接外部时钟发生器,频率为11.2896MHz?所以采样频率为44.1KHz。其DAI接口时序图如图5所示。
图5
DAI的帧长128bit?其中包括一个音频采样数据,在这128bit中,仅有32bit为实际的音频数据,其余输出均为零。左/右时钟作为帧同步信号,左/右时钟从高到低表示右声道的16bit数据,从低到高表示左声道的16bit数据。
b. DAI接口初始化
DAI初始化程序中首先应设置控制寄存器, 接着选择外部时钟有效以及在左发送FIFO数据少于一半时产生中断。然后清除状态寄存器上溢、下溢位,之后使DAI接口、发送FIFO和接收FIFO有效。最后打开DAI中断。
4.2 MP3文件的解码
ARM公司提供有基于ARM处理器音频文件解码库,它能够有效地解码MP3格式的歌曲,而输出16bit立体声PCM数据。
a. 解码库所定义的结构
·tSampleRate定义了解码数据PCM的采样率
typedef enum tagSampleRate
{
SR 11 025kHz?
SR 12kHz?
SR 44 1kHz?
SR 48kHz?
SR 32kHz?
SR Reserved
} tSampleRate ?
·tMPEGStatus 给出了MP3函数返回状态值。
typedef enum tagMPEGStatus
{
eNoErr?
eNoSyncword?
eCRCError?
eBrokenFrame?
eEndOfBitstream?
eDataOverflow?
} tMPEGStatus ?
·tMPEGBitstream?给出MPEG比特流的指针,bufptr定义为比特流的字指针,bitidx定义为字中的索引(0-31)。
typedef struct tagMPEGBitstream
{
unsigned int * bufptr?
unsigned int bitidx?
} tMPEGBitstream?
·tMPEGHeader?包括MPEG音频报头信息,sam-ple_rate为PCM采样频率,samplesperchannel为每个声道的采样数,numchans为声道数,packed info为报头信息,bits required为下一次调用函数需要bit数,free format是指比特流的格式。
typedef struct tagMPEGHeader
{
tSampleRate sample rate?
unsigned int samplesperchannel?
unsigned int numchans?
unsigned int packed info?
unsigned int bits required?
unsigned int free format?
} tMPEGHeader?
b. MP3解码库所提供的函数
·InitMP3Audio?tMPEGInstance *inst?
功能:初始化解码器解码指针。
·MP3SearchForSyncword?tMPEGInstance *inst?tM-PEGBitstream *bs?length?
功能:查找MPEG数据中的同步字。
·MP3DecodeInfo?tMPEGInstance * inst?tMPEGBit-stream * bs?tMPEGHeader * pmpeg hdr?
功能:从MPEG帧中获得报头的信息。
·MP3DecodeData?tMPEGInstance *inst? short *left?short * right? tMPEGBitstream * bs?
功能:从MP3数据解码成PCM数据,并将其存到left、right指向的缓冲区中。
c. MP3程序解码流程及在FIQ中断中的实现
,用CS43L42音频解码器和EP7212嵌入式处理器设计的MP3文件播放系统