OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4317|回复: 0

stm32cubemx stm32f4 i2s2 发送不能直接发送buffer1,buffer2的数据

[复制链接]

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-8-4 13:39:32 | 显示全部楼层 |阅读模式
BUFF_MAX_SS=1024;

void Audio_Play(uint32_t I2S_AudioFreq)
{   uint16_t res,i=0;
        uint8_t buffer_switch = 1;
        XferCplt = 0;
       
        printf("Welcome to use UDA1380 I2S test:\r\n");

//        UDA1380_Configuration();       

        f_lseek(&fileR, WaveCounter);
    f_read (&fileR, buffer1, BUFF_MAX_SS, &BytesRead);
    f_read (&fileR, buffer2, BUFF_MAX_SS, &BytesRead);

       
        I2S_AudioFreq_Config(I2S_AudioFreq);
  /* Start playing wave */

        res=HAL_I2S_Transmit_DMA(&hi2s2,buffer1, BUFF_MAX_SS/2);       
               
        printf("  >WaveDataLength : %fM\r\n",(float)WaveDataLength/1000/1000);
        while(WaveDataLength != 0)
    {
                while(XferCplt == 0)  //DMA传输完成中断里 XferCplt == 1
                {
                        /* wait for DMA transfert complete */
                        /* You can write some code for operate on UDA1380 */
                }
                XferCplt = 0;

                if(buffer_switch == 0)
                {
                        /* Play data from buffer1 */       
                        HAL_I2S_Transmit_DMA(&hi2s2,buffer_ctl.tmp1, BUFF_MAX_SS);
                        /* Store data in buffer2 */
                        res=f_read (&fileR, buffer2, BUFF_MAX_SS, &BytesRead);
                        for(i=0;i<512;i++)
                        {
                                buffer_ctl.tmp2[i]=buffer2[i];       
                        }                                  
                        buffer_switch = 1;
                }
                else
                {                  
                        /* Play data from buffer2 */
                        HAL_I2S_Transmit_DMA(&hi2s2,buffer_ctl.tmp2, BUFF_MAX_SS);
                        /* Store data in buffer1 */
                        res=f_read (&fileR, buffer1, BUFF_MAX_SS, &BytesRead);
                        for(i=0;i<512;i++)
                        {
                                buffer_ctl.tmp1[i]=buffer1[i];       
                        }                               
                        buffer_switch = 0;
                }
           if(BytesRead!=1024||res!=0)
                {
                break;          
                }
        }
        printf("Transfer Complete\r\n");
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-20 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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