
- •Архитектура микроконтроллеров семейства lpc2000
- •Функциональное описание микроконтроллера lpc2148. Обзор архитектуры
- •Описание ядра
- •Режимы работы и регистровые модели arm7tdmi
- •Способы адресации и система команд
- •Типы данных
- •Режимы адресации
- •Система команд
- •Внутренние периферийные устройства
- •Таймеры
- •Задания на лабораторные работы
- •Список литературы
- •Содержание
Система команд
Процессор ARM7TDMI поддерживает два набора инструкций:
32-разрядный набор инструкций ARM;
16-разрядный набор инструкций Thumb.
Рис.6.
Форматы набора инструкций ARM
Некоторые коды инструкций не определены, но они не вызывают поиска неопределенных инструкций, например, инструкция умножения с битом 6 измененным к 1. Запрещается использовать такие инструкции, т.к. в будущем их действие может быть изменено. Результат выполнения данных кодов инструкций в составе процессора ARM7TDMI непредсказуем.
Таблица 5. Условные обозначения
Тип |
Описание |
{cond} |
Поле условия |
<Oprnd2> |
Операнд 2 |
{field} |
Поле управления |
S |
Устанавливает коды условия, опционально |
B |
Операция над байтами, опционально |
H |
Операция над полусловами, опционально |
T |
Принудительная трансляция адреса. Не может использоваться с предварительно индексированными адресами. |
#32bit_Imm |
32-разрядная константа, полученная путем сдвига вправо 8-разрядного значения на четное количество бит. |
<reglist> |
Список регистров, разделенных запятой, в фигурных скобках ( { and } ). |
Таблица 6. Краткое преставление инструкций ARM
Операции |
|
Синтаксис Ассемблера |
Пересылка |
Пересылка |
MOV {cond}{S} Rd, <Oprnd2> |
Пересылка NOT |
MVN {cond}{S} Rd, <Oprnd2> | |
Пересылка SPSR в регистр |
MRS {cond} Rd, SPSR | |
Пересылка CPSR в регистр |
MRS {cond} Rd, CPSR | |
Пересылка регистра SPSR |
MSR {cond} SPSR{field}, Rm | |
Пересылка CPSR |
MSR {cond} CPSR{field}, Rm | |
Пересылка константы во флаги SPSR |
MSR {cond} SPSR_f, #32bit_Imm | |
Пересылка константы во флаги CPSR |
MSR {cond} CPSR_f, #32bit_Imm | |
Арифметические |
Сложение |
ADD {cond}{S} Rd, Rn, <Oprnd2> |
Сложение с переносом |
ADC {cond}{S} Rd, Rn, <Oprnd2> | |
Вычитание |
SUB {cond}{S} Rd, Rn, <Oprnd2> | |
Вычитание с переносом |
SBC {cond}{S} Rd, Rn, <Oprnd2> | |
Вычитание обратного вычитания |
RSB {cond}{S} Rd, Rn, <Oprnd2> | |
Вычитание обратного вычитания с переносом |
RSC {cond}{S} Rd, Rn, <Oprnd2> | |
Умножение |
MUL {cond}{S} Rd, Rm, Rs | |
Умножение-накопление |
MLA {cond}{S} Rd, Rm, Rs, Rn | |
Умножение длинных беззнаковых чисел |
UMULL {cond}{S} RdLo, RdHi, Rm, Rs | |
Умножение - беззнаковое накопление длинных значений |
UMLAL {cond}{S} RdLo, RdHi, Rm, Rs | |
Умножение знаковых длинных |
SMULL {cond}{S} RdLo, RdHi, Rm, Rs | |
Умножение - знаковое накопление длинных значений |
SMLAL {cond}{S} RdLo, RdHi, Rm, Rs | |
Сравнение |
CMP {cond} Rd, <Oprnd2> | |
Сравнение отрицательное |
CMN {cond} Rd, <Oprnd2> | |
Логические |
Проверка |
TST {cond} Rn, <Oprnd2> |
Проверка на эквивалентность |
TEQ {cond} Rn, <Oprnd2> | |
Лог. И |
AND {cond}{S} Rd, Rn, <Oprnd2> | |
Искл. ИЛИ |
EOR {cond}{S} Rd, Rn, <Oprnd2> | |
ORR |
ORR {cond}{S} Rd, Rn, <Oprnd2> | |
Сброс бита |
BIC {cond}{S} Rd, Rn, <Oprnd2>> | |
Переход |
Переход |
B {cond} label |
Переход по ссылке |
BL {cond} label | |
Переход и изменение набора инструкций |
BX {cond} Rn | |
Чтение |
слова |
LDR {cond} Rd, <a_mode2> |
слова с преимуществом режима пользователя |
LDR {cond}T Rd, <a_mode2P> | |
байта |
LDR {cond}B Rd, <a_mode2> | |
байта с преимуществом режима пользователя |
LDR {cond}BT Rd, <a_mode2P> | |
байта со знаком |
LDR {cond}SB Rd, <a_mode3> | |
полуслова |
LDR {cond}H Rd, <a_mode3> | |
полуслова со знаком |
LDR {cond}SH Rd, <a_mode3> | |
операции с несколькими блоками данных |
- | |
с предварительным инкрементом |
LDM {cond}IB Rd{!}, <reglist>{^} | |
с последующим инкрементом |
LDM {cond}IA Rd{!}, <reglist>{^} | |
с предварительным декрементом |
LDM {cond}DB Rd{!}, <reglist>{^} | |
с последующим декрементом |
LDM {cond}DA Rd{!}, <reglist>{^} | |
операция над стеком |
LDM {cond}<a_mode4L> Rd{!}, <reglist> | |
операция над стеком и восстановление CPSR |
LDM {cond}<a_mode4L> Rd{!}, <reglist+pc>^ | |
операция над стеком с регистрами пользователя |
LDM {cond}<a_mode4L> Rd{!}, <reglist>^ | |
Запись |
слова |
STR {cond} Rd, <a_mode2> |
слова с преимуществом режима пользователя |
STR {cond}T Rd, <a_mode2P> | |
байта |
STR {cond}B Rd, <a_mode2> | |
байта с преимуществом режима пользователя |
STR {cond}BT Rd, <a_mode2P> | |
полуслова |
STR {cond}H Rd, <a_mode3> | |
операции над несколькими блоками данных |
- | |
с предварительным инкрементом |
STM {cond}IB Rd{!}, <reglist>{^} | |
с последующим инкрементом |
STM {cond}IA Rd{!}, <reglist>{^} | |
с предварительным декрементом |
STM {cond}DB Rd{!}, <reglist>{^} | |
o с последующим декрементом |
STM {cond}DA Rd{!}, <reglist>{^} | |
операция над стеком |
STM {cond}<a_mode4S> Rd{!}, <reglist> | |
операция над стеком с регистрами пользователя |
STM {cond}<a_mode4S> Rd{!}, <reglist>^ | |
Обмен |
слов |
SWP {cond} Rd, Rm, [Rn] |
байт |
SWP {cond}B Rd, Rm, [Rn] | |
Сопроцессор |
Операция над данными |
CDP {cond} p<cpnum>, <op1>, CRd, CRn, CRm, <op2> |
Пересылка в ARM-регистр из сопроцессора |
MRC {cond} p<cpnum>, <op1>, Rd, CRn, CRm, <op2> | |
Пересылка в сопроцессор из ARM-регистра |
MCR {cond} p<cpnum>, <op1>, Rd, CRn, CRm, <op2> | |
Чтение |
LDC {cond} p<cpnum>, CRd, <a_mode5> | |
Запись |
STC {cond} p<cpnum>, CRd, <a_mode5> | |
Программное прерывание |
SWI 24bit_Imm |
<shifter_operand>
Операнд является частью инструкции, которая ссылается на данные или периферийное устройство.
Таблица 7. <shifter_operand>
Операнд |
Тип |
Мнемонический код |
Операнд 2 <Oprnd2> |
Значение константы |
#32bit_Imm |
Логический сдвиг влево |
Rm LSL #5bit_Imm | |
Логический сдвиг вправо |
Rm LSR #5bit_Imm | |
Арифметический сдвиг вправо |
Rm ASR #5bit_Imm | |
Вращение вправо |
Rm ROR #5bit_Imm | |
Регистр |
Rm | |
Логический сдвиг влево |
Rm LSL Rs | |
Логический сдвиг вправо |
Rm LSR Rs | |
Арифметический сдвиг вправо |
Rm ASR Rs | |
Вращение вправо |
Rm ROR Rs | |
Расширенное вращение вправо |
Rm RRX |
Поля
Таблица 8. Поля
Тип |
Суффикс |
Установки |
Бит |
Поле {field} |
_c |
Бит-маска поля управления |
3 |
_f |
Бит-маска поля флагов |
0 | |
_s |
Бит-маска поля статуса |
1 | |
_x |
Бит-маска поля расширения |
2 |
Поля условий
Таблица 9. Поля условий
Тип поля |
Суффикс |
Описание |
Условие |
Условие {cond} |
EQ |
Равно |
Z=1 |
NE |
Неравно |
Z=0 | |
CS |
Беззнаковое больше или равно |
C=1 | |
CC |
Беззнаковое меньше |
C=0 | |
MI |
Отрицательное |
N=1 | |
PL |
Положительное или ноль |
N=0 | |
VS |
Переполнение |
V=1 | |
VC |
Нет переполнения |
V=0 | |
HI |
Беззнаковое больше |
C=1, Z=0 | |
LS |
Беззнаковое меньше или равно |
C=0, Z=1 | |
GE |
Больше или равно |
N=V (N=V=1 или N=V=0) | |
LT |
Меньше |
N<>V (N=1 и V=0) или (N=0 и V=1) | |
GT |
Больше |
Z=0, N=V (N=V=1 или N=V=0) | |
LE |
Меньше или равно |
Z=0 или N<>V (N=1 и V=0) или (N=0 и V=1) | |
AL |
Всегда истинный |
флаги игнорируются | |
|
|
|
|
ПАМЯТЬ
При разработке интерфейса памяти процессора ARM7TDMI стояла задача максимально полностью использовать потенциал по быстродействию и при этом минимизировать использование памяти. Чтобы обеспечить возможность реализации функций системного управления на основе стандартной маломощной логики критичные к быстродействию сигналы управления были конвейеризованы. Данные сигналы управления упрощают использование быстродействующих пакетных режимов передачи, которые используются большинством встроенной и внешней технологий памяти.
Ядро ARM7TDMI поддерживает четыре основных цикла доступа к памяти:
холостой цикл
непоследовательный цикл
последовательный цикл
цикл передачи регистра сопроцессора.
Процессор ARM7TDMI рассматривает память, как линейную совокупность байт, пронумерованных в возрастающем порядке, начиная с 0.
Например, байты 0..3 представляют первое записанное слово;
байты 4...7 представляют второе записанное слово.
Процессор ARM7TDMI поддерживает оба порядка следования байт многобайтных слов в памяти:
Прямой порядок байт (Little-endian), когда сначала следует младший, а затем старший байты.
Обратный порядок байт (Big-Endian), когда сначала следует старший, а затем младший байты.
По умолчанию у ARM-процессоров используется прямой порядок байт (Little-endian).
Формат следования байт ЦПУ указывает, где в слове размещается старший значащий байт или разряд. Поскольку при запуске ЦПУ значения вычисляются, начиная с младших значащих разрядов, то прямой порядок устанавливается автоматически.
Конфигурация порядка следования байт не зависит от типа хранимых данных (слова, полуслова или байты).
Прямой порядок (Little-endian)
В формате прямого порядка, байт с наименьшим адресом в слове рассматривается как младший значащий байт слова, а байт с наибольшим адресом - старший значащий байт. Т.о., байт по адресу 0 системы памяти соединяет с линиями данных 7...0. На рисунке 2.5 показывается, как слово по адресу А, полуслова по адресам А и А+2, а также байты по адресам А, А+1, А+2, А+3 соотносятся между собой при конфигурации ядра к прямому порядку.
Рис.17
Адреса байт и полуслов в слове при прямом
порядке (Little-endian)
Обратный порядок (Big-Endian)
В формате обратного порядка, процессор ARM7TDMI запоминает старший значащий байт слова в позиции байта с наименьшим порядковым номером, а младший байт - в позиции байта с наибольшим порядковым номером. Т.о., байт по адресу 0 системы памяти связан с линиями данных 31..24.