Skip to main content
erwin.hoogzaad
Visitor II
September 19, 2018
Question

HAL PCD library F0 v1.9.0 uses wrong transmit count when using double buffering endpoint.

  • September 19, 2018
  • 0 replies
  • 427 views

The code snippet below shows the code handling single and double buffering mode

 /* IN double Buffering*/
 if (ep->doublebuffer == 0U)
 {
 ep->xfer_count = PCD_GET_EP_TX_CNT(hpcd->Instance, ep->num);
 if (ep->xfer_count != 0)
 {
 PCD_WritePMA(hpcd->Instance, ep->xfer_buff, ep->pmaadress, ep->xfer_count);
 }
 }
 else
 {
 if ((PCD_GET_ENDPOINT(hpcd->Instance, ep->num)& USB_EP_DTOG_TX) == USB_EP_DTOG_TX)
 {
 /*read from endpoint BUF0Addr buffer*/
 ep->xfer_count = PCD_GET_EP_DBUF0_CNT(hpcd->Instance, ep->num);
 if (ep->xfer_count != 0U)
 {
 PCD_WritePMA(hpcd->Instance, ep->xfer_buff, ep->pmaaddr0, ep->xfer_count);
 }
 }
 else
 {
 /*read from endpoint BUF1Addr buffer*/
 ep->xfer_count = PCD_GET_EP_DBUF1_CNT(hpcd->Instance, ep->num);
 if (ep->xfer_count != 0U)
 {
 PCD_WritePMA(hpcd->Instance, ep->xfer_buff, ep->pmaaddr1, ep->xfer_count);
 }
 }
 PCD_FreeUserBuffer(hpcd->Instance, ep->num, PCD_EP_DBUF_IN) 
 }
 /*multi-packet on the NON control IN endpoint*/
 ep->xfer_count = PCD_GET_EP_TX_CNT(hpcd->Instance, ep->num);
 ep->xfer_buff+=ep->xfer_count;

In line 4 (single buffering) and lines 15 and 24 (double buffering), the xfer-count is set. In line 33, the transfer count is set again, with the single buffering value!

This topic has been closed for replies.