|

- 帖子
- 3
- 精华
- 0
- 威望
- 10
- 资源筹码
- 0 元
- 在线时间
- 10 小时
|

USB一次收发8K数据是对的,但是第二次收发同样数据时部分数据就重叠,代码如下,请高手指点~
void USB_SendData (u8 *p_data, u32 num) //数据发送
{
u32 remain = num;
u32 index = 0;
while (remain > 64) //一次最多发送64字节
{
while(GetEPTxStatus(ENDP1) != EP_TX_NAK); //等待发送结束
UserToPMABufferCopy(&p_data[index], ENDP1_TXADDR, 64);
SetEPTxCount(ENDP1, 64);
SetEPTxValid(ENDP1);
index += 64; //计算数组中的偏移
remain -= 64; //计算剩余字节数
}
while(GetEPTxStatus(ENDP1) != EP_TX_NAK); //等待发送结束,发送最后<=64字节的数据
{
UserToPMABufferCopy(&p_data[index], ENDP1_TXADDR, remain);
SetEPTxCount(ENDP1, remain);
SetEPTxValid(ENDP1);
}
/* index = 0;
remain = num;*/
}
void USB_RecieveData (u8 *p_data, u32 num)//数据接收
{
u32 remain = num;
u32 index = 0;
while (remain >128) //一次最多发送128字节
{
while(GetEPRxStatus(ENDP3) != EP_RX_NAK); //等待接收完毕
PMAToUserBufferCopy(&p_data[index], ENDP3_RXADDR, 128);
SetEPRxCount(ENDP3, 128);
SetEPRxValid(ENDP3);
index += 128; //计算偏移和剩余字节数
remain -= 128;
}
while(GetEPRxStatus(ENDP3) != EP_RX_NAK); //等待接收完毕,发送最后<=128字节的数据
{
PMAToUserBufferCopy(&p_data[index], ENDP3_RXADDR, remain);
SetEPRxCount(ENDP3, remain);
SetEPRxValid(ENDP3);
}
index =0;
remain = num;
} |
|