在407的虚拟串口程序中有看到,将端点配置为批量传输端点。
在IN端点类传输完成中断中调用函数USB_OTG_EPStartXfer中有2步骤操作,一是使能端点DIEPCTL的EPENA位,使能端点传输;二是 在判断为同步传输的情况下 执行发送数据USB_OTG_WritePacket函数 完成数据到DFIFO压栈操作发送数据。
据我后面的测试 注释掉同步传输代码,能正常IN数据返还。
那么的第一步操作 【使能端点的DIEPCTL寄存器,USB自动会发送IN数据吗??
没看到相关解释,这是硬件机制吗? 使能了端点传输,然后确定了此次传输的xfer的地址和传输大小。自动传输?
自动写入DFIFO 而不是调用USB_OTG_WritePacket函数写入DFIFO?
- depctl.b.cnak = 1;
- depctl.b.epena = 1;//使能端点 启动数据发送 在这的数据也就直接发送 ,因为前面已经规划好此次IN传输的数据大小在DIEPCTL寄存器
- USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPCTL, depctl.d32); //写到中断控制寄存器 使能端点x的中断控制寄存器
- //"应用程序将此位置 1 以在端点上启动数据发送。
- if (ep->type == EP_TYPE_ISOC)
- {
- USB_OTG_WritePacket(pdev, ep->xfer_buff, ep->num, ep->xfer_len); //将ep->xfer_buff及其后cnt数据 给到发送DFIFO入栈
- }
复制代码
|