找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1961|回复: 8
收起左侧

STC8H单片机USB端点2发送程序问题

[复制链接]
ID:549545 发表于 2022-5-9 23:08 | 显示全部楼层 |阅读模式
最近在搞STC8H8K64U的USB功能,由官网下的STC8H实验箱程序中的“41-USB键盘设备通过P0口矩阵按键模拟小键盘功能”修改,官网案例中只有一个键盘的功能,只支持端点1上传,但想做一个复合键鼠,就要用到端点2上传数据
原官方案例的端点1数据上传程序为:
                        WriteReg(INDEX, 1);
                        for(i=0;i<8;i++)
                        {
                                WriteReg(FIFO1, HidInput[ i]);
                        }
                        WriteReg(INCSR1, INIPRDY);
改为端点2上传数据:
                        WriteReg(INDEX, 2);
                        for(i=0;i<8;i++)
                        {
                                WriteReg(FIFO2, HidInput[ i]);
                        }
                        WriteReg(INCSR1, INIPRDY);

理论上描述符虽然支持1个端点,但不影响我单片机强制发端点2,但改成端点2上传数据的程序就完全没动静了,中断不进,总线分析仪也抓不到东西,看了好久手册实在找不出原因,所以才来请教各位大神,希望大神们帮我解
工程文件放在附件里面

41-USB键盘设备通过P0口矩阵按键模拟小键盘功能.zip

87.24 KB, 下载次数: 9

回复

使用道具 举报

ID:123289 发表于 2022-5-10 08:56 | 显示全部楼层
先弄清楚:
WriteReg、INDEX、FIFO2、 HidInput[ i]、INCSR1、INIPRDY。
是什么意思,它们对应的内存在哪里?
回复

使用道具 举报

ID:549545 发表于 2022-5-10 09:38 | 显示全部楼层
yzwzfyz 发表于 2022-5-10 08:56
先弄清楚:
WriteReg、INDEX、FIFO2、 HidInput[ i]、INCSR1、INIPRDY。
是什么意思,它们对应的内存在 ...

这个大概清楚,WriteReg,这个要输入两个参数,一个是想要间接访问的寄存器地址,第二个是想要写入的数据;FIFO1和FIFO2是USB端号索引寄存器,往INCSR1写INIPRDY是发送数据,所以整体来看是先往INDEX里面写入2,选择端点2,然后循环8个往FIFO2填入数据,然后设置发送,但我不太清楚为什么改成端点2 之后发不出去
回复

使用道具 举报

ID:685744 发表于 2022-5-10 14:22 | 显示全部楼层
判断条件是和FIFO1时不一样吗
回复

使用道具 举报

ID:123289 发表于 2022-5-10 16:18 | 显示全部楼层
CPU中有几个USB。
每个USE占用的内存缓冲有多少?对应的物理地址在何处?
回复

使用道具 举报

ID:549545 发表于 2022-5-10 18:03 | 显示全部楼层
yzwzfyz 发表于 2022-5-10 16:18
CPU中有几个USB。
每个USE占用的内存缓冲有多少?对应的物理地址在何处?

一共6个端点,这个和物理地址关系不大,我只需要操作间接操作寄存器就能写进去,缓存是0-3收发in/out是64,4-5的in/out是128/256,但是,和这些都没关系,因为用间接操作寄存器就能操作,我都笑死了,我改成两个端点的描述,所有有关端点1的操作复制一次,居然就能发出去了,还是感谢大哥回帖了^v^已经完美模拟多点触控了
回复

使用道具 举报

ID:71233 发表于 2023-1-14 13:51 | 显示全部楼层
还是看不懂,感觉这USB功能好难玩的。
回复

使用道具 举报

ID:1034262 发表于 2023-1-14 21:18 | 显示全部楼层
STC官方有鼠标键盘复合的例子的。
回复

使用道具 举报

ID:71233 发表于 2023-1-19 10:08 | 显示全部楼层
炮姐我老婆 发表于 2022-5-10 18:03
一共6个端点,这个和物理地址关系不大,我只需要操作间接操作寄存器就能写进去,缓存是0-3收发in/out是64 ...

请问楼主是怎样实现的,我怎么老是操作不成功
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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