rm543 发表于 2023-7-27 16:10:30

关于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 控制位应标记为无效?)


yefeng 发表于 2023-11-23 16:57:50

同样存在疑惑,希望技术人员能解答下,既然INCSR2是IN端点状态,为何MODE指示位还有2种可能值呢,不理解


zhp 发表于 2023-11-23 17:30:12

yefeng 发表于 2023-11-23 16:57
同样存在疑惑,希望技术人员能解答下,既然INCSR2是IN端点状态,为何MODE指示位还有2种可能值呢,不理解


这个问题在芯片刚出来时我也问过内部 R&D
他们给我的答复是:
我们的USB端点都是双向的
IN端点和OUT端点的使能都是通过INCSR2中的MODE位进行设置的

zhp 发表于 2023-11-23 17:33:49

usb_write_reg(INCSR2, INMODEIN);
这句的作用是告诉USB模块,使能的是EP1的IN端点还是OUT端点

usb_write_reg(INMAXP, EP1IN_SIZE / 8);
这句是设置IN端点的大小

IN和OUT端点的使能都通过寄存器INCSR2中的MODE位进行设置
硬件确实就是这样设计的

yefeng 发表于 2023-11-23 17:37:16

zhp 发表于 2023-11-23 17:30
这个问题在芯片刚出来时我也问过内部 R&D
他们给我的答复是:
我们的USB端点都是双向的


意思就是说,我可以把IN端点当OUT端点用,反过来把OUT当IN使用,还有个问题:既然INCSR2是状态寄存器,那么它应该是只读的,怎么可以写这个寄存器MODE位来设置IN/OUT模式呢?

zhp 发表于 2023-11-23 17:41:42

yefeng 发表于 2023-11-23 17:37
意思就是说,我可以把IN端点当OUT端点用,反过来把OUT当IN使用,还有个问题:既然INCSR2是状态寄存器,那 ...

文档里面没有说过INCSR2是只读的状态寄存器
INCSR2是IN endpoint Control Status Register 2
是可读可写的

rm543 发表于 2024-3-5 11:14:18

zhp 发表于 2023-11-23 17:30
这个问题在芯片刚出来时我也问过内部 R&D
他们给我的答复是:
我们的USB端点都是双向的


那大致了解了,只是这个控制位放在这个名称的寄存器里面有点让人迷惑。
页: [1]
查看完整版本: 关于USB寄存器的使用问题1