USB在IRC频率为40M和44.2368M时,认不到设备
芯片STC8H8K64U:在对USB读写等相关函数展开处理时发现一个问题:在使用INDEX来选择目标端点0后,读取CSR0寄存器,用40M和44.2368M下载时会认不到设备,选用其它更高或更低IRC正常。具体位置如下图
后反复调试发现在此处加_nop_();可以解决,40M认得到设备。
猜想INDEX为端点索引寄存器,在选定端点0后,是否需要等待端点0相关寄存器到位后才能进行下一步操作?
查看手册发现端点0相关寄存器有(INMAXP )、(CSR0)、( COUNT0)共3个,于是加3个_nop_();屏蔽while (USBADR & 0x80);发现40M也可以认到设备。
提问:1.猜想是否正确?
2.为什么只有40M和44.2368M会出现这个问题?
3.怎么才能得到需要等待的时间,其他端点1到5是否也有相关问题?
可能是BUSY状态没有及时更新,while条件不满足直接跳过了
USB时钟48M,可能会和主时钟之间存在某种关系导致不同步,猜的,不一定对 DebugLab 发表于 2024-8-15 15:18
可能是BUSY状态没有及时更新,while条件不满足直接跳过了
USB时钟48M,可能会和主时钟之间存在某种关系导致 ...
有没查看BUSY状态的方式?主要怕其他端点也有同样的问题 匿0名 发表于 2024-8-16 10:42
有没查看BUSY状态的方式?主要怕其他端点也有同样的问题
像这样就可以,不正常的时候加几个nop DebugLab 发表于 2024-8-16 10:50
像这样就可以,不正常的时候加几个nop
发现端点1,2,3,4,5都有同样的问题。
再问个问题有没USB FIFO连续块读取的例子,目前连续写没问题,连续读就不行
匿0名 发表于 2024-8-22 10:23
发现端点1,2,3,4,5都有同样的问题。
再问个问题有没USB FIFO连续块读取的例子,目前连续写没问题,连 ...
AUTORD=1不行吗? DebugLab 发表于 2024-8-22 11:03
AUTORD=1不行吗?
不行,有没相关测试的例子?
页:
[1]