zerone 发表于 2021-1-31 09:19:35

usb虚拟串口问题

/*******************************************************************************
* Function Name: EP1_IN_Callback
* Description    :
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void EP1_IN_Callback (void)
{
int32_t len = 0;
   
if (1 == packet_sent)
{
len = USB_SendWriteIndex - USB_SendReadIndex;

if (len > 0)
{
   if(len > VIRTUAL_COM_PORT_DATA_SIZE){len = VIRTUAL_COM_PORT_DATA_SIZE;}
   
   UserToPMABufferCopy((u8 *)(&USB_Sendbuf), ENDP1_TXADDR, len);
   SetEPTxCount(ENDP1, len);
   USB_SendReadIndex += len;
   
   SetEPTxValid(ENDP1);
}
else
{
   packet_sent = 0;
   USB_SendWriteIndex = 0;
   USB_SendReadIndex = 0;
}
}
}

/*******************************************************************************
* Function Name: SOF_Callback / INTR_SOFINTR_Callback
* Description    :
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void SOF_Callback(void)
{
int32_t len = 0;
if(bDeviceState == CONFIGURED)
{
if(0 == packet_sent)
{
   len = USB_SendWriteIndex - USB_SendReadIndex;
   if (len > 0)
   {
    if(len > VIRTUAL_COM_PORT_DATA_SIZE){len = VIRTUAL_COM_PORT_DATA_SIZE;}
   
    UserToPMABufferCopy((u8 *)(&USB_Sendbuf), ENDP1_TXADDR, len);
    SetEPTxCount(ENDP1, len);
    USB_SendReadIndex += len;
   
    SetEPTxValid(ENDP1);
    packet_sent = 1;
   }
   else
   {
    USB_SendWriteIndex = 0;
    USB_SendReadIndex = 0;
   }
}
}
else
{
   packet_sent = 0;
   USB_SendWriteIndex = 0;
   USB_SendReadIndex = 0;
}
}

1. 目前USB发送数据用的是上面这段代码,是在USB中断里执行的,一次最多只能发送64个字节,这个规定能突破吗?
2.因为是在中断里发送数据,所以外部应用程序装载发送数据时,需要关闭一下中断,这个也是影响速度吧,要怎么好呢?

eric2013 发表于 2021-2-1 10:49:19

USB FS是64字节,这个没法突破。

可以中断发送消息给任务,在任务里面处理。
页: [1]
查看完整版本: usb虚拟串口问题