用CS43L42音频解码器和EP7212嵌入式处理器设计的MP3文件播放系统

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

文章摘要:·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数,

用CS43L42音频解码器和EP7212嵌入式处理器设计的MP3文件播放系统,标签:电子小制作,http://www.88dzw.com

·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中断中的实现

图6所示是该系统中MP3文件的解码流程。该文件可在FIQ中断中实现播放。由于DAI FIFO对应于FIQ中断,因此,它可以通过控制寄存器来设置FIFO的中断方式,并可在程序中将产生中断的位置设置在左发送FIFO中少于四个采样数据时。由于在FIQ中断中保存有MP3解码缓冲区的地址,因此,若在进入FIQ后各写四个采样数据到左右FIFO中,那么,对于44.1kHz文件来说,FIQ发生的速率将为11kHz。为了保证左右FIFO的正确填充,一般需要交替写两个FIFO。此时如果MP3缓冲区无数据,则可写0(静音)到两个FIFO中,这样,程序就可以跳出FIFO中断接着处理数据。需要说明的是:无论程序是否需要录音,都要从接收缓冲区读四个数据,这样可确保DAI FIFO处于同步状态而不会产生失真。另外,在FIQ处理程序的最后,还要清除溢出状态位,这样可以防止FIQ始终中断。

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


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