- •Справочник по системе команд микроконтроллера lpc2000 на базеArm-ядра
- •Введение
- •1. Общие сведения
- •Обработка данных
- •Региcтры cpsr/sprs
- •2. Перечень команд микроконтроллера lpc2000 на базе arm-ядра
- •3. Подробное описание команд микроконтроллера lpc2000 на базе arm-ядра
- •Команда сложения с переносом (Addition with carry)
- •Команда сложения с переносом (Addition with carry)
- •Команда сложения (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Операция сложения без учета флага переноса (Addition)
- •Команда логического и (And)
- •Команда логического и (and)
- •Команда арифметического сдвига вправо (Arithmetic Shift Right)
- •Команда арифметического сдвига вправо (Arithmetic Shift Right)
- •Переход (Branch)
- •Команда перехода по условию (Branch)
- •Команда безусловного перехода (Branch)
- •Команда сброса битов (Bit Clear)
- •Команда сброса битов (Bit Clear)
- •Контрольные точки (breakpoints)
- •Команда перехода со ссылкой (Branch and Link)
- •Команда перехода со ссылкой (Branch with Link)
- •Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)
- •Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)
- •Команда перехода со ссылкой и сменой режима (Branch with Link and Exchange)
- •Переход и переключение режима ядра (Branch and Exchange)
- •Переход и переключение режима ядра
- •Сообщение сопроцессору (Coprocessor Data Processing)
- •Подсчет нулевых битов (Count Leading Zeros)
- •Сравнение с отрицанием (Compare Negative)
- •Сравнение (Compare)
- •Установить флаги регистра cpsr для Rd – Rs.
- •Логическое побитовое «исключающее или» (Exclusive or)
- •Логическое побитовое «исключающее или» (Exclusive or)
- •Загрузить в сопроцессор из памяти (Load Coprocessor)
- •Загрузить в сопроцессор из памяти (Load Coprocessor)
- •Загрузить сразу несколько регистров (Load Multiple)
- •Загрузить сразу несколько регистров (Load Multiple)
- •Загрузить сразу несколько регистров (Load Multiple)
- •Команды множественной загрузки
- •Команда множественной загрузки( Load Multiple Increment)
- •Команда записи слова в регистр (Load Register)
- •Команда однократной передачи данных (Load Register)
- •Команда однократной передачи данных (Load Registr)
- •Команда однократной передачи данных (Load Registr)
- •Команда однократной передачи данных (Load Registr)
- •Команда записи байта в регистр (Load Register Byte)
- •Загрузка байта в регистр из памяти (Load register byte value from memory)
- •Загрузка двойного слова со знаком (Load Reister Doubleword)
- •Команда записи полуслова в регистр (Load Register Halfword)
- •Команда записи полуслова в регистр (Load Register Halfword)
- •Загрузка байта со знаком (Load Register Signed Byte)
- •Команда загрузки знакового байта (Load Register Signed Byte)
- •Загрузка полуслова со знаком (Load Register Signed Halfword)
- •Загрузка регистра полусловом со знаком (Load Register Signed Halfword)
- •Логический сдвиг влево (Logical Shift Left)
- •Логический сдвиг влево (Logical Shift Left)
- •Логический сдвиг вправо (Logical Shift Right)
- •Логический сдвиг вправо (Logical Shift Right)
- •Команда регистрового обмена с сопроцессором
- •Команда регистрового обмена с сопроцессором
- •Команда регистрового обмена с сопроцессором
- •Команда умножения, накопления
- •Загрузить в регистр константу
- •Пересылка (Move)
- •Пересылка (Move)
- •Пересылка (Move)
- •Команда перемещения данных из сопроцессора в arm регистр (Move to arm Register from Coprocessor)
- •Команда перемещения данных из сопроцессора в два регистра arm одновременно
- •Запись psr в регистр общего назначения (Move psr to General-purpose Register)
- •Запись в регистр состояния (Move to Status Register from arm Register)
- •Умножение (Multiply)
- •Умножение (Multiply)
- •Пересылка инверсии (Move Not)
- •Пересылка с инверсией (Move not)
- •Команда инвертирования (Negate)
- •Нет операции (No oPeration)
- •Логическое или (or)
- •Команда логического или (Or)
- •Команда перезагрузки кэша (a cache preload instruction)
- •Команда презагрузки кэша
- •Команда извлечения из стека (pop)
- •Размещение регистров в вершине стека
- •Команда добавление сразу нескольких операндов
- •Команда добавление сразу нескольких операндов с удвоением одного из них
- •Команда приведённого вычитания с удвоением второго операнда (double saturated substraction)
- •Команда приведённого вычитания (saturated substraction)
- •Циклический сдвиг вправо (Rotate Right Register)
- •Команда обратного вычитания (reverse substract)
- •Команда обратного вычитания с заемом (Reverse substract with carry)
- •Команда вычитания с заемом (Substract with carry)
- •Вычитание с переносом (Subtract with Carry)
- •Команда умножения числа со знаком и с накоплением
- •Команда умножения числа со знаком и накоплением
- •Знаковая операция умножения и сложения
- •Команда знакового умножения двух 16-ти битных операндов (Signed multyply)
- •Знаковая операция умножения
- •Команда обмена данными с сопроцесcором
- •Команда обмена данными с сопроцессором
- •Команда обмена данными с сопроцесcором
- •Команда обмена данными с сопроцессором
- •Команда группового хранения (Store Multiple )
- •Соответствия между мнемониками и состояниями битов команд
- •Сохранение не пустого подмножества рон (Store Multiple Increment After)
- •Команда сохранения регистра в памяти(Store Register )
- •Сохранение в памяти 32-х разрядных данных из рон (Store Register)
- •Сохранение в памяти 32-х разрядных данных из рон (Store Register)
- •Сохранение в памяти 32-х разрядных данных из рон (Store Register)
- •Команда сохранения регистра в памяти(Store Register Byte ) (байта)
- •Сохранение в памяти 8-ми разрядных данных из рон (Store Register)
- •Запоминание 2х слов (Stores two words).
- •Команда передачи полуслова между Lo регистром и памятью.
- •Команда сохранения значения регистра (Store Register Halfword)
- •Вычитание (Subtraction).
- •Команда вычитания (Subtract)
- •Команда программного прерывания (Software Interrupt)
- •Команда программного прерывания (Software Interrupt)
- •Команда обмена (Swap)
- •Команда обмена (Swap Byte)
- •Побитовая проверка на равенство (Test Equivalence)
- •Проверка битов (test)
- •Команда сравнения (Test)
- •Список литературы
Федеральное агентство по образованию
________________________________________
Санкт-Петербургский государственный
электротехнический университет “ЛЭТИ”
________________________________________
Справочник по системе команд микроконтроллера lpc2000 на базеArm-ядра
Методические указания
к лабораторным работам
по дисциплине “Микропроцессорные системы”
Санкт-Петербург
Издательство СПбГЭТУ “ЛЭТИ”
2007
Введение
Для выполнения лабораторных работ по дисциплине «Микропроцессорные системы» необходимо иметь описание команд для микроконтроллера.
Данные методические указания представляют собой справочник по системе команд микроконтроллера LPC2000 на базе ARM-ядра, архитектура которого описана в методических указаниях “Архитектура микроконтроллера семейства LPC2000”.
Команды представлены для низкоуровневого языка Assembler. Для данного типа микроконтроллера предусмотрено две группы команд: 32-х разрядные команды ARM и 16-ти разрядные (упакованные) команды THUMB.
Методические указания состоят из трех разделов: в первом разделе описана общая часть для всей системы команд, во втором – полный перечень команд и в третьем – их подробное описание.
1. Общие сведения
В этом разделе представлены общие сведения о командах, а именно: обозначения параметров, используемых в описании команд, и общие сведения о форматах команд. Для более подробной информации следует обратиться к разделу 3 данного методического указания и к [4].
Для команд группы ARM и группы THUMB можно выделить ряд параметров, которые встречаються в описании большинства команд. Для удобства эти параметры вынесны в отдельную таблицу (Таблица 1.) В случае, если параметр команды отличается от приведенного в таблице, это будет уточнено непосредственно в описании данной команды.
В отдельную таблицу вынесены перечень условий кодов выполнения для параметра <cond> (Таблица 2) и более подробное описание <shifter_operand> (Таблица 3).
Таблица 1. Обозначения параметров, используемых в описании команд
Обозначение |
Описание |
<cond> |
Содержит условие для выполнения команды. В режиме ARM все команды выполняются в зависимости состоянию регистра CPSR и поля условия самой команды. Это поле (биты 31:28) содержит условие, при которых команда будет выполнена. Если флаги C, N, Z и V установлены (сброшены) согласно коду поля условия, то команда будет выполнена, в противном случае эта команда будет проигнорирована. Всего существуют 16 различных условий, каждое из которых определяется двухсимвольным суффиксом, добавляемым к мнемонике команды. Практически можно использовать только 15 различных условий, 16-е условие (1111) зарезервировано и не применяется. При отсутствии в мнемонике команды условия выполнения или установлен суффикс AL, то эта команда будет выполнена безусловно, независимо от состояния флагов условия (регистр CPSR). Перечень условий описан в таблице 2. |
<coproc> |
Определяет имя сопроцессора и помещает номер сопроцессора в поле cp_num. Стандартное название регистров: R0,R1,….,R15. |
<Rd> |
Определяет ARM регистр назначения для операции. Если задан регистр R15, то флаги условий будут изменены случайным образом |
<Rn> |
Определяет адрес регистра процессора, содержащий первый операнд. |
<Rm> |
Определяет адрес регистра процессора, содержащий второй операнд. |
<immed_[i]> |
[i]-разрядное непосредственное смещение, которое прибавляется к значению счетчикаPCдля формирования адреса в памяти. |
<opcode_[i]> |
Код операции специфичный для сопроцессора |
PC
|
Регистр процессора, выполняющий роль программного счетчика (Program counter). |
<registers> |
Список регистров, в которые ведется загрузка; список разделен запятыми и записывает в {} скобках. Список декодируется в список регистров путем установки i-ого бита в 1, если i-ый регистр включается в список, и 0 - в противном случае; это делается для каждого i. |
<CRn> |
Определяет регистр сопроцессора, содержащий первый операнд. |
<CRm> |
Определяет регистр сопроцессора, содержащий второй операнд. |
<CRd> |
Определяет регистр сопроцессора – получатель результата. |
S бит |
Устанавливает Sбит (бит[20]) команды в 1 и определяет, что команда изменяет значение битов [31:28] регистраCPSR(см. таблицу 4). ЕслиSопущен, битSустанавливается в 0 и регистрCPSRне меняется командой. Когда битSустановлен, возможны 2 ситуации: а) Если регистр R15 не задействован как регистр <Rd>, флагиNиZустанавливаются в зависимости от результата сложения, а флаги C и V в зависимости от того, необходим ли перенос разрядов (появилось ли переполнение) б) Если регистр R15 задействован как регистр <Rd>, значение регистра SPRS (Saved Program Status Register) копируется в CPSR. Этот формат команды непредсказуем если обработка происходит в пользовательском или системном режиме, т.к. эти режимы не используют SPSR. |
<shifter_operand> |
Может быть регистром со сдвигом (Rm), или 8-битной константой с циклическим сдвигом (Imm) (в зависимости от значения бита "I"[25] в команде). Более подробную информацию см. в таблице 3. |
Таблица 2. Поле <cond>: Перечень кодов условий выполнения
Код |
Суффикс |
Флаги |
Значение |
0000 |
EQ |
Z установлен |
Равно |
0001 |
NE |
Z сброшен |
Не равно |
0010 |
CS |
C установлен |
Выше или равно |
0011 |
CC |
C сброшен |
Ниже |
0100 |
MI |
N установлен |
Отрицательный результат |
0101 |
PL |
N сброшен |
Положительный результат либо ноль |
0110 |
VS |
V установлен |
Переполнение |
0111 |
VC |
V сброшен |
Нет переполнения |
1000 |
HI |
C установлен and Z сброшен |
Выше |
1001 |
LS |
C сброшен or Z установлен |
Ниже или равно |
1010 |
GE |
N равно V |
Больше или равно |
1011 |
LT |
N не равно V |
Меньше |
1100 |
GT |
Z сброшен AND (N равно V) |
Больше |
1101 |
LE |
Z установлен OR (N не равно V) |
Меньше или равно |
1110 |
AL |
(проигнорировано) |
Всегда |
Таблица 3. Поле <shifter_operand>: Операнд 2
Операнд |
Тип |
Мнемонический код |
Операнд 2 <shifter_operand> |
Значение константы |
#32bit_Imm |
Логический сдвиг влево |
RmLSL#5bit_Imm | |
Логический сдвиг вправо |
RmLSR#5bit_Imm | |
Арифметический сдвиг вправо |
RmASR#5bit_Imm | |
Вращение вправо |
RmROR#5bit_Imm | |
Регистр |
Rm | |
Логический сдвиг влево |
RmLSLRs | |
Логический сдвиг вправо |
RmLSRRs | |
Арифметический сдвиг вправо |
RmASRRs | |
Вращение вправо |
Rm ROR Rs | |
Расширенное вращение вправо |
Rm RRX |