USB_BULK传输音频文件后,无法用MCASP播放 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4025|回复: 1
打印 上一主题 下一主题

[未解决] USB_BULK传输音频文件后,无法用MCASP播放

[复制链接]

20

主题

48

帖子

211

积分

中级会员

Rank: 3Rank: 3

积分
211
跳转到指定楼层
楼主
发表于 2018-7-3 18:36:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为课题需要,想实现USB_bulk传输接受到音频数据文件后,然后将用查询的方式将数据播放出来,但是实际操作发现,一直卡在MCASP的发送上了,不知道该怎么解决,我的主函数如下:int main(void)
{
    unsigned int i,status;
    g_bUSBConfigured = false;

    for(i=0;i<229396/2;i++)
    {
        toneRaw = (toneRaw1[i*2]) | toneRaw1[i*2+1]<<8;
     }

    // I2C 模块引脚配置
    I2CPinMuxSetup(0);

    // McASP 引脚配置
    McASPPinMuxSetup();

    // DSP 中断初始化
    InterruptInit();

    // USB的中断是可屏蔽中断4,优先级最高
    ConfigureDSPINTCIntUSB();

    // Enable Clocking to the USB controller.
    // 使能对USB控制器的计时
    PSCModuleControl(SOC_PSC_1_REGS,HW_PSC_USB0, 0, PSC_MDCTL_NEXT_ENABLE);
    // USB PHY ON 指USB的物理接口,Chip Configuration 2 Register (CFGCHIP2) Field Descriptions
    // 见OMAP-L138 C6000 DSP+ARM Processor Technical Reference Manual (Rev.A)芯片手册P295页
    HWREG(SOC_USB_0_PHY_REGS) = 0x09F2;


    // 初始化 I2C 接口地址为 AIC31 的地址
    I2CSetup(SOC_I2C_0_REGS, I2C_SLAVE_CODEC_AIC31);
    I2CIntRegister(C674X_MASK_INT5, SYS_INT_I2C0_INT);

     // 初始化 AIC31 音频芯片
      InitAIC31I2S();

     //Delay timer setup
     DelayTimerSetup();

     // Initialize the transmit and receive buffers.
     // 初始化USB BLIK接收和发送数据缓冲区
     USBBufferInit((tUSBBuffer *)&g_sTxBuffer);
     USBBufferInit((tUSBBuffer *)&g_sRxBuffer);

    // Pass our device information to the USB library and place the device
    // on the bus.
    // tUSBDBulkDevice定义的是批量设备的操作参数
    // 包括供应商ID,PID,设备功耗,字符串描述符等
    USBDBulkInit(0, (tUSBDBulkDevice *)&g_sBulkDevice);


    // 初始化 McASP 为查询方式
    InitMcaspPoll();

    // Clear our local byte counters.
    //
    ulRxCount = 0;
    ulTxCount = 0;

    i = 0;
    while(1)
    {
        //数据接收完毕
        if (KeyFlag==10000)
        {
                TestFlag = 22;
                while( !(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY));
                status = McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS);
                if(status & MCASP_TX_STAT_CURRSLOT_EVEN)
                {
                        // 输出右声道数据
                        OutputSample(toneRaw);
                }
                else
                {
                        // 输出左声道数据
                        OutputSample(toneRaw);
                }
                i++;
                if(i >= 229396/2)
                        i = 0;

        }
    }
}


发现程序一直卡在红色部份所示的while循环中,同时如果屏蔽掉USB的设备信息发送函数(已红色标注),那么程序是可以走通的,确实搞不懂原因,希望论坛的工程师能帮忙解答一下,哪怕提供一些调试思路也非常感谢。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

12

主题

169

帖子

731

积分

QQ游客

积分
731
沙发
发表于 2018-7-8 17:48:35 | 只看该作者
您好,请您参考,我们提供的AUDIO_LINE_OUT_POLL例程,通过查询的方式,先实现音频的输出。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-13 03:06 , Processed in 0.036076 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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