Основные режимы работы микроконтроллера
Спящий
Выход по прерыванию RTC
Описание
Если система принудительно тактируется от источника LSI32K и осуществляется вход в спящий режим записью PM→SLEEP_MODE = 0b111, то после выхода из сна по прерыванию RTC бит включения глобальных прерываний MIE в регистре ядра MSTATUS сброшен, из-за чего не вызывается обработчик прерываний.
Ядро некорректно отрабатывает ситуацию, когда прерывание выставляется до появления частоты.
При входе в обработчик, для предотвращения повторного входа в обработчик, ядро автоматически снимает MIE. При появлении прерывания от RTC ядро пересинхронизируется на системную частоту (LSI32K), но частота после выхода из спящего режима подается чуть позже.
Обход
Варианты:
-
Повторно установить бит
MIEпосле выхода из спящего режима; -
Обрамить
PM→SLEEPc обоих сторон asm volatile ("nop").