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