Основные режимы работы микроконтроллера

Спящий

Выход по прерыванию RTC

Описание

Если система принудительно тактируется от источника LSI32K и осуществляется вход в спящий режим записью PM→SLEEP_MODE = 0b111, то после выхода из сна по прерыванию RTC бит включения глобальных прерываний MIE в регистре ядра MSTATUS сброшен, из-за чего не вызывается обработчик прерываний.

Ядро некорректно отрабатывает ситуацию, когда прерывание выставляется до появления частоты. При входе в обработчик, для предотвращения повторного входа в обработчик, ядро автоматически снимает MIE. При появлении прерывания от RTC ядро пересинхронизируется на системную частоту (LSI32K), но частота после выхода из спящего режима подается чуть позже.

Обход

Варианты:

  1. Повторно установить бит MIE после выхода из спящего режима;

  2. Обрамить PM→SLEEP c обоих сторон asm volatile ("nop").

Стоп

Выход по сигналу RESET

Описание

После внешнего сброса (RESET) микроконтроллер не выходит из режима, а затем не удается выйти другими способами.

Обход

Нет.

Ожидание

Не выключается OSC32M

Описание

Если отключить кварц OSC32M в регистре CLOCKS_SYS блока WakeUp, а затем войти в режим ожидания, то источник OSC32M включится.

Обход

Если OSC32M не используется и важно снизить энергопотребление, рекомендуется не подключать кварц, а вывод OSC32M_XI соединить с GND.