找回密码
 立即注册
查看: 718|回复: 16

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

[复制链接]

该用户从未签到

2

主题

12

回帖

64

积分

注册会员

积分
64
发表于 2023-4-20 14:55:49 | 显示全部楼层 |阅读模式
如题。


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

部分代码如下:
  1. void usb_out_ep4() using 1
  2. {
  3.     BYTE csr;
  4.     BYTE cnt;
  5.     u8 i = 0;
  6.     usb_write_reg(INDEX, 4);
  7.     csr = usb_read_reg(OUTCSR1);
  8.     if (csr & OUTSTSTL) {
  9.         usb_write_reg(OUTCSR1, OUTCLRDT);
  10.     }
  11.     if (csr & OUTOPRDY) {
  12.                                 LED = ~LED; // 进中断应该看到LED亮起/熄灭
  13.         cnt = usb_read_reg(OUTCOUNT1);
  14.         if (Uart3TxBufSel) { // previous using buffer1
  15.             while (i < cnt) {
  16.                 Uart3TxBuffer2[i++] = usb_read_reg(FIFO4);
  17.             }
  18.                                                 //cnt = usb_bulk_intr_out(Uart3TxBuffer2,4);
  19.             UART3_DMA_Transmit(Uart3TxBuffer2, cnt);
  20.         } else {
  21.             while (i < cnt) {
  22.                 Uart3TxBuffer[i++] = usb_read_reg(FIFO4);
  23.             }
  24.                                                 //cnt = usb_bulk_intr_out(Uart3TxBuffer,4);
  25.             UART3_DMA_Transmit(Uart3TxBuffer, cnt);
  26.         }
  27.         Uart3TxBufSel = ~Uart3TxBufSel;
  28.         Ep4OutBusy = 1;
  29.     }
  30. }
复制代码


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

使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 101 天

    [LV.6]常住居民II

    41

    主题

    1016

    回帖

    6971

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6971
    QQ
    发表于 2023-4-20 15:20:28 | 显示全部楼层
    1.png

    这个寄存器配置了吗
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    12

    回帖

    64

    积分

    注册会员

    积分
    64
     楼主| 发表于 2023-4-20 16:06:31 | 显示全部楼层
    本帖最后由 scutly 于 2023-4-20 16:09 编辑

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

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

    使用道具 举报

    该用户从未签到

    3

    主题

    51

    回帖

    473

    积分

    中级会员

    积分
    473
    发表于 2023-4-20 16:53:04 | 显示全部楼层
    接收处理完没有给告知"已经接收完毕",usb不会再继续接收了,也就没有接收中断发生。
    给OUTCSR1写0
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    12

    回帖

    64

    积分

    注册会员

    积分
    64
     楼主| 发表于 2023-4-20 17:49:01 | 显示全部楼层
    晓奇 发表于 2023-4-20 16:53
    接收处理完没有给告知"已经接收完毕",usb不会再继续接收了,也就没有接收中断发生。
    给OUTCSR1写0
    ...

    128B以下能接收,说明早就写0了啊。。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    51

    回帖

    473

    积分

    中级会员

    积分
    473
    发表于 2023-4-20 18:17:37 | 显示全部楼层
    我刚试了一下,128缓冲区没事,用8h做的,对比一下

    8h8k64uCDC基础接口128Buffer.zip

    160.65 KB, 下载次数: 37

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    51

    回帖

    473

    积分

    中级会员

    积分
    473
    发表于 2023-4-20 18:24:07 | 显示全部楼层
    本帖最后由 晓奇 于 2023-4-20 18:32 编辑

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

    使用道具 举报

    该用户从未签到

    552

    主题

    9532

    回帖

    1万

    积分

    管理员

    积分
    14106
    发表于 2023-4-20 18:49:41 | 显示全部楼层
    感谢晓奇兄为8051世界添砖加瓦
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    12

    回帖

    64

    积分

    注册会员

    积分
    64
     楼主| 发表于 2023-4-20 19:07:07 来自手机 | 显示全部楼层
    本帖最后由 scutly 于 2023-4-20 19:23 编辑

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

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

    使用道具 举报

    该用户从未签到

    3

    主题

    51

    回帖

    473

    积分

    中级会员

    积分
    473
    发表于 2023-4-20 19:41:43 | 显示全部楼层
    本帖最后由 晓奇 于 2023-4-20 19:46 编辑

    把你的工程发出来看看,不了解全部没法说.
    我这个工程是用示波器代码简化过来的,任务单一比较好处理,收发也很直观
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 02:18 , Processed in 0.073015 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表