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 + -
显示快捷键?