Перейти к содержанию

Режимы LPM у MSP430

MSP430 построен вокруг сна: ядро большую часть времени выключено, а будят его прерывания. Основных режимов сна пять, LPM0–LPM4, и выбирают их не регистром управления питанием, а четырьмя битами прямо в регистре состояния ядра; у MSP430 с FRAM добавляются «глубокие» LPMx.5.

Обновлено Редакция GAW

LPM (low-power mode) — режимы пониженного потребления микроконтроллеров MSP430. Их особенность в том, что режим задают четыре бита прямо в регистре состояния ядра SR: CPUOFF, OSCOFF, SCG0 и SCG1. Режим включается сразу после записи битов, порты и ОЗУ при этом не меняются, а разбудить ядро может любое разрешённое прерывание (SLAU144K, разд. 2.3). Поскольку SR сохраняется в стеке при входе в обработчик, после RETI микроконтроллер возвращается в тот режим сна, из которого его разбудили.

Режимы LPM0–LPM4

РежимЧто выключеноТок MSP430F21x1, 1 МГц, 3 ВТок MSP430FR6989, 25 °C
Активныйничего300 мкА103 мкА/МГц
LPM0CPU, MCLK55 мкА75 мкА при 1 МГц
LPM1ещё DCO, если он не тактирует SMCLK—40 мкА при 1 МГц
LPM2CPU, MCLK, SMCLK, DCO17 мкА0,9 мкА
LPM3то же и генератор постоянного тока для DCO; работает только ACLK0,9 мкА0,4 мкА
LPM4CPU и все тактовые сигналы0,1 мкА0,3 мкА

Состав режимов — по табл. 2-2 SLAU144K, токи MSP430F21x1 — по рис. 2-8 там же (типичные значения), токи MSP430FR6989 — по табл. 6-1 SLAS789D. Числа двух семейств сравнивать напрямую нельзя: это разные технологии, а у FR-серии ток активного режима указан на мегагерц.

Главный режим для приборов на батарейке — LPM3. В нём работает только ACLK от часового кварца 32 кГц, на нём идут таймеры и часы, а ядро тактируется от DCO, который просыпается за 1 мкс. TI оценивает ток в LPM3 с часами и всеми прерываниями меньше чем в 2 мкА (SLAU144K, разд. 2.4). Как устроены тактовые сигналы MCLK, SMCLK и ACLK, разобрано в статье «Тактовая система MSP430».

Вход и выход

BIS  #GIE+CPUOFF+SCG1+SCG0,SR   ; enter LPM3
...
; in the interrupt service routine:
BIC  #CPUOFF+SCG1+SCG0,0(SP)    ; leave LPM3 on RETI
RETI

По разд. 2.3.1 SLAU144K. При входе в обработчик аппаратура кладёт PC и SR в стек и сбрасывает биты CPUOFF, SCG1 и OSCOFF, так что сам обработчик работает с тактовой частотой. Если он не трогает сохранённый SR, RETI возвращает прежний режим сна; если сбрасывает биты в копии на стеке, основная программа продолжается после команды входа в сон.

LPM3.5 и LPM4.5

У MSP430 с FRAM есть ещё два режима, LPMx.5. Для входа в них кроме битов SR нужно выставить PMMREGOFF = 1 в модуле управления питанием (условия измерения LPMx.5 в SLAS789D: PMMREGOFF = 1, CPUOFF = 1, SCG0 = 1, SCG1 = 1, OSCOFF = 1). В них выключено питание самого ядра: в LPM3.5 работают только часы реального времени, LPM4.5 — почти полное отключение (SLAS789D, табл. 6-1). Ток MSP430FR6989 — 0,35 мкА в LPM3.5 и 0,02 мкА в LPM4.5 без супервизора питания SVS. Цена — время и способ выхода: 250 мкс, а для LPM4.5 без SVS — 1 мс, и пробуждение проходит как сброс BOR с отдельной причиной «LPMx.5 wakeup» в регистре SYSRSTIV. Состояние процессора и периферии не сохраняется, программа стартует сначала и восстанавливает данные сама — например, из FRAM. Сторожевой таймер в режиме watchdog не даёт войти в LPMx.5, потому что иначе он бы отключился. О семействах MSP430 с FRAM — в статье «MSP430 с FRAM», общие принципы сна микроконтроллеров — в термине «Режимы сна».

Частые вопросы

Какой режим LPM выбрать для устройства на батарейке с часами?

