2659|2

37

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于DSP开发的问题4 [复制链接]


各位高手,小弟正在基于一款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);

}

最新回复

写SD卡这么耗时的操作还占着个中断,自己找别扭。 别犯这种低级错误。  详情 回复 发表于 2015-8-6 13:08
点赞 关注
 

回复
举报

31

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
写SD卡这么耗时的操作还占着个中断,自己找别扭。
别犯这种低级错误。
 
 

回复

37

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢Ejack1979,那应该把写SD卡的操作放在什么位置呢?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表