求助 :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,程序就卡住了,这是什么原因,放音的程序就正常。 因为程序是在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]