Меню
Главная
Случайная статья
Настройки
|
MSP430 — семейство 16-разрядных микроконтроллеров фирмы Texas Instruments.
Содержание
История создания и особенные характеристики
Первый контроллер с аббревиатурой MSP430 появился в 1992 году[1]. Texas Instruments заявил о стремлении создать микроконтроллер с системой команд, близкой к популярной в 70-х—80-х годах архитектуре PDP-11.
Ядро MSP430 16-битное. Систему команд постарались сделать максимально ортогональной с разнообразными способами адресации. Ортогональность системы команд означает, что в любой команде может использоваться любой способ адресации операнда: константа, прямой из регистра или памяти, косвенный и т. п.
В момент рождения семейства основной упор был сделан на снижение энергопотребления. Однако с тех пор экономия энергии стала идеей-фикс электронной техники, и MSP430 активно теснят на этом пьедестале другие производители со своими архитектурами.
Ключевым отличием и «визитной карточкой» семейства MSP430 является возможность тактировать любой модуль периферии асинхронно от ядра. В подавляющем большинстве однокристальных микроконтроллеров периферия синхронна с ядром (за исключением отдельных специальных узлов). Такая особенность позволяет гибко управлять скоростью (а значит, и потреблением) каждого модуля. Кроме того, уникальным является также модуль USB интерфейса: он имеет отдельный домен питания, что упрощает разработку батарейных приборов с USB-интерфейсом.
Сегодня семейство MSP430 предлагает широкую гамму однокристальных микроконтроллеров с объёмом флеш-памяти от единиц до 512 килобайт и ОЗУ до 64 килобайт. Тактовые частоты ядра — до 25 МГц.
Система команд MSP430
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 + 2offset
|
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:
- CLRZ — очистка флага Z регистра состояния процессора (PSW) (BIC #2,SR).
- CLRN — очистка флага N регистра состояния процессора (PSW) (BIC #4,SR).
- CLRC — очистка флага C регистра состояния процессора (PSW) (BIC #1,SR).
- SETZ — установка флага Z регистра состояния процессора (PSW) (BIS #2,SR).
- SETN — установка флага N регистра состояния процессора (PSW) (BIS #4,SR).
- SETC — установка флага C регистра состояния процессора (PSW) (BIS #1,SR).
- EINT — разрешение прерываний (BIC #8,SR).
- DINT — запрещение прерываний (BIS #8,SR).
- CLR dst — очистка операнда (MOV #0,dst).
- TST dst — проверка операнда на ноль (CMP #0,dst).
- INV dst — инвертирование битов операнда (XOR #-1,dst).
- ADC dst — прибавление переноса к операнду (ADDC #0,dst).
- DADC dst — десятичное сложение переноса с получателем (DADD #0,dst).
- SBC dst — вычитание переноса из операнда (SUBC #0,dst).
- INC dst — инкремент операнда (ADD #1,dst).
- DEC dst — декремент операнда (SUB #1,dst)
- INCD dst — увеличение на 2 операнда (ADD #2,dst).
- DECD dst — уменьшение на 2 операнда (SUB #2,dst).
- RLA dst — сдвиг влево операнда, флаг переноса заполняется из старшего бита, а младший бит — результата 0 (ADD dst, dst).
- RLC dst — сдвиг влево операнда с использованием переноса (ADDC dst, dst).
- RET — возврат из подпрограммы (MOV @sp+,pc).
- POP dst — извлечение операнд из стека (MOV @sp+,dst).
- BR dst — переход в программе, используя операнд (MOV dst, pc).
- NOP — нет операции (MOV r3,r3).
Примечание: приведена форма записи команд без указания на тип операндов байт/слово. Имеются и другие возможные операции для формирования задержки выполнения программного кода.
Поддерживаемый формат команд ассемблером в мнемонике имеет указание на тип обрабатываемых данных.
Примечания
- BY STEPHEN EVANCZUK. The most-popular MCUs ever (англ.). https://www.edn.com/ (20 августа 2013). Дата обращения: 15 января 2021. Архивировано 9 июня 2021 года.
Ссылки
Компиляторы и ассемблеры
Эмуляторы
Полезные ссылки
|
|