|  | 
 
| 因为课题需要,想实现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的设备信息发送函数(已红色标注),那么程序是可以走通的,确实搞不懂原因,希望论坛的工程师能帮忙解答一下,哪怕提供一些调试思路也非常感谢。
 
 
 
 | 
 |