emo2797 发表于 2010-11-26 19:06:00

求助 :44B0 的IIS音频接口程序 一使能IIS程序就卡住了

void Rec_SmallWave(U32 addr)
{
    unsigned char *pWave;
   

        ChangePllValue(0x69,0x17,0x0);        //MCLK=45.1584MHz <-- 5.6448MHz*8
       
        Uart_Init(45158400,115200);

    pISR_BDMA0=(unsigned)BDMA0_Rec_Done;

    rINTMSK=~(BIT_GLOBAL|BIT_BDMA0);

        pWave=(unsigned char *)addr;
        pWave+=0x28;        //指向wav采样长度
   
    pWave+=4;        //指向wav数据
   
    Uart_Printf("\nsample start:0x%x",pWave);
   

    Init1341(RECORD);
   
      /****** IIS Initialize ******/
    rIISCON=0x1a;        //Tx DMA enable,Rx idle,prescaler enable
    rIISMOD=0x49;        //Master,Tx,L-ch=low,iis,16bit ch.,codeclk=256fs,lrck=32fs

    rIISPSR=0x33;        //Prescaler_A/B enable, value=3
    rIISFCON=0x500;        //Tx/Rx DMA,Tx/Rx FIFO --> start piling....

    /****** BDMA0 Initialize ******/
    rBDISRC0=(1<<30)+(3<<28)+((U32)rIISFIF);       
    rBDIDES0=(1<<30)+(1<<28)+(U32)pWave;       
    rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(1<<21)+(0<<20)+download_len;
    rBDICNT0 |= (1<<20);//enable
    //iis,reserve,done_int,auto-reload/start,DMA enable,COUNT
    rBDCON0 = 0x0<<2;

    Uart_Printf("\nNow rec the wave file ...");
    Uart_Printf("\nPush any key to exit!!!");
    while(!Uart_GetKey());
    /****** IIS Rx Start ******/
    rIISCON|=0x1;———————————————————————————————就是在这条卡住了
   
    while(!Uart_GetKey());

    /****** IIS Rx Stop ******/
    rIISCON=0x0;    //IIS stop
    rBDICNT0=0x0;   //BDMA stop

    rINTMSK=BIT_GLOBAL;
   
}
44B0 的IIS音频接口程序 实现录音功能 但是一使能IIS,程序就卡住了,这是什么原因,放音的程序就正常。

emo2797 发表于 2010-11-26 21:42:38

因为程序是在44b0的片外sram上,会不会是启动IIS的BDMA以后,DMA取得了总线的控制,CPU失去了总线的控制,所以我改了一下录音程序,去掉了DMA,改为

   rIISCON=0x0a;   
   
    rIISMOD=0x49;   
    rIISPSR=0x33;   
    rIISFCON=0x100;
   
    Uart_Printf("Recording...\n");   
    //--- Rx start   
      
   
    rIISCON |=0x1;   
      
      
    Uart_Printf("Please Speak to MIC and Waiting util End Record...\n");   
    i = 0;j = 0;   
    while(1)   
    {   
      if(rIISCON&(1<<6))   
      {   
         
          for(i=0; i <8; i++)   
          {   
            (unsigned char)*(rec_buf+ j*2) = *(IISFIF);   
            j++;   
          }   
          if(j*2 >= REC_LEN)   
                break;   
      }   
    }
这样使能IIS以后,不卡了。

结果又卡在了if(rIISCON&(1<<6));就是说IIS一直接收不到数据。这又是怎么回事呢
页: [1]
查看完整版本: 求助 :44B0 的IIS音频接口程序 一使能IIS程序就卡住了