来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
U32 USBD_WriteEP (U32 EPNum, U8 *pData, U32 cnt)
{
/* Double Buffering is not yet supported */
U32 num, *pv, n;
U16 statusEP;
static uint32_t time,send_cnt;
static uint32_t max,min = (uint32_t)-1;
static uint32_t curr_send_cnt;
curr_send_cnt = cnt;
if(EPNum == 0x82)
{
if(time == 0)
{
time = DWT->CYCCNT;
if(time==0)time=1;
}
send_cnt += cnt;
if(time != 0)
{
if((DWT->CYCCNT - time)/72 > 1000000)
{
time = DWT->CYCCNT;
if(send_cnt > max)
{
max = send_cnt;
}
if(send_cnt < min)
{
min = send_cnt;
}
send_cnt = 0;
}
}
}
num = EPNum & 0x0F;
pv = (U32 *)(USB_PMA_ADDR + 2 * ((pBUF_DSCR + num)->ADDR_TX));
printf("\nw%04x\n", (EPNum << 8) |cnt);
for (n = 0; n < (cnt + 1) / 2; n++)
{
*pv++ = *((__packed U16 *)pData);
// if(n < 8)
{
printf("%x ", (uint32_t)*(U8 *)pData);
printf("%x ", (uint32_t)*((U8 *)pData+1));
}
pData += 2;
}
printf("\n");
// printf("--\n");
(pBUF_DSCR + num)->COUNT_TX = cnt;
statusEP = EPxREG(num);
if ((statusEP & EP_STAT_TX) != EP_TX_STALL)
{ /* do not make EP valid if stalled */
EP_Status(EPNum, EP_TX_VALID);
}
return (cnt);
}
-THE END-
如果对你有帮助,记得转发分享哦
微信公众号「鱼鹰谈单片机」
每周一更单片机知识
长按后前往图中包含的公众号关注
鱼鹰,一个被嵌入式耽误的畅销书作家
个人微信「EmbeddedOsprey」
长按后打开对方的名片关注