怎样既能保证报警音乐正常播放,又能保证语音数据存储至SD卡中

2019-07-15 19:30发布

各位高手,小弟正在基于一款DSP芯片(TMS320F28335)开发应用程序,具体任务是:采集语音信息、通过串口控制播放采集的语音或者播放报警音乐,存储采集的语音数据至SD卡。采集语音、播放语音和播放报警音乐是在一个MCBSP中断处理程序中实现的,串口接收控制命令是在串口接收中断处理程序中实现的,存储语音至SD卡是在一个定时器0中断程序中实现的。为了确保及时将语音数据写入SD卡中,在存储语音的中断程序中调用了f_sync函数。测试的时候发现,报警音乐的播放变得断断续续的。去掉f_sync函数,播放就正常了,但是,语音数据又无法写入SD卡中。请教各位高手:怎样既能保证报警音乐正常播放,又能保证语音数据存储至SD卡中。谢谢各位了。部分代码如下:
Main函数中的主循环:
while(1)
{
     for(temp=30000;temp>0;temp-=100)
    {
            for(i=0;i<2;i++)
            {
             y=5000;
                delay(temp);
             y=-5000;
                delay(temp);
            }
    }
}
MCBSP中断处理子程序:
interrupt void  ISRMcbspSend(void)
{
      PieCtrlRegs.PIEACK.all =PIEACK_GROUP6;
      temp_audio=McbspaRegs.DRR1.all;


      DA_rptr++;
      if(DA_rptr>=500)
            DA_rptr=0;

      ADbuf[DA_rptr]=temp_audio;   //保存录音数据
      if(play_mode==0)
        McbspaRegs.DXR1.all = y;
                   //警报声的幅值
      else
        McbspaRegs.DXR1.all = temp_audio;        //放音
}
串口接收中断处理子程序:
interrupt void  ISRSciRecv(void)
{
    Uint16 ReceivedChar;


    PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;     /*当中断9组中有中断被发送至CPU,则其他中断阻塞*/
    ReceivedChar = ScibRegs.SCIRXBUF.all;     /*读出2字节数据*/
    if (ReceivedChar == 'e')
    {
         play_mode = 1;
    }
    else if (ReceivedChar == 'd')
    {
         play_mode = 0;
    }
    else
    {
         ;
    }
}
基于定时器中断的SD卡写入子程序:
interrupt void ISRtimer0(void)
{
    Uint8 textFileBuffer[2];


   //Acknowledge this interrupt to receive more interrupts from group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;    /*当中断1组有中断被发送至CPU,则其他中断阻塞*/
    CpuTimer0Regs.TCR.bit.TIF=1;               /*定时到了指定时间,标志位置位,写入1清除标志*/      
    CpuTimer0Regs.TCR.bit.TRB=1;               /*重载Timer0的定时数据*/


    /*将语音数据写入SD卡*/
    textFileBuffer[0] = temp_audio &0x00ff;
    textFileBuffer[1] = (temp_audio >> 8)& 0x00ff;
    res= f_write(&fsrc , textFileBuffer , sizeof(textFileBuffer) , &br); /*写入音频数据至SD卡*/      
    if (res != FR_OK)
    {
        asm(" ESTOP0");
    }
    f_sync (&fsrc);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。