OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3970|回复: 1

清除usb设备txfifo中的数据

[复制链接]

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
发表于 2018-3-5 14:23:05 | 显示全部楼层 |阅读模式
背景:USB设备不能直接操作USB总线,只有USB主机许可才行。USB主机是PC端软件,USB设备是自定义的一个设备,通信过程是:USB主机发送获取设备状态的指令,USB设备回复设备的状态。但如果USB设备超时才回复一个状态,USB主机超时退出,则接收不到状态帧。

则此时USB设备TXFIFO中一直缓存着这一帧,下次USB主机再发送一帧获取状态帧后,USB设备会马上将之前缓存在TXFIFO中的数据应答到USB主机上。这样的状态帧并不是当前的状态。

可以用以下函数进行清除,测试暂时没发现问题:
static void ClearUSBDTxFifo(USB_OTG_CORE_HANDLE *pdev, uint8_t epnum)
{
        USB_OTG_DTXFSTSn_TypeDef  txstatus;
        USB_OTG_DEPCTL_TypeDef           depctl;
        DWORD fifoemptymsk = 0;

        txstatus.d32 = USB_OTG_READ_REG32( &pdev->regs.INEP_REGS[0x7f&epnum]->DTXFSTS);
        depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[0x7f&epnum]->DIEPCTL);
       
        //判断txfifo是否存在数据
        if(txstatus.b.txfspcavail < TX1_FIFO_HS_SIZE)
        {
                g_senderData.abnormal |= USBB_TXFIFO_NOT_EMPTY;
                g_senderData.clearUSBDtxfifo = 1;
               
                //关闭txfifo empty中断
                fifoemptymsk = 0x1 << (0x7f&epnum);
                USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, fifoemptymsk, 0);
                       
                //清空txfifo
                USB_OTG_FlushTxFifo(pdev, epnum & 0x7F);
               
                //关闭端点
                if (depctl.b.epena)
                {
                  depctl.b.epdis = 1;
                  depctl.b.snak = 1;
                }
                else
                {
                  depctl.d32 = 0;
                }
                USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[0x7f&epnum]->DIEPCTL, depctl.d32);
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
 楼主| 发表于 2018-3-17 14:09:02 | 显示全部楼层
STM32 USB库,清除USB缓存,或是清除USB txfifo方法
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 15:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表