⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于s3c44b0x(ARM7)的实现mp3播放功能的MP3DECODETEST.rar
💻 C
字号:
#include"uhal.h"
#include"myuart.h"
#include"44b.h"
#include"IIS-S3C44B0.h"
#include"def.h"
#include"file.h"
#include"flash.h"
#include"isr.h"
#include "utils.h"
//#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 

extern int song_position,song_size;
extern unsigned char song_data[];
U32 data_remain;
extern void start_mp3_decode(void);

///////////////////////////UDA1341/////////////////////////////////////////////////
#define UDA1341_MODE			(1<<14)		//GPC14

#define UDAADDR					0x14		//UDA1341 address
#define UDA_DATA0				0x00		//UDA1341 data0
#define UDA_DATA1				0x01		//UDA1341 data1
#define UDA_STATUS				0x02		//UDA1341 status

#define UDASTATUS0_RST			0x40		//UDA1341 status reset
#define UDASTATUS0_SC512		0x00		//UDA1341 status SC
#define UDASTATUS0_SC384		0x10		//UDA1341 status SC
#define UDASTATUS0_SC256		0x20		//UDA1341 status SC
#define UDASTATUS0_IIS			0x00		//UDA1341 status IF2-0=0 IIS
#define UDASTATUS0_DC			0x01		//UDA1341 status DC-filtering
#define UDASTATUS1_OGS6		    (0x80|0x40)	//UDA1341 status gain of DAC 6dB
#define UDASTATUS1_IGS6		    (0x80|0x20)	//UDA1341 status gain of ADC 6dB
#define UDASTATUS1_PADINV		(0x80|0x10)	//UDA1341 status ADC inverting
#define UDASTATUS1_PDAINV		(0x80|0x08)	//UDA1341 status DAC inverting
#define UDASTATUS1_DBSPD		(0x80|0x04)	//UDA1341 status double speed
#define UDASTATUS1_ADCON		(0x80|0x02)	//UDA1341 status ADC on
#define UDASTATUS1_DACON		(0x80|0x01)	//UDA1341 status DAC on

#define UDADATA0_VOL			0x00		//UDA1341 data0 volume value 6bit

#define L3CLK			        0x100		//GPC8
#define L3DATA			        0x200		//GPC9

void UDA1341_Send(unsigned char data)
{
	int i,j;

	for(i=0;i<8;i++){
		if(data&0x1)
			rPDATC|=L3DATA;
		else
			rPDATC&=~L3DATA;

		rPDATC&=~L3CLK;

		data>>=1;
		for(j=0;j<20;j++);
		rPDATC|=L3CLK;
		for(j=0;j<20;j++);
	}

}

void Init_UDA1341()
{
	rPDATC&=~UDA1341_MODE;
	UDA1341_Send(UDAADDR|UDA_STATUS);

	rPDATC|=UDA1341_MODE;
	UDA1341_Send(UDASTATUS0_RST);

	Delay(1);

	rPDATC&=~UDA1341_MODE;
	UDA1341_Send(UDAADDR|UDA_STATUS);

	rPDATC|=UDA1341_MODE;
	UDA1341_Send(UDASTATUS0_SC384|UDASTATUS0_DC);

	rPDATC&=~UDA1341_MODE;
	UDA1341_Send(UDAADDR|UDA_STATUS);
	rPDATC|=UDA1341_MODE;
	UDA1341_Send(UDASTATUS1_ADCON|UDASTATUS1_DACON);

	Delay(1);
}


//==================================================================================

//解码函数回调,解完一帧调用一次,修改这里输入MP3数据流

int mp3_input_read(unsigned char *buf, int len)
{  
   int l;
   int remain;

   remain=song_size - song_position;  //计算剩余数据  
  
   memcpy(buf, &song_data[song_position],l=(remain>=len)?len: remain);
   song_position+=l; //调整歌曲数据位置

   return l;

}


int main(void)
{   
	ARMTargetInit();	//开发版初始化  

	Uart_Printf("\n         >>>>>>>> NetARM MP3 Audio Test! <<<<<<<<\n");    //向串口输出      
    Init_UDA1341();     //初始化UDA1341

    while(1)
      {
       	 song_position=0;		    //当前要读的歌曲数据位置		
         start_mp3_decode();		//启动MP3解码播放程序
         Delay(1000);
      }

    return (1);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -