104ad0aafb95001d1c0dbafd18b3dbe2
来自「在开发FPGA上比较有用」· 代码 · 共 710 行 · 第 1/2 页
TXT
710 行
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff3[i]);
i++;
}
}
}else if(num == 1005){
for(i=0;i<0x35000;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff4[i]);
i++;
}
}
}else if(num == 1006){
for(i=0;i<0x52000;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff5[i]);
i++;
}
}
}
}
else{
if(num < 3000)
aic23_station_play(num);
else if(num < 4000)
aic23_warning_play(num);
// 读音频数据到内存
for(i=0;i<AUDIO_BUFF_SIZE2;i++)
{
fread(&audioBuff6[i],4,1,hostfile); //change
// IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff[i]);
}
// 关闭文件
fclose(hostfile);
//播放内存音频数据
for(i=0;i<AUDIO_BUFF_SIZE2;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff6[i]);
i++;
}
}
}
}
/*************************************************
*函数名:aic23_init
*参数:文件名
*功能:初始化
/************************************************/
void aic23_init()
{
int i;
// FILE * hostfile ;
// 屏蔽输入中断
IOWR(FREEDEV_AIC23_0_BASE,0x02,0x03);
// char name[]="/dev/sd_controller_inst/Input_Files/test16.dat";
// 打开主机文件
if(flagaic == 0){
printf("读取音频1:\n");
hostfile = fopen("/dev/sd_controller_inst/Input_Files/ZhangAiWu_150cm.dat", "r");
for(i=0;i<AUDIO_BUFF_SIZE;i++)
{
fread(&audioBuff[i],4,1,hostfile);
}
fclose(hostfile);
// else if(num == 2)
printf("读取音频2:\n");
hostfile = fopen("/dev/sd_controller_inst/Input_Files/ZhangAiWu_200cm.dat", "r");
for(i=0;i<AUDIO_BUFF_SIZE;i++)
{
fread(&audioBuff1[i],4,1,hostfile);
}
fclose(hostfile);
// else if(num == 3)
printf("读取音频3:\n");
hostfile = fopen("/dev/sd_controller_inst/Input_Files/ZhangAiWu_250cm.dat", "r");
for(i=0;i<AUDIO_BUFF_SIZE;i++)
{
fread(&audioBuff2[i],4,1,hostfile);
}
fclose(hostfile);
// else if(num == 4)
printf("读取音频4:\n");
hostfile = fopen("/dev/sd_controller_inst/Input_Files/ZhangAiWu_300cm.dat", "r");
for(i=0;i<AUDIO_BUFF_SIZE;i++)
{
fread(&audioBuff3[i],4,1,hostfile);
}
fclose(hostfile);
printf("读取音频5:\n");
hostfile = fopen("/dev/sd_controller_inst/Input_Files/menuintroduce.dat", "r");
for(i=0;i<0x35000;i++)
{
fread(&audioBuff4[i],4,1,hostfile);
}
fclose(hostfile);
printf("读取音频6:\n");
hostfile = fopen("/dev/sd_controller_inst/Input_Files/help_mic_intro.dat", "r");
for(i=0;i<0x55000;i++)
{
fread(&audioBuff5[i],4,1,hostfile);
}
fclose(hostfile);
flagaic=1;
}
}
/*************************************************
*函数名:sd_init
*参数:文件名
*功能:sd初始化
/************************************************/
void sd_init()
{
int volumes_mounted;
int ret_code = 0;
int fd;
volumes_mounted = sd_fat_mount_all();
if( volumes_mounted <= 0 )
{
ret_code = -1;
printf( " ERROR: Couldn't mount FAT\n" );
}
else
{
// 读文件测试
fd= open("/dev/sd_controller_inst/Input_Files/w.txt","r");
if(fd<0)
{
printf( "open file %s error\n" , SD_CONTROLLER_INST_NAME );
return 0;
}
close(fd);
}
}
/*************************************************
*函数名:dma_init
*参数:文件名
*功能:dma初始化
/************************************************/
void dma_init()
{
int iRet;
iRet=fast_dma_init(
DMA_BASE,
4,
__IO_CALC_ADDRESS_NATIVE(FREEDEV_AIC23_0_BASE, 0x07),
__IO_CALC_ADDRESS_NATIVE(FREEDEV_AIC23_0_BASE, 0x07),
512,
ALTERA_AVALON_DMA_CONTROL_RCON_MSK|ALTERA_AVALON_DMA_CONTROL_WCON_MSK);
//初始化I2C控制器
init_i2c(FREEDEV_I2C_0_BASE);
// 屏蔽音频中断
IOWR(FREEDEV_AIC23_0_BASE,0x02,0x03);
/* 注册音频中断处理函数 */
if (alt_irq_register( FREEDEV_AIC23_0_IRQ, NULL,audio_irq))
{
printf("alt_irq_register audio_irq error\n");
return -1;
}
}
/*************************************************
*函数名:aic23
*参数:文件名
*功能:音频主函数
/************************************************/
void aic23()
{
int flag=1;
unsigned char ch;
static int irq_flag=0;
//sd卡初始化
sd_init();
// 初始化DMA参数
dma_init();
//复位音频处理芯片
// aic23_reset();
// 屏蔽输入中断
IOWR(FREEDEV_AIC23_0_BASE,0x02,0x03);
//TLV320AIC23常规工作参数设置
// aic23_normal_setup();
}
/*************************************/
/*以下为测试程序
/*可删
/*************************************/
int ShowSelect(char *prompt,char sel1, char sel2 )
{
static char entry[3];
static char ch = 23;
while(1){
printf("----------------------------------\n");
printf("%s",prompt);
printf("\n请选择(%c-%c): [回车确认]",sel1,sel2);
fgets(entry, sizeof(entry), stdin);
if(sscanf(entry, "%c\n", &ch))
{
if( ch == sel1 || ch == sel2)
break;
}
}
return ch;
}
void aic23_play_test()
{
int i,num;
// FILE * hostfile;
unsigned int v1;
int flag=1;
char ch;
while(flag == 1)
{
hostfile = fopen("/dev/sd_controller_inst/Input_Files/silence_init.dat", "r");
/* for(i=0;i<0x56000;)
{
//读音频外设状态
// v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
// if(!(v1 & 0x01))
// {
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff[i]);
i++;
// }
}*/
printf("请输入歌名:");
scanf("%d",&num);
if(num<2000)
{
if(num == 1001)
{
for(i=0;i<AUDIO_BUFF_SIZE;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff[i]);
i++;
}
// hostfile = fopen("/dev/sd_controller_inst/Input_Files/ahead16.dat", "r");
}
}else if(num == 1002)
{
for(i=0;i<AUDIO_BUFF_SIZE;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff1[i]);
i++;
}
// hostfile = fopen("/dev/sd_controller_inst/Input_Files/left16.dat", "r");
}
}else if(num == 1003){
for(i=0;i<AUDIO_BUFF_SIZE;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff2[i]);
i++;
}
// hostfile = fopen("/dev/sd_controller_inst/Input_Files/right16.dat", "r");
}
}else if(num == 1004){
for(i=0;i<AUDIO_BUFF_SIZE;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff3[i]);
i++;
}
}
}
}
else{
if(num < 3000)
aic23_station_play(num);
else if(num < 4000)
aic23_warning_play(num);
// 读音频数据到内存
for(i=0;i<AUDIO_BUFF_SIZE2;i++)
{
fread(&audioBuff5[i],4,1,hostfile); //change
// IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff5[i]);
}
// 关闭文件
fclose(hostfile);
// 播放内存音频数据
for(i=0;i<AUDIO_BUFF_SIZE2;)
{
//读音频外设状态
v1=IORD(FREEDEV_AIC23_0_BASE,0x03);
// 输出FIFO不为满
if(!(v1 & 0x01))
{
IOWR(FREEDEV_AIC23_0_BASE,0x07,audioBuff5[i]);
i++;
}
}
}
ch=ShowSelect( "继续放音?y OR n \n",'y','n' );
if(ch == 'n') flag=0;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?