Архитектура MSP430
MSP430 — 16-битные микроконтроллеры TI с фон-неймановской архитектурой и упором на сверхмалое потребление: процессор работает короткими вспышками, а остальное время спит в одном из пяти режимов пониженного потребления. Разбираем устройство ядра, памяти, тактирования и прерываний по руководству семейства 2xx и даташиту MSP430G2553.
Обновлено Редакция GAW
MSP430 — семейство 16-битных микроконтроллеров Texas Instruments со сверхмалым потреблением. По руководству TI SLAU144K ядро — 16-битный RISC-процессор с 27 командами и семью режимами адресации, а процессор, память и периферия связаны общими шинами адреса и данных по фон-неймановской схеме: команды и данные лежат в одном адресном пространстве. Система команд разобрана отдельно — в статье «Система команд MSP430».
Регистры процессора
Шестнадцать 16-битных регистров: R0 — счётчик команд PC, R1 — указатель стека SP, R2 — регистр состояния SR, R3 — генератор констант, R4–R15 — общего назначения. PC и SP всегда чётные: команды занимают 2, 4 или 6 байтов, а стек работает словами.
| Бит SR | Имя | Назначение |
|---|---|---|
| 0 | C | перенос |
| 1 | Z | ноль |
| 2 | N | знак результата |
| 3 | GIE | разрешение маскируемых прерываний |
| 4 | CPUOFF | выключить процессор |
| 5 | OSCOFF | выключить генератор LFXT1, если он не тактирует MCLK и SMCLK |
| 6 | SCG0 | выключить генератор постоянного тока DCO, если DCO не тактирует MCLK и SMCLK |
| 7 | SCG1 | выключить SMCLK |
| 8 | V | переполнение |
Биты режимов пониженного потребления лежат прямо в SR, поэтому при входе в прерывание режим сохраняется в стеке вместе с регистром состояния.
Карта памяти
Адресное пространство общее для всех областей; код всегда выбирается с чётных адресов. Пример — MSP430G2553 по таблице 8 даташита:
| Адреса | Область |
|---|---|
| 0x0000–0x000F | специальные регистры SFR: разрешения и флаги прерываний |
| 0x0010–0x00FF | 8-битная периферия — обращаться байтовыми командами |
| 0x0100–0x01FF | 16-битная периферия — обращаться словными командами |
| 0x0200–0x03FF | ОЗУ 512 байтов |
| 0x1000–0x10FF | информационная флеш-память 256 байтов |
| 0xC000–0xFFFF | флеш-память программ 16 КБ |
| 0xFFC0–0xFFFF | векторы прерываний (часть флеш-памяти) |
ОЗУ у всех MSP430 серии 2xx начинается с 0x0200, а флеш-память заканчивается на 0xFFFF — начало зависит от объёма. Если по адресу вектора сброса 0xFFFE записано 0xFFFF (флеш-память не запрограммирована), процессор после включения сразу уходит в LPM4.
Режимы работы
Пять режимов пониженного потребления задаются битами SR:
| Режим | SCG1 | SCG0 | OSCOFF | CPUOFF | Что выключено |
|---|---|---|---|---|---|
| Активный | 0 | 0 | 0 | 0 | ничего |
| LPM0 | 0 | 0 | 0 | 1 | процессор и MCLK; SMCLK и ACLK работают |
| LPM1 | 0 | 1 | 0 | 1 | процессор, MCLK, DCO, если он не нужен SMCLK |
| LPM2 | 1 | 0 | 0 | 1 | процессор, MCLK, SMCLK, DCO; ACLK работает |
| LPM3 | 1 | 1 | 0 | 1 | процессор, MCLK, SMCLK, DCO и его генератор постоянного тока; ACLK работает |
| LPM4 | 1 | 1 | 1 | 1 | процессор и все тактовые сигналы |
Разрешённое прерывание будит процессор из любого режима: при входе в обработчик SR и PC сохраняются в стеке, а биты CPUOFF, SCG1 и OSCOFF сбрасываются. По RETI восстанавливается сохранённый SR — и процессор снова засыпает. Чтобы после прерывания продолжить основную программу, обработчик сбрасывает биты режима в сохранённой копии SR, например BIC #CPUOFF,0(SP).
Токи MSP430G2553 по даташиту при 2,2 В и 25 °C:
| Режим | Ток, типично |
|---|---|
| Активный, 1 МГц | 230 мкА |
| LPM0, 1 МГц | 56 мкА |
| LPM2 | 22 мкА |
| LPM3 с часовым кварцем 32768 Гц | 0,7 мкА |
| LPM3 с генератором VLO | 0,5 мкА |
| LPM4 | 0,1 мкА |
TI советует строить программу так, чтобы микроконтроллер как можно больше времени проводил в LPM3, а просыпался по прерываниям: DCO запускается примерно за микросекунду — у G2553 по даташиту не дольше 1,5 мкс из LPM3 и LPM4 при 3 В.
Тактирование
Модуль Basic Clock+ серии 2xx имеет до четырёх источников и три выходных сигнала:
| Источник | Что это |
|---|---|
| DCOCLK | внутренний генератор с цифровым управлением |
| LFXT1CLK | генератор для часового кварца 32768 Гц, а у части микросхем — и для кварцев 0,4–16 МГц |
| XT2CLK | второй кварцевый генератор, есть не у всех микросхем |
| VLOCLK | внутренний маломощный генератор около 12 кГц; у G2553 по даташиту 4–20 кГц |
| Сигнал | Кто использует | Источники |
|---|---|---|
| MCLK | процессор | любой из четырёх, делитель 1–8 |
| SMCLK | быстрая периферия | любой из четырёх, делитель 1–8 |
| ACLK | медленная периферия и часы | LFXT1CLK или VLOCLK, делитель 1–8 |
На MSP430G2553 записаны калибровочные константы DCO для 1, 8, 12 и 16 МГц: их копируют в регистры BCSCTL1 и DCOCTL. Разброс частоты 1 МГц — до ±3 % по температуре или напряжению и до ±6 % во всём диапазоне. Предельная частота процессора зависит от питания: 6 МГц при 1,8 В, 12 МГц при 2,7 В и 16 МГц при 3,3 В. Настройка DCO, кварцев и систем тактирования CS у семейств с FRAM — на странице «Тактирование MSP430».
Прерывания и сброс
Векторы прерываний занимают верхние слова флеш-памяти, и чем выше адрес вектора, тем выше приоритет. У MSP430G2553 самый старший вектор 0xFFFE — сброс: включение питания, вывод RST, сторожевой таймер, нарушение ключа флеш-памяти; ниже по убыванию приоритета — NMI и сбой генератора (0xFFFC), Timer1_A3, компаратор, сторожевой таймер в режиме интервала, Timer0_A3, приём и передача USCI, АЦП, порт P2 и порт P1 (0xFFE4).
После сброса по питанию выводы портов становятся входами, SR обнуляется, сторожевой таймер работает, а в PC загружается адрес из вектора сброса. Программа должна сама установить указатель стека — обычно на верх ОЗУ — и настроить сторожевой таймер.
Сторожевой таймер
После каждого сброса сторожевой таймер WDT+ включён в режиме watchdog с интервалом 32768 тактов DCO — около 32 мс при 1 МГц. Если программа его не обслуживает и не останавливает, микроконтроллер перезагружается. Любая запись в регистр WDTCTL должна быть словной и содержать пароль 05Ah в старшем байте; запись с другим значением сама вызывает сброс. Остановка таймера — первая строка почти любой программы:
WDTCTL = WDTPW | WDTHOLD; /* stop the watchdog: password 0x5A00 plus the hold bit */
Порты ввода-вывода
Каждым портом управляет набор 8-битных регистров, бит регистра соответствует выводу:
| Регистр | Назначение |
|---|---|
| PxIN | чтение состояния выводов |
| PxOUT | выходное значение; при включённой подтяжке — её направление |
| PxDIR | направление: 1 — выход |
| PxREN | включение подтягивающего резистора |
| PxSEL, PxSEL2 | выбор функции вывода: порт или периферия |
| PxIE, PxIES, PxIFG | разрешение прерывания, выбор фронта, флаг (у портов P1 и P2) |
У MSP430G2553 в корпусе DIP-20 — 16 линий ввода-вывода: P1.0–P1.7 и P2.0–P2.5, а выводы 18 и 19 — XOUT и XIN для кварца, которые можно переключить в линии P2.7 и P2.6. Обзор семейств и выбор микросхемы — в разделе «MSP430», о режимах сна других микроконтроллеров — в статье о режимах сна.
Частые вопросы
Чем отличаются режимы LPM0, LPM3 и LPM4?
Тем, какие тактовые сигналы остаются. В LPM0 выключены процессор и MCLK, SMCLK и ACLK работают — периферия на быстром такте продолжает работать. В LPM3 работает только ACLK от часового кварца или генератора VLO — можно просыпаться по таймеру. В LPM4 выключено всё, разбудить микроконтроллер может только внешнее прерывание. У MSP430G2553 при 2,2 В ток в LPM3 с VLO — 0,5 мкА типично.
Почему MSP430 сразу перезагружается после запуска программы?
Скорее всего, не остановлен сторожевой таймер. После сброса он включён в режиме watchdog с интервалом 32768 тактов DCO — около 32 мс на 1 МГц. Его останавливают первой командой: в WDTCTL записывают WDTPW + WDTHOLD, причём старший байт должен быть паролем 05Ah, иначе запись сама вызывает сброс.
Какая максимальная частота у MSP430G2553?
16 МГц при питании от 3,3 В. Частота ограничена напряжением: по даташиту до 6 МГц при 1,8 В и до 12 МГц при 2,7 В. На кристалле записаны калибровочные константы DCO для 1, 8, 12 и 16 МГц, у частоты 1 МГц разброс во всём диапазоне температур и напряжений — до ±6 %.
Сколько памяти у MSP430G2553?
16 КБ флеш-памяти программ по адресам 0xC000–0xFFFF, 512 байтов ОЗУ по адресам 0x0200–0x03FF и 256 байтов информационной флеш-памяти 0x1000–0x10FF для калибровок и настроек. Векторы прерываний занимают верхние слова флеш-памяти до 0xFFFF.
Источники
- Texas Instruments. MSP430F2xx, MSP430G2xx Family User's Guide (SLAU144K, revised August 2022) — разд. 1.1–1.4 — архитектура и карта памяти (рис. 1-2); разд. 2.1 — сброс и начальное состояние; разд. 2.3 — режимы работы (табл. 2-2), вход и выход из LPM; разд. 3.2 — регистры (рис. 3-6, табл. 3-1); гл. 5 — модуль тактирования Basic Clock+; гл. 8 — порты; гл. 10 — сторожевой таймер WDT+ (пароль 05Ah, начальный интервал 32768 тактов)
- Texas Instruments. MSP430G2x53, MSP430G2x13 Mixed Signal Microcontroller (SLAS735J, revised May 2013) — выводы N20/PW20; табл. 5 — векторы прерываний; табл. 8 — организация памяти; рекомендуемые условия — частота от напряжения; токи в активном режиме и LPM; калиброванные частоты DCO; VLO 4–20 кГц
Нашли ошибку?
Смотрите также
- MSP43016-битное ядро TI со сверхмалым потреблением: семейства, G2553, отладка
- Тактирование MSP430DCO, FLL, кварцы и делители: Basic Clock+ у G2xx, CS у FR2xx и FR5xx
- Система команд MSP43027 основных и 24 эмулируемые команды, адресация, коды, флаги, такты
- Режимы снаSleep mode: Idle, Power-down, пробуждение и ток
- Сторожевой таймерWatchdog: сброс МК при зависании программы
- Гарвардская архитектураРаздельные пути для команд и данных в процессоре