lizhuohui88 发表于 2012-5-11 19:30:32

新手求助!关于LPC1788 用UDA1380播放WAV问题

在NXP申请了块LPC1788的板子。。。自带UDA1380。。
根据官方例程USBHostLite 驱动U盘。把WAV(44.1KHZ 16位) 文件放入U盘。
FCLK=120M
PCLK=60M
分频得到MCLK =15M
TXBITRATE=10
直接把音频的数据存在数组里播放播放正常 说明 UDA1380初始化、位速率设置应该没问题。。

然后直接播放存在U盘里的WAV文件   以下播放程序。。根据Lengxue童鞋的修改的。。。在这里感谢Lengxue的无私奉献。
         NVIC_EnableIRQ(I2S_IRQn);//触发深度已设置为4字节                                                                                                         
         while(1)                                                                                                                        // 读音频数据并播放
         {      
                if (flag_buff1empty)
               {                        
                        bytes_read = FILE_Read(fdr, buff1, MAX_BUFFER_SIZE);
                                                          flag_buff1empty = 0;
   
                           //bytes_read 返回分块读取的数据长度 MAX_BUFFER_SIZE 读取的最大长度 既bytes_read <=MAX_BUFFER_SIZE                                                                  
                                  if (bytes_read<MAX_BUFFER_SIZE)                                                                              // 文件结束,结束循环
                         {
                                 break;
                         }
               }               
                if (flag_buff2empty)
               {
                         bytes_read = FILE_Read(fdr, buff2, MAX_BUFFER_SIZE);
                         flag_buff2empty = 0;

                        if (bytes_read <MAX_BUFFER_SIZE)                                                                              // 文件结束,结束循环
                         {
                                 break;
                         }
               }
         }
         NVIC_DisableIRQ(I2S_IRQn);                                          
FILE_Close(fdr);                                                                                                                  
}
void I2S_IRQHandler (void)
{         char i;
         LPC_GPIO2->CLR |= (1 << 25);
         if (buff1En == 0)
         {
               for (i = 0; i < 4; i++, buffSndCnt1 += 4)
               {
                         LPC_I2S->TXFIFO = (buff1 << 0)                         /*写FIFO数据 32字节          */
                                             | (buff1 << 8)
                                             | (buff1 << 16)
                                             | (buff1 << 24);                                                                                 
                }      
               if (buffSndCnt1 == MAX_BUFFER_SIZE )
               {
                        flag_buff1empty = 1;                   // Buff1 kong
                        buffSndCnt1   = 0;                                        // buffSndCnt1清0
                         buff1En =~buff1En;
               }
      }
         else
         {
         for (i = 0; i < 4; i++, buffSndCnt2 += 4)
               {
                         LPC_I2S->TXFIFO = (buff2 << 0)                     
                                             | (buff2 << 8)
                                             | (buff2 << 16)
                                             | (buff2 << 24);                                                
                }         
      if (buffSndCnt2 == MAX_BUFFER_SIZE)
               {
                        flag_buff2empty = 1;                   // Buff1 kong
                        buffSndCnt2   = 0;                                        // buffSndCnt1清0
                        buff1En =~buff1En;
               }         
         }
}
运行结果: 杂音严重。
   MAX_BUFFER_SIZE越小 杂音相对少 但声音被拖长。。。
个人理解只要从U盘读取块数据速度大于 播放块数据的速度, 结果应该和MAX_BUFFER_SIZE 无关。。
但显然U盘读取速度相对来说快的多。。。。。      COPY 一个10M文件只需几秒
小弟有点理解不能。请各位高手指教!

jun_huang 发表于 2012-7-31 16:20:01

哥们!能把你的代码上传吗?
页: [1]
查看完整版本: 新手求助!关于LPC1788 用UDA1380播放WAV问题