关于USB寄存器的使用问题1
本帖最后由 rm543 于 2023-7-27 16:10 编辑在STC官方USB双串口例程里, SET_CONFIGURATION() 的过程中有如下代码:
usb_write_reg(INDEX, 1);
usb_write_reg(INCSR2, INMODEIN);
usb_write_reg(INMAXP, EP1IN_SIZE / 8);
当中第二句,对 INCSR2 寄存器的 MODE 位进行了写 IN 模式的操作,不知道此操作的具体作用是什么?
下一句为设置 IN 端点最大数据包大小 INMAX ,此寄存器并无描述需要先设置 INCSR2 的 MODE 位才能进行操作。
且在设置 OUT 端点的过程中亦是先往 INCSR2 中写入了 MODE 位,所以不明白此操作的用意。
望能有解答。
(同时提及一下 INCSR2 寄存器的 DMA 控制位应标记为无效?)
同样存在疑惑,希望技术人员能解答下,既然INCSR2是IN端点状态,为何MODE指示位还有2种可能值呢,不理解
yefeng 发表于 2023-11-23 16:57
同样存在疑惑,希望技术人员能解答下,既然INCSR2是IN端点状态,为何MODE指示位还有2种可能值呢,不理解
这个问题在芯片刚出来时我也问过内部 R&D
他们给我的答复是:
我们的USB端点都是双向的
IN端点和OUT端点的使能都是通过INCSR2中的MODE位进行设置的 usb_write_reg(INCSR2, INMODEIN);
这句的作用是告诉USB模块,使能的是EP1的IN端点还是OUT端点
usb_write_reg(INMAXP, EP1IN_SIZE / 8);
这句是设置IN端点的大小
IN和OUT端点的使能都通过寄存器INCSR2中的MODE位进行设置
硬件确实就是这样设计的 zhp 发表于 2023-11-23 17:30
这个问题在芯片刚出来时我也问过内部 R&D
他们给我的答复是:
我们的USB端点都是双向的
意思就是说,我可以把IN端点当OUT端点用,反过来把OUT当IN使用,还有个问题:既然INCSR2是状态寄存器,那么它应该是只读的,怎么可以写这个寄存器MODE位来设置IN/OUT模式呢? yefeng 发表于 2023-11-23 17:37
意思就是说,我可以把IN端点当OUT端点用,反过来把OUT当IN使用,还有个问题:既然INCSR2是状态寄存器,那 ...
文档里面没有说过INCSR2是只读的状态寄存器
INCSR2是IN endpoint Control Status Register 2
是可读可写的 zhp 发表于 2023-11-23 17:30
这个问题在芯片刚出来时我也问过内部 R&D
他们给我的答复是:
我们的USB端点都是双向的
那大致了解了,只是这个控制位放在这个名称的寄存器里面有点让人迷惑。
页:
[1]