高级会员

- 积分
- 810
- 金钱
- 810
- 注册时间
- 2016-4-7
- 在线时间
- 123 小时
|
本帖最后由 xujian468 于 2016-5-26 17:12 编辑
修改了原子哥的部分程序,把固定的一组字节数据发送给上位机,使用COM口接收,发现发送1~63个字节都能发送成功(上位机完整接收数据),发送64个字节或者以上就需要发送很多次上位机才能接收到,这是啥原因?
for(i=0;i<63;i++)
{
USB_USART_SendData(0xaa);//发送63个字节的0xaa
}
这个发送一次,上位机就能接收到
for(i=0;i<64;i++)
{
USB_USART_SendData(0xaa);//发送64个字节的0xaa
}
需要ARM发送很多次上位机才能接收到
这是啥原因?
跟下面这部分代码有关吗?
void EP1_IN_Callback (void)
{
u16 USB_Tx_ptr;
u16 USB_Tx_length;
if(uu_txfifo.readptr==uu_txfifo.writeptr) //无任何数据要发送,直接退出
{
return;
}
if(uu_txfifo.readptr<uu_txfifo.writeptr) //没有超过数组,读指针<写指针
{
USB_Tx_length=uu_txfifo.writeptr-uu_txfifo.readptr;//得到要发送的数据长度
}else //超过数组了 读指针>写指针
{
USB_Tx_length=USB_USART_TXFIFO_SIZE-uu_txfifo.readptr;//得到要发送的数据长度
}
if(USB_Tx_length>VIRTUAL_COM_PORT_DATA_SIZE) //超过64字节?
{
USB_Tx_length=VIRTUAL_COM_PORT_DATA_SIZE; //此次发送数据量
}
USB_Tx_ptr=uu_txfifo.readptr; //发送起始地址
uu_txfifo.readptr+=USB_Tx_length; //读指针偏移
if(uu_txfifo.readptr>=USB_USART_TXFIFO_SIZE) //读指针归零,1024
{
uu_txfifo.readptr=0;
}
UserToPMABufferCopy(&uu_txfifo.buffer[USB_Tx_ptr], ENDP1_TXADDR, USB_Tx_length);
SetEPTxCount(ENDP1, USB_Tx_length);
SetEPTxValid(ENDP1);
}
|
|