我有一个应用程序,它仅在写入寄存器之前设置断点时才有效。特定的 uC 是 Atmel SAMC21,问题似乎出在写入 GCLK 外设时。我正确写入了 GEN 位,然后设置 CHEN 以启用通道。使用断点可以正确启用。如果没有断点,则在通过 Atmel Studio IO 调试窗口观察时不会设置该位。当未设置该位时(因为它没有计时),此特定通道所连接的 CAN 外围设备会挂起,但如果我设置断点然后允许程序继续运行,则工作正常。它们在代码中没有其他位置被设置或检查,并且没有多线程。
违规代码:
// PCHCTRL[26] GCLK_CAN0
GCLK->PCHCTRL[26].bit.GEN = 7; // Generic clock generator 7
GCLK->PCHCTRL[26].bit.CHEN = 1; // The peripheral channel is enabled.
GCLK->PCHCTRL[26].bit.WRTLOCK = 0; // The peripheral channel and the associated generator registers are not locked.
PCHCTRL:
union PCHCTRL {
uint32_t reg;
struct bit {
uint32_t GEN:4;
uint32_t :2;
uint32_t CHEN:1;
uint32_t WRTLOCK:1;
uint32_t :24;
} bit;
} PCHCTRL[41];
我尝试在两次写入之间插入延迟,但没有成功。对于此问题的原因,我们非常感谢您提供任何帮助!