angalp 发表于 2024-11-27 09:58:12

USB-CDC相关代码请教

代码是AI8H的USB-CDC例程代码
#ifdef EN_EP1OUT
void usb_out_ep1()
{
    BYTE csr;
    BYTE cnt;

    usb_write_reg(INDEX, 1);
    csr = usb_read_reg(OUTCSR1);
    if (csr & OUTSTSTL)
    {
      usb_write_reg(OUTCSR1, OUTCLRDT);
    }
    if (csr & OUTOPRDY)
    {
      cnt = usb_read_reg(OUTCOUNT1);//读出最后接收到多少字节,并赋值给cnt
      while (cnt--)
      {
            RxBuffer = usb_read_reg(FIFO1);//将FIFO1寄存器数据给到RxBuffer数组
      }
      if (RxWptr - RxRptr >= 256 - EP1OUT_SIZE)//EP1OUT_SIZE=64字节
      {
            UsbOutBusy = 1;
      }
      else
      {
            usb_write_reg(OUTCSR1, 0);
      }
    }
}
#endif

以上这段代码会进入USB中断,请问,如果是接收100字节,端点又只有64字节,是不是这个函数会进入2次中断,接收完100字节呢?
cnt = usb_read_reg(OUTCOUNT1);//读出最后接收到多少字节,并赋值给cnt   
USB库例程的stc32_stc8_usb.h里OutNumber变量是不是读取的usb_read_reg(OUTCOUNT1); 呢?


AI-32位8051 发表于 2024-11-27 10:28:56

【新提醒】32G12K128超级简单的USB-CDC虚拟串口应用及不停电下载(中断模式+查询模式) - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 国芯技术交流网站 - AI32位8051交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=870&highlight=%E8%B6%85%E7%BA%A7%E7%AE%80%E5%8D%95USB&page=1&extra=#pid4981

DebugLab 发表于 2024-11-27 10:43:59

大于端点长度会被拆分,应该是进一次中断接收64字节,再进入中断接收100-64=36字节

angalp 发表于 2024-11-27 11:02:24

DebugLab 发表于 2024-11-27 10:43
大于端点长度会被拆分,应该是进一次中断接收64字节,再进入中断接收100-64=36字节 ...

我也是这么想的,可是USB库里的OutNumber相当于例程里的那个变量呢?
页: [1]
查看完整版本: USB-CDC相关代码请教