Инструменты пользователя

Инструменты сайта


doc:doclist:sleep

Режимы SLEEP, SLEEPDEEP и STANDBY в 1986VE9x

Ядро Cortex-M3 имеет два режима пониженного энергопотребления SLEEP и SLEEPDEEP. Данные режимы приостанавливают выполнение программы и после выхода из сна выполнение программы продолжается.

Режимы STANDBY и BATTERY ONLY выключают внутреннее питание, поэтому при выходе из этих режимов программа стартует с самого начала.

Режимы SLEEP и SLEEPDEEP

Для перехода процессора в эти режимы используются команды WFI и WFE. WFI и WFE это встроенные функции ядра Cortex, поддерживаемые компиляторами ARM. Бит SLEEPDEEP регистра SCB→SCR определяет в какой именно режим будет переведен процессор этими командами.

Вход и выход из режимов SLEEP и SLEEPDEEP

WFI

WFI - команда перевода процессора в режим сна до возникновения прерывания. Если прерывание не может быть обработано, например, из-за низкого приоритета, то оно не сможет вывести процессор из спящего режима.

Регистры:
BASEPRI – Задает базовый приоритет и запрещает прерывания с меньшим и равным приоритетом.
PRIMASK – Запрещает все прерывания с конфигурируемым приоритетом.

Таблица 1 - Выход из сна после WFI.

WFI PRIMASK Выход из сна Запуск обработчика IRQ
приоритет IRQ > BASEPRI 0 Да Да
приоритет IRQ ⇐ BASEPRI 0 Нет Нет
приоритет IRQ > BASEPRI 1 Да Нет
приоритет IRQ ⇐ BASEPRI 1 Нет Нет

Определение команды в CMSIS

void __WFI(void);

WFE

WFE - команда перевода процессора в режим сна до возникновения события. Под событием подразумевается так же возникновение прерывания, либо сигнал на выводе RXEV (Указан в описании ядра Cortex 3M, в описании Миландр не обнаружен). Возникновение события отражается установкой некоторого бита в каком-то внутреннем регистре ядра Cortex. Если при вызове команды WFE этот бит уже установлен, то процессор сбрасывает этот бит и не входит в режим Sleep, поскольку считает что событие пробуждения уже произошло. Если бит события равен 0, тогда процессор переходит в состояние сна.

Для того чтобы гарантированно уйти в режим сна командой WFE, рекомендуется вызывать ее в цикле. Для программной генерации события используется команда SEV.

Бит SEVONPEND регистра SCB→SCR определяет должно ли прерывание обладать нужным приоритетом, или выход из сна разрешается по событию защелкивания (pending) прерывания.

Таблица 2 - Выход из сна после WFE.

WFE SEVONPEND PRIMASK Выход из сна Запуск обработчика IRQ
приоритет IRQ > BASEPRI 0 0 Да Да
приоритет IRQ ⇐ BASEPRI 0 0 Нет Нет
приоритет IRQ > BASEPRI 0 1 Нет Нет
приоритет IRQ ⇐ BASEPRI 0 1 Нет Нет
приоритет IRQ > BASEPRI 1 0 Да Да
приоритет IRQ ⇐ BASEPRI 1 0 Да Нет
приоритет IRQ > BASEPRI 1 1 Да Нет
приоритет IRQ ⇐ BASEPRI 1 1 Да Нет

Определение команды в CMSIS

void __WFE(void);

void __SEV(void);  // Генерация события

Тактирование в SLEEP и SLEEPDEEP

В описании представлена схема тактирования, которая раскрывает разницу между режимами SLEEP и SLEEPDEEP. При режиме SLEEP отключается тактирование только ядра микроконтроллера, а при режиме SLEEPDEEP отключается также тактирование периферийных устройств. Список периферии тактируемой от HCLK можно посмотреть в описании регистра MDR_RST_CLK→PER_CLOCK.

При выходе из режимов SLEEP и SLEEPDEEP исполнение программы продолжается с точки входа в режим сна. Если при выходе из сна происходит обработка прерывания, то есть возможность после обработки прерывания автоматически вернуться в режим сна. За это отвечает бит SLEEPONEXIT регистра SCR, при выставлении бита в 1 процессор будет уходить в сон без применения команд WFI/WFE. Это необходимо для задач, где процессор почти все время спит, и просыпается только для того чтобы обработать какое-то внешнее прерывание.

Режим SLEEP

  • Могут быть включены все периферийные цифровые и аналоговые блоки
  • Не тактируется ядро, Flash, DMA, ОЗУ и внешняя шина
  • Тактовая частота USB 48МГц
  • Пробуждение от прерываний
  • Динамический ток потребления до 40мА

Режим SLEEPDEEP

  • Могут быть включены только АЦП, ЦАП, Компаратор, PVD, NVIC с тактированием от LSI.
  • Не тактируется ядро, Flash, DMA, ОЗУ и внешняя шина.
  • Пробуждение от прерываний
  • Динамический ток потребления до 2мА.

Режим STANDBY

Микроконтроллер 1986ВЕ9х имеет так же режим Standby. Выход в этот режим осуществляется записью в регистр MDR_BKP→REG_0F бита STANDBY, при этом отключается регулятор питания DUcc.

