求助关于MP3软解影响中断的问题~

2019-07-20 22:01发布

这两天在做F4上MP3软解(不带UCOS,裸奔的)
在自己的探索板上把原子哥的综合测试里面的MP3解码那一块单独拿出来了,想通过定时器按MP3采样率中断,中断中给DAC发送数据来播放MP3
移植完成后,可以听到音乐(44.1k,128kbps),但是背景音有间断,声音不连贯,用示波器测试定时器的中断频率并不是采样率,而是在低于采样率一些42k左右,并且还在来回跳动,


定时器用的TIM2,中断优先级0,0,并且只有这一个中断程序,中断中只给DAC1写一个值,


后来发现
                                        readptr+=offset;                //MP3读指针偏移到同步字符处.
                                        bytesleft-=offset;                //buffer里面的有效数据个数,必须减去偏移量
                                        err=MP3Decode(mp3decoder,&readptr,&bytesleft,(short*)audiodev.tbuf,0);//解码一帧MP3数据
                                        if(err!=0)
                                        {
                                                printf("decode error:%d ",err);
                                                break;
                                        }
                                        else
                                        {
                                                MP3GetLastFrameInfo(mp3decoder,&mp3frameinfo);        //得到刚刚解码的MP3帧信息
                                                if(mp3ctrl->bitrate!=mp3frameinfo.bitrate)                //更新码率
                                                {
                                                        mp3ctrl->bitrate=mp3frameinfo.bitrate;
                                                }
                                                mp3_fill_buffer((u16*)audiodev.tbuf,mp3frameinfo.outputSamps,mp3frameinfo.nChans);//填充pcm数据

把红字那一句,就是MP3解码的函数注释掉,定时器中断频率就正常了,也不跳变了.
之后修改了程序,改用TIM2的TRGO触发DAC的DMA,噪音消失,应该采样率正常了,但是加入红外遥控的程序,也是原子哥例程的红外程序,用于做歌曲切换,但是发现异常不灵敏,
由于红外程序是TIM1中由捕获和溢出中断做的,就又把红字的MP3解码那一句注释掉了,之后遥控器就灵敏了,
所以怀疑MP3软解码的过程中是不是有影响到STM32的中断系统,比如当中屏蔽了全局中断一类什么的,搞不明白,所以还请大神不吝赐教,谢谢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。