搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2010-11-26 19:06:00 | 显示全部楼层 |阅读模式
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,程序就卡住了,这是什么原因,放音的程序就正常。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 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一直接收不到数据。这又是怎么回事呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 22:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表