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