scutly 发表于 2023-4-20 14:55:49

8H8K64U USB OUT端点4 接收长度超过128不能触发中断?

如题。


手册显示,USB OUT4有256字节的FIFO,应该能够接收并产生中断。用这个端点作为USB-CDC Bulk out,描述符写MaxPacketSize <= 0x80时正常,大于0x80就无法触发中断。

部分代码如下:
void usb_out_ep4() using 1
{
    BYTE csr;
    BYTE cnt;
    u8 i = 0;

    usb_write_reg(INDEX, 4);
    csr = usb_read_reg(OUTCSR1);
    if (csr & OUTSTSTL) {
      usb_write_reg(OUTCSR1, OUTCLRDT);
    }
    if (csr & OUTOPRDY) {
                                LED = ~LED; // 进中断应该看到LED亮起/熄灭
      cnt = usb_read_reg(OUTCOUNT1);
      if (Uart3TxBufSel) { // previous using buffer1
            while (i < cnt) {
                Uart3TxBuffer2 = usb_read_reg(FIFO4);
            }
                                                //cnt = usb_bulk_intr_out(Uart3TxBuffer2,4);
            UART3_DMA_Transmit(Uart3TxBuffer2, cnt);
      } else {
            while (i < cnt) {
                Uart3TxBuffer = usb_read_reg(FIFO4);
            }
                                                //cnt = usb_bulk_intr_out(Uart3TxBuffer,4);
            UART3_DMA_Transmit(Uart3TxBuffer, cnt);
      }
      Uart3TxBufSel = ~Uart3TxBufSel;
      Ep4OutBusy = 1;
    }
}

到底是什么问题?项目需要一次性发送>128字节的才可能正常工作。

电子DIY小家 发表于 2023-4-20 15:20:28



这个寄存器配置了吗

scutly 发表于 2023-4-20 16:06:31

本帖最后由 scutly 于 2023-4-20 16:09 编辑

即便配置了也没有用,用STC-ISP工具打开并发送,只能触发一次,就再也不能触发了;用其他串口工具,一次也不能触发。
配置是写INDEX = 4然后OUTMAXP = 32

又发现即便用STC-ISP发送,只要数据量大过配置的MaxPacketSize,就会卡住好一会,中断也不触发。

晓奇 发表于 2023-4-20 16:53:04

接收处理完没有给告知"已经接收完毕",usb不会再继续接收了,也就没有接收中断发生。
给OUTCSR1写0

scutly 发表于 2023-4-20 17:49:01

晓奇 发表于 2023-4-20 16:53
接收处理完没有给告知"已经接收完毕",usb不会再继续接收了,也就没有接收中断发生。
给OUTCSR1写0
...

128B以下能接收,说明早就写0了啊。。

晓奇 发表于 2023-4-20 18:17:37

我刚试了一下,128缓冲区没事,用8h做的,对比一下

晓奇 发表于 2023-4-20 18:24:07

本帖最后由 晓奇 于 2023-4-20 18:32 编辑

128以下能接收,只是上一个任务后有写0,你这里的配置描述、端点定义、端点IN/OUT_SIZE等是否都统一,需要仔细核查
前面的程序用了ep5,刚改成ep4也没事

神农鼎 发表于 2023-4-20 18:49:41

感谢晓奇兄为8051世界添砖加瓦{:4_196:}

scutly 发表于 2023-4-20 19:07:07

本帖最后由 scutly 于 2023-4-20 19:23 编辑

我这里也是128是没事啊,超过128就寄qwq

另外,代码是参考一箭双雕的,描述符基本没改,就动了MaxPacketSize,0x80以下一切正常,0x81或更高就不行了

晓奇 发表于 2023-4-20 19:41:43

本帖最后由 晓奇 于 2023-4-20 19:46 编辑

把你的工程发出来看看,不了解全部没法说.
我这个工程是用示波器代码简化过来的,任务单一比较好处理,收发也很直观
页: [1] 2
查看完整版本: 8H8K64U USB OUT端点4 接收长度超过128不能触发中断?