找回密码
 立即注册
查看: 1372|回复: 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字节的才可能正常工作。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

积分
8058
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,就会卡住好一会,中断也不触发。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

积分
487
发表于 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了啊。。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

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

8h8k64uCDC基础接口128Buffer.zip

160.65 KB, 下载次数: 109

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 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或更高就不行了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 18:04 , Processed in 0.152835 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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