关于OTG IP的Cube库函数中,一次OUT传输的流程是这样的:
首先设备端点要准备好接收,即调用USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)。这个操作把端点使能接收;
然后当主机的OUT令牌和相应数据下来之后,会被OTG IP的硬件收发引擎收到所有端点共享的RXFIFO里;触发第一个中断
#1中断: USB_OTG_GINTSTS_RXFLVL
在这里,ISR读取接收fifo中的数据到用户为该端点在应用层分配的接收数组中
紧接着,第二个中断到来:
#2中断:USB_OTG_GINTSTS_OEPINT --> USB_OTG_DOEPINT_XFRC,表示此次OUT transfer结束。在这里Cube library提供给用户回调函数接口HAL_PCD_DataOutStageCallback(hpcd, epnum);用户在这里做他想做的任何和应用程序相关的事情。
|