Workaround:
if (status & HSUSBD_EPINTSTS_TXPKIF_Msk) {
M480_USBD_EP_REG(idx, EP[0].EPINTSTS) = HSUSBD_EPINTSTS_TXPKIF_Msk;
#if VSF_HAL_USBD_TRACE_EN == ENABLED
vsf_trace(0, "ep%d txpkif interrupt.\r\n", idx);
vsf_trace(0, "EPTXCNT=%d,EPDATCNT=%d\r\n",
M480_USBD_EP_REG(idx, EP[0].EPTXCNT),
M480_USBD_EP_REG(idx, EP[0].EPDATCNT) & 0xFFFF);
#endif
// TODO: BUG on ISO EP, will receive TCPKIF even if no data is sent
if (0 == M480_USBD_EP_REG(idx, EP[0].EPDATCNT)) {
m480_usbd_hs_notify(usbd_hs, USB_ON_IN, ep);
}
}
TXPKIF中断里,判断数据缓存是否是空的,是空的才表示发送走了。这里,对于ISO端点,可能没发送走也会触发中断的。