У меня есть приложение, которое работает только тогда, когда точка останова установлена до записи в регистр. Конкретный uC - это Atmel SAMC21, и проблема, похоже, возникает при записи на периферию GCLK. Я правильно записываю бит GEN, затем устанавливаю CHEN для включения канала. С точкой останова она включена правильно. Без точки останова бит не устанавливается при наблюдении через окно отладки Atmel Studio IO. CAN-периферия этого конкретного канала подключена к зависанию, когда бит не установлен (поскольку он не синхронизирован), но работает нормально, если я устанавливаю точку останова, а затем разрешаю программе продолжать. Их нет другого места в коде, этот бит установлен или проверен, и нет многопоточности.Cortex-M0 + записывает регистр только с точкой останова
Код обижая:
// 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];
Я попытался вставить задержки между двумя записями не повезло. Любая помощь очень ценится в связи с причиной этой проблемы!