标题: STC8H单片机USB端点2发送程序问题 [打印本页]

作者: 炮姐我老婆    时间: 2022-5-9 23:08
标题: STC8H单片机USB端点2发送程序问题
最近在搞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


作者: yzwzfyz    时间: 2022-5-10 08:56
先弄清楚:
WriteReg、INDEX、FIFO2、 HidInput[ i]、INCSR1、INIPRDY。
是什么意思,它们对应的内存在哪里?

作者: 炮姐我老婆    时间: 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 之后发不出去
作者: tian1234    时间: 2022-5-10 14:22
判断条件是和FIFO1时不一样吗
作者: yzwzfyz    时间: 2022-5-10 16:18
CPU中有几个USB。
每个USE占用的内存缓冲有多少?对应的物理地址在何处?
作者: 炮姐我老婆    时间: 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^已经完美模拟多点触控了
作者: lmn2005    时间: 2023-1-14 13:51
还是看不懂,感觉这USB功能好难玩的。
作者: coody_sz    时间: 2023-1-14 21:18
STC官方有鼠标键盘复合的例子的。
作者: lmn2005    时间: 2023-1-19 10:08
炮姐我老婆 发表于 2022-5-10 18:03
一共6个端点,这个和物理地址关系不大,我只需要操作间接操作寄存器就能写进去,缓存是0-3收发in/out是64 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1