| 感谢49的朋友,依照官方论坛网友的回帖,在OTGD_FS_Handle_RxStatusQueueLevel_ISR()中有个寄存器变量未赋初值0,加上后我的问题依旧. 
 小弟经过前几天的测试,发现只有在TxFIFO中有数据的时候,主机连续OUT几次后再IN,stm32会无中断产生.
 所以我在stm32每次接收到主机的OUT指令后,用OTGD_FS_FlushTxFifo(0x10)对TxFIFO进行初始化,然后再OTGD_FS_PCD_EP_Write(EP1_IN, RXBUF0, 64)写入,就会解决这个问题,但是OTGD_FS_FlushTxFifo()这个函数非常的耗费时间(具体多长时间没测试),不知道是否有其他的解决办法.
 
 下面是函数原型:
 USB_OTG_Status OTGD_FS_FlushTxFifo (uint32_t num )
 {
 
 USB_OTG_Status status = USB_OTG_OK;
 __IO USB_OTG_rst_ctl_data greset;
 int count = 0;
 
 greset.d32 = 0;
 greset.b.txfflsh = 1;
 greset.b.txfnum  = num;
 WRITE_REG32( &core_regs.common_regs->rst_ctl, greset.d32 );
 
 do
 {
 greset.d32 = READ_REG32( &core_regs.common_regs->rst_ctl);
 if (++count > 200000)
 {
 break;
 }
 }
 while (greset.b.txfflsh == 1);
 
 /* Wait for 3 PHY Clocks*/
 uDELAY(3);
 
 return status;
 }
 |