Loading AI tools
Из Википедии, свободной энциклопедии
MSP430 — семейство 16-разрядных микроконтроллеров фирмы Texas Instruments.
Первый контроллер с аббревиатурой MSP430 появился в 1992 году[1]. Texas Instruments заявил о стремлении создать микроконтроллер с системой команд, близкой к популярной в 70-х—80-х годах архитектуре PDP-11.
Ядро MSP430 16-битное. Систему команд постарались сделать максимально ортогональной с разнообразными способами адресации. Ортогональность системы команд означает, что в любой команде может использоваться любой способ адресации операнда: константа, прямой из регистра или памяти, косвенный и т. п.
В момент рождения семейства основной упор был сделан на снижение энергопотребления. Однако с тех пор экономия энергии стала идеей-фикс электронной техники, и MSP430 активно теснят на этом пьедестале другие производители со своими архитектурами.
Ключевым отличием и «визитной карточкой» семейства MSP430 является возможность тактировать любой модуль периферии асинхронно от ядра. В подавляющем большинстве однокристальных микроконтроллеров периферия синхронна с ядром (за исключением отдельных специальных узлов). Такая особенность позволяет гибко управлять скоростью (а значит, и потреблением) каждого модуля. Кроме того, уникальным является также модуль USB интерфейса: он имеет отдельный домен питания, что упрощает разработку батарейных приборов с USB-интерфейсом.
Сегодня семейство MSP430 предлагает широкую гамму однокристальных микроконтроллеров с объёмом флеш-памяти от единиц до 512 килобайт и ОЗУ до 64 килобайт. Тактовые частоты ядра — до 25 МГц.
MSP430 имеет фоннеймановскую архитектуру, с единым адресным пространством для команд и данных. Память может адресоваться как побайтово, так и пословно. Порядок хранения 16-разрядных слов — от младшего к старшему (англ. little-endian).
Процессор содержит 16 16-разрядных ортогональных регистров. Регистр R0 используется как программный счетчик (англ. Program Counter — PC), регистр R1 как указатель стека (англ. Stack Pointer — SP), регистр R2 как регистр статуса (англ. Status Register — SR), а R3 как специальный регистр, именуемый «генератор констант» (англ. Constant Generator — CG), R2 также может использоваться в качестве генератора констант. Генератор констант используется для сокращения общей длины команды вследствие неявного представления константы в коде операции. Регистры с R4 по R15 используются как регистры общего назначения.
Набор инструкций очень простой и представлен 27 инструкциями, 24 эмулированными инструкциями. Инструкции имеют как 8-битную (байт), так и 16-битную (слово) форму обработки операндов. Бит B/W управляет этим признаком.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Команда |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | opcode | B/W | As | register | Однооперандные команды | ||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | B/W | As | register | RRC Вращение вправо через перенос | ||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | As | register | SWPB Обмен байтов | ||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | B/W | As | register | RRA Вращение вправо арифметическое | ||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | As | register | SXT Расширение знака байта до слова | ||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | B/W | As | register | PUSH Опустить операнд в стек | ||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | As | register | CALL Вызов подпрограммы; сохранить PC в стеке и загрузить PC новым значением | ||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | RETI Возврат из прерывания; Извлечь SR и PC из стека |
0 | 0 | 1 | условие | 10-бит знаковое смещение | Условный переход; PC = PC + 2×offset | |||||||||||
0 | 0 | 1 | 0 | 0 | 0 | 10-бит знаковое смещение | JNE/JNZ Переход, если не_равно/не_ноль | |||||||||
0 | 0 | 1 | 0 | 0 | 1 | 10-бит знаковое смещение | JEQ/JZ Переход, если равно/ноль | |||||||||
0 | 0 | 1 | 0 | 1 | 0 | 10-бит знаковое смещение | JNC/JLO Переход, если не_перенос/ниже (беззнаковое сравнение) | |||||||||
0 | 0 | 1 | 0 | 1 | 1 | 10-бит знаковое смещение | JC/JHS Переход, если перенос/выше или то же (беззнаковое сравнение) | |||||||||
0 | 0 | 1 | 1 | 0 | 0 | 10-бит знаковое смещение | JN Переход, если отрицательный | |||||||||
0 | 0 | 1 | 1 | 0 | 1 | 10-бит знаковое смещение | JGE Переход, если больше_или_равно | |||||||||
0 | 0 | 1 | 1 | 1 | 0 | 10-бит знаковое смещение | JL Переход, если меньше | |||||||||
0 | 0 | 1 | 1 | 1 | 1 | 10-бит знаковое смещение | JMP Переход (непосредственный) | |||||||||
opcode | source | Ad | B/W | As | destination | Двухоперандная арифметика | ||||||||||
0 | 1 | 0 | 0 | source | Ad | B/W | As | destination | MOV Переслать источник в приёмник | |||||||
0 | 1 | 0 | 1 | source | Ad | B/W | As | destination | ADD Прибавить источник к приёмнику | |||||||
0 | 1 | 1 | 0 | source | Ad | B/W | As | destination | ADDC Прибавить источник_и_перенос к приёмнику | |||||||
0 | 1 | 1 | 1 | source | Ad | B/W | As | destination | SUBC Вычесть источник из приёмника (с переносом) | |||||||
1 | 0 | 0 | 0 | source | Ad | B/W | As | destination | SUB Вычесть источник из приёмника | |||||||
1 | 0 | 0 | 1 | source | Ad | B/W | As | destination | CMP Сравнить (операцией вычитания) источник с приёмником | |||||||
1 | 0 | 1 | 0 | source | Ad | B/W | As | destination | DADD Decimal Десятичное сложение источника и приёмника (с переносом) | |||||||
1 | 0 | 1 | 1 | source | Ad | B/W | As | destination | BIT Проверка битов (операцией AND) источника и приёмника | |||||||
1 | 1 | 0 | 0 | source | Ad | B/W | As | destination | BIC Битовая очистка (dest &= ~src) | |||||||
1 | 1 | 0 | 1 | source | Ad | B/W | As | destination | BIS Битовая установка (logical OR) | |||||||
1 | 1 | 1 | 0 | source | Ad | B/W | As | destination | XOR Исключающее или источника с приёмником | |||||||
1 | 1 | 1 | 1 | source | Ad | B/W | As | destination | AND Логический AND источника с приёмником (dest &= src) |
Все инструкции 16-битные. 4 способа адресации операнда, определены в 2 битах как As поле.
Поле As — регистровый, индексный, косвенный-регистровый, косвенно-регистровый с постдекрементом. Поле Ad определяет два способа адресации — регистровый и индексный.
As | Регистр | Синтаксис | Описание |
---|---|---|---|
00 | n | Rn | Регистровый. Операнд — содержимое одного из регистров из Rn |
01 | n | x(Rn) | Индексный. Операнд находится в памяти по адресу Rn+x. X-слово находится после текущей команды |
10 | n | @Rn | Косвенный регистровый. Операнд находится в памяти по адресу, который содержится в регистре Rn |
11 | n | @Rn+ | Косвенный регистровый с автоинкрементом. В зависимости от значения разряда B/W значение регистра Rn увеличивается после выполнения операции на 1 или 2 |
Режимы адресации при использовании R0 (PC) | |||
01 | 0 (PC) | LABEL | Относительный(символьный). Операнд x (PC) в памяти по адресу PC+x |
11 | 0 (PC) | #x | Непосредственный. @PC+ Адрес операнда из х-слова, находящегося после текущей команды |
Использование R2 (SR) и R3 (CG), специальный способ декодирования | |||
01 | 2 (SR) | &LABEL | Абсолютный. Операнд в памяти по адресу, взятому из x |
10 | 2 (SR) | #4 | Константа 4 |
11 | 2 (SR) | #8 | Константа 8 |
00 | 3 (CG) | #0 | Константа 0 |
01 | 3 (CG) | #1 | Константа 1 при байтовых операциях |
10 | 3 (CG) | #2 | Константа 2 |
11 | 3 (CG) | #-1 | Константа −1 или 0xFFFF |
Другие команды, поддерживаемые ассемблером MSP430, образуются из основных и именуются эмулируемыми (способ получения — в скобках). Общее число поддерживаемых ассемблером эмулируемых команд — 24:
Примечание: приведена форма записи команд без указания на тип операндов байт/слово. Имеются и другие возможные операции для формирования задержки выполнения программного кода.
Поддерживаемый формат команд ассемблером в мнемонике имеет указание на тип обрабатываемых данных.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.