初级会员

- 积分
- 153
- 金钱
- 153
- 注册时间
- 2016-5-22
- 在线时间
- 42 小时
|
1金钱
现在的问题是虚拟串口的发送给主机的的函数,它的指针是达到最大值时,没有跳转回0,导致后面的数都发不出去,现在只可以发在USB_USART_TXFIFO_SIZE之内的数,请问原子哥有没有遇到这情况
void EP2_IN_Callback (void)
{
u16 USB_Tx_ptr;
u16 USB_Tx_length;
if(uu_txfifo2.readptr==uu_txfifo2.writeptr) //无任何数据要发送,直接退出
{
return;
}
if(uu_txfifo2.readptr<uu_txfifo2.writeptr) //没有超过数组,读指针<写指针
{
USB_Tx_length=uu_txfifo2.writeptr-uu_txfifo2.readptr;//得到要发送的数据长度
}else //超过数组了 读指针>写指针
{
USB_Tx_length=USB_USART_TXFIFO_SIZE-uu_txfifo2.readptr;//得到要发送的数据长度
}
if(USB_Tx_length>EP_SIZE) //超过64字节?
{
USB_Tx_length=EP_SIZE; //此次发送数据量
}
USB_Tx_ptr=uu_txfifo2.readptr; //发送起始地址
uu_txfifo2.readptr+=USB_Tx_length; //读指针偏移
if(uu_txfifo2.readptr>=USB_USART_TXFIFO_SIZE) //读指针归零
{
uu_txfifo2.readptr=0;
}
USB_SIL_Write(EP2_IN, &uu_txfifo2.buffer[USB_Tx_ptr], USB_Tx_length);
// SetEPTxStatus(ENDP2,EP_TX_VALID);
}
|
最佳答案
查看完整内容[请看2#楼]
发现问题是EP2 IN CALLBACK 只要它发的数小于64,就会跳出CALLBACK的程序,导致无法发出读指针回到0的数
|