此帖出自stm32/stm8论坛
最新回复
感谢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;
}
详情
回复
发表于 2010-1-11 10:58
| ||
|
||
| |
|
|
| |
|
|
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
| |
|
|
| |
|
|
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
| |
|
|
此帖出自stm32/stm8论坛
| ||
|
||
| |
|
|
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
| |
|
|
此帖出自stm32/stm8论坛
| ||
|
||
此帖出自stm32/stm8论坛
| ||
|
||
EEWorld Datasheet 技术支持