📄 main.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 + -