OpenEdv-开源电子网

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

stm32驱动VS1003占用时间长

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2012-8-6
在线时间
6 小时
发表于 2017-6-12 18:10:52 | 显示全部楼层 |阅读模式
1金钱
找过好多个VS1003的驱动程序,基本上是要全部发完音频后才有声音播放出来,但是这样的话其它需要驱动的程序会卡死,比如说7段数码管程序等就会停顿住, 增加SPI的速度又不行.
使用的驱动程序如下
void MP3_Play(const u8 *add)
        {
                FRESULT res;
                char j = 0;
                u8 add2[17];
                f_mount(0, &fs);
                memcpy((u8 *)add2,(u8 *)add,17);
                res = f_open( &fsrc,  (const XCHAR*)add2, FA_OPEN_EXISTING | FA_READ ); /* 以只读方式打开 */                       
                br = 1;                                                         // br 为全局变量                               
                /* ------------------- 一曲开始 --------------------*/
                while(1)
            {                                                                                        
                        res = f_read( &fsrc, buffer, sizeof(buffer), &br );//SD读取扇区数据       
                        if ( res == FR_OK )//读取成功
                        {       
                               
                                count = 0;/* 512字节完重新计数 */               
                                delay_ms(10);
                                do
                                {        SPI1_SetSpeed(6);//设置SPI的速率为64       
                                        if ( p_MP3_DREQ!= 0 )                  // //等待数据请求为高
                                        {
                                                p_MP3_XDCS(0);// 选中vs1003数据片选
                                                for (j=0; j<32; j++ ) // VS1003的FIFO只有32个字节的缓冲
                                                {                                                                               
                                                    SPI1_WriteReadByte(buffer[count]);//发送数据
                                                        count++;
                                                        //return;
                                                }
                                                p_MP3_XDCS(1);// 选中vs1003数据片选
                                        }
                                }while ( count < 512);                  // SD卡读取一个sector,一个sector为512字节
                        }       
                        if (res != FR_OK ) break;         // 出错或者到了文件尾                               
                        if ( br == 0) break;         //出错或者到了文件尾         
                }
                /* ------------------- 一曲结束 --------------------*/
                f_close(&fsrc);  // 关闭打开的文件
}


有没有什么比较好的方式能避免这个停顿.之后会尝试将VS1003的DREQ引脚用中断,看看效果会不会比较好,在IO口中断中处理发送数据,实验出来后告诉结果.

现在搭的板子有问题,在搞一个PCB.等PCB出来后再实验.




最佳答案

查看完整内容[请看2#楼]

最好用OS,不然就用定时器中断去做那些必须及时处理的事情。比如你的数码管扫描
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-12 18:10:53 | 显示全部楼层
最好用OS,不然就用定时器中断去做那些必须及时处理的事情。比如你的数码管扫描
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-18 15:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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