貌似这个BUG历来已久,在一些特定情况下,会引起USB稳定性问题。
#define _ClearEP_CTR_RX(bEpNum) (_SetENDPOINT(bEpNum,\
_GetENDPOINT(bEpNum) & 0x7FFF & EPREG_MASK))
#define _ClearEP_CTR_TX(bEpNum) (_SetENDPOINT(bEpNum,\
_GetENDPOINT(bEpNum) & 0xFF7F & EPREG_MASK))
引发BUG的条件:
USB非中断操作,并且使用同一个端口的输入和输出。
中断方式操作的话,由于处理速度非常快,一般不会发生问题。
引发原因:
_ClearEP_CTR_RX和_ClearEP_CTR_TX意外清零CTR_TX和CTR_RX。
有问题的宏都贴出来了,看不懂打PP。 |