DUсс вывод осуществляет питание внутренней цифровой части, памяти ОЗУ и Flash-памяти. Это питание формируется внутренним регулятором напряжения из Uсс. В этом режиме рабочим остается только батарейный домен.

В разделе «Батарейный домен и часы реального времени MDR_BKP» описания представлена схема, которая отражает возможности выхода контроллера из режима Standby. Пробуждение возможно либо по сигналу от внешнего вывода WAKEUP, либо по сигналу от «Часов реального времени».

При выходе из данного режима исполнение программы запустится с начала, аналогично сбросу по Reset.

Микроконтроллер должен входить в режим Standby сразу после записи единицы в бит STANDBY. Но вход в Standby может не произойти, если при записи единицы в бит STANDBY возникли или существуют условия выхода из этого режима. Например, на выводе WAKEUP уже 0. Или уже взведен бит ALRF. Так же может быть отключена частота тактирования для батарейного домена и запись в бит не выполнится.

Для выхода в режим Standby используется следующий код:

  MDR_RST_CLK->PER_CLOCK |= (1 << PCLK_EN_BKP);      // включение тактирования батарейного домена
  MDR_BKP->REG_0F |= (1 << BKP_REG_0F_STANDBY_Pos);  // переход в Standby

Внешний вывод WAKEUP является цифровым входом и должен быть подтянут снаружи к цепи питания резистором 50-100кОм. Так же микроконтроллер имеет внешний вывод STANDBY который сигнализирует, что МК находится в режиме Standby. Поскольку это вывод, то подтягивать его никуда не надо.

Сводка по STANDBY

  • Выключено питание DUcc.
  • Работают только LSI, LSE, RTC и BKP блоки.
  • Пробуждение от сигнала WAKEUP и ALARM RTC.
  • Динамический ток потребления до 15мкА.
  • Время запуска не более 20мкс.

Режим Battery ONLY

Я не нашел описание данного режима в спецификации, но он представлен на слайдах компании с одной из конференций.

  • Выключено питание DUcc
  • Выключено питание Ucc
  • Работают только LSE, RTC и BKP блоки
  • Пробуждение по появлению питания Ucc
  • Динамический ток потребления до 5мкА.
  • Время запуска не более 6 мс.

Информация с форума

Задержка выхода из режимов пониженного энергопотребления

Из SLEEP выход занимает 2 такта рабочей частоты процессора, которая была настроена перед переходом в SLEEP (правда без учета времени на вход в обработчик прерывания, задержки Flash акселератора и т.п., но это порядка 10-30 тактов)

Из DEEP SLEEP 1 такт LSI генератора, а затем 1 такт рабочей частоты процессора, которая была настроена перед переходом в SLEEP так же без учета времени на вход в обработчик и задержки акселератора

Выход из STANDBY режима равнозначен перезапуску процессора через RESET, и состоит из времени включения встроенного LDO генератора (~30 мкС), выполнения загрузочной программы (~10 мкС) и запуска пользовательской программы

Пробуждение из батарейного питания, т.е. с появлением питания Ucc равнозначно включению микросхемы по появлению питания Ucc и включает в себя еще дополнительную задержку для стабилизации напряжения питания (типовое 4 мС, мах 6 мС) и более долгая работа загрузочной программы (~200 мкС)

Режимы низкого энергопотребления К1986ВЕ92QI

Потребления до 100-400 мкА при 25С можно добиться.

Перед уходом в SLEEP или SLEEPDEEP.

  1. Переключить все тактирование на LSI.
  2. Выключить HSI (через батарейный домен) и HSE.
  3. В батарейном домене задать SELECTRI и LOW 011 (80 мкА) или 100 (2 мкА)
  4. Уйти в режим

При пробуждении повторить в обратном порядке

  1. Увеличить SELECTRI и LOW до нужного значения
  2. Включить HSI
  3. Перейти на нужную частоту

Продолжить программу.

Это пройдет для нормальных условий (25 град С), при 125С потребление вырастет до 1-2 мА (утечки)

Вопросы - ответы

- А какой ток потребления в режиме Sleep?
- Может ли в этом режиме продолжать функционировать АЦП и как это влияет на потребление?

Ответ: Ток зависит от настроек микросхемы, в этом режиме отключается от тактирования HCLK. АЦП может продолжать преобразование, если настроены в режим тактирования от ADC_CLK, но без возможности дополнительных задержек, автоматического перебора и т.п.

Потребление снижается примерно в 2 раза от максимума.


- Какое потребление МК 1986ВЕ92У в режимах сниженного энергопотребления:

Ответ: Ориентировочно, в режиме SLEEP общее потребление не превосходит 40 мА, SLEEPDEEP - 2 мА, STANDBY - 50 мкА.


- Интересует ток потребления для микроконтроллеров 1986ВЕ1Т и 1986ВЕ3Т. Что такое режим PowerDown?

Ответ: Батарейный блок 1986ВЕ1Т точно такой же, как и в 1986ВЕ94Т, то ток потребления батарейного домена не хуже 5мкА. В комфортных условиях 25 градусов Цельсия - около 2мкА.

Режим powerdown эквивалентен режиму standby. При этом напряжения питания не снимаются, и измеряется суммарный ток по всем доменам. При подаче нулевых напряжений питания (кроме BUcc) ток потребления будет несколько меньше (но не нормируется).


doc/doclist/sleep.txt · Последние изменения: 2017/08/25 16:57 — vova