Обычно LPM3: в нём работает только ACLK от часового кварца 32 кГц, и TI оценивает ток меньше чем в 2 мкА с часами и всеми разрешёнными прерываниями (SLAU144K, разд. 2.4). Ядро тактируется от DCO, который просыпается за 1 мкс, поэтому короткая работа по прерыванию почти не добавляет потребления.

Почему после выхода из LPM4.5 программа начинается сначала?

В режимах LPM3.5 и LPM4.5 у MSP430FR выключено питание ядра, и регистры процессора и периферии не сохраняются. Пробуждение проходит как сброс BOR с отдельным кодом причины LPMx.5 wakeup в регистре SYSRSTIV (SLAS789D). Программа проверяет этот код и восстанавливает состояние из FRAM или резервных регистров.

Как выйти из LPM в основную программу, а не обратно в сон?

Биты режима лежат в регистре SR, который сохраняется в стеке при входе в прерывание. Если обработчик ничего не меняет, команда RETI возвращает тот же режим сна. Чтобы основная программа продолжила работу, обработчик сбрасывает биты в сохранённой копии: на ассемблере BIC #CPUOFF,0(SP) для LPM0 (SLAU144K, разд. 2.3.1), в C — встроенной функцией компилятора для изменения SR при выходе.

Источники

  1. Texas Instruments. MSP430F2xx, MSP430G2xx Family User's Guide (SLAU144K, December 2004, revised August 2022) — разд. 2.3: режимы LPM0–LPM4 задают биты CPUOFF, OSCOFF, SCG0 и SCG1 в регистре состояния SR; режим сохраняется в стеке при входе в прерывание и восстанавливается при возврате, если сохранённый SR не изменён; режим включается сразу после записи битов, порты и ОЗУ не меняются, разбудить может любое разрешённое прерывание; рис. 2-8: типичный ток MSP430F21x1 при 1 МГц — активный 300 / 200 мкА, LPM0 55 / 32 мкА, LPM2 17 / 11 мкА, LPM3 0,9 / 0,7 мкА, LPM4 0,1 / 0,1 мкА при 3 / 2,2 В; табл. 2-2: LPM0 — выключены CPU и MCLK; LPM1 — ещё DCO и генератор постоянного тока, если DCO не тактирует SMCLK; LPM2 — выключены CPU, MCLK, SMCLK и DCO, генератор постоянного тока работает; LPM3 — то же и выключен генератор постоянного тока, ACLK работает; LPM4 — выключены CPU и все тактовые сигналы; разд. 2.3.1: при входе в обработчик PC и SR в стеке, биты CPUOFF, SCG1 и OSCOFF сбрасываются; выход из режима при RETI — изменением SR в стеке (BIC #CPUOFF,0(SP)); примеры BIS #GIE+CPUOFF,SR и BIS #GIE+CPUOFF+SCG1+SCG0,SR; разд. 2.4: ток LPM3 меньше 2 мкА с часами реального времени и всеми прерываниями, ACLK от часового кварца 32 кГц, DCO просыпается за 1 мкс
  2. Texas Instruments. MSP430FR698x(1), MSP430FR598x(1) Mixed-Signal Microcontrollers (SLAS789D, June 2014, revised August 2018) — разд. 6.3, табл. 6-1: один активный режим и семь программно выбираемых режимов пониженного потребления; LPM3.5 и LPM4.5 отключают питание ядра; типичный ток при 25 °C: AM 103 мкА/МГц (65 мкА/МГц без FRAM), LPM0 75 мкА при 1 МГц, LPM1 40 мкА при 1 МГц, LPM2 0,9 мкА, LPM3 0,4 мкА, LPM4 0,3 мкА, LPM3.5 0,35 мкА, LPM4.5 0,2 мкА с SVS и 0,02 мкА без SVS; время пробуждения: LPM0 — мгновенно, LPM1 и LPM2 — 6 мкс, LPM3 и LPM4 — 7 мкс, LPM3.5 и LPM4.5 — 250 мкс, LPM4.5 без SVS — 1000 мкс; в LPMx.5 CPU и периферия — reset; разд. 6.11.7, таблица SYSRSTIV: LPMx.5 wakeup (BOR) — 08h; разд. 6.11.6: в режиме сторожевого таймера WDT не даёт войти в LPM3.5 и LPM4.5; разд. 5.9: условия LPMx.5 — PMMREGOFF = 1 вместе с CPUOFF, SCG0, SCG1 и OSCOFF

Нашли ошибку?