В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > ARM
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


12. Обзор процессора ARM7TDMI

12.1 Обзор

Ядро ARM7TDMI способен выполнять как 32-битные ARM® команды, так и 16-битные Thumb® команды, что позволяет пользователю сделать оптимальный выбор между производительностью и размером кода. Процессор ARM7TDMI реализован по фон-неймановской архитектуре, использующей трехступенчатое конвейерное выполнение команд: Выборка, Декодирования и Выполнение.

Основные отличительные особенности процессора ARM7TDMI:

  • Ядро ARM7TDMI, основанное на архитектуре ARMv4T
  • Двойная система команд
    • 32-битная система команд ARM® с высокой производительностью
    • 16-битная система команд Thumb ® с высокой плотностью кода
  • Трехступенчатый конвейер команд
    • Выборка команды (F)
    • Декодирование команды (D)
    • Выполнение (E)

12.2 Процессор ARM7TDMI

Для получения более подробной информации по ядру ARM7TDMI обращайтесь к следующим документам:

12.2.1 Типы выполняемых команд

Любые выполняемые команды ARM7TDMI могут быть либо 32-разрядными (в состоянии ARM), либо 16-разрядными (в состоянии THUMB).

12.2.2 Типы поддерживаемых данных

ARM7TDMI поддерживает работу со следующими типами данных: байт (8 бит), полуслово (16 бит), целое слово (32 бита). При выполнении команд работы с целыми словами, адреса последних должны быть выровнены по четырехбайтной границе, а адреса полуслов - по двухбайтной границе.

Поведение процессора ARM7TDMI при выполнении команд с данными, размещенными по не выровненным адресам (в зависимости от типа самих данных), зависит только от текущего режима работы ядра.

12.2.3 Режимы работы ARM7TDMI

Ядро ARM7TDMI, основанное на ARM архитектуре v4T, поддерживает работу в семи режимах:

Пользовательский режим (user): обычный режим работы программы
Быстрое прерывание (FIQ): используется для высокоскоростной передачи данных между процессами (задачами) и внутренними периферийными модулями
Прерывание (IRQ): используется для обработки прерываний общего назначения
Режим супервизора (supervisor): защищенный режим для работы операционных систем
Аварийный режим (abort): поддержка работы виртуальной памяти и/или ее защиты
Системный режим (system): привилегированный режим для ядра операционной системы
Неопределенный режим (undefined): программная эмуляция аппаратных сопроцессоров

Смена режима может осуществляться либо программно, либо по внешнему событию (например, внешнему прерыванию), либо по возникновению исключительной ситуации. Подавляющее большинство прикладных программ создано для работы в пользовательском режиме (user).

12.2.4 Регистры ARM7TDMI

Процессор ARM7TDMI имеет в своем составе всего тридцать семь 32-битных регистров:

  • 31 регистр общего назначения
  • 6 регистров состояния ядра

Все эти 37 регистров недоступны в один и тот же момент времени. Набор регистров, которые доступны из прикладной программы единовременно, зависит от текущего состояния ядра.

В любом состоянии ядра ARM7TDMI доступно не более 16 регистров, при этом все остальные регистры являются их синонимами, а обращение к ним может быть использовано с целью ускорения работы самой программы.

Регистр 15 является программным счетчиком (PC) и может использоваться в любой команде для относительного доступа к данным в памяти (относительно адреса самой команды).

Регистр 14 используется для хранения адреса возврата из последней вызванной подпрограммы.

Регистр 13 используется для хранения адреса вершины программного стека.

Таблица 12-1. Карта размещения регистров ARM7TDMI в различных состояниях ядра ARM

Пользоват. и системный режимы Режим Супервизора Аварийный Режим Неопредел. режим Прерывание Быстрое прерывание
R1 R1 R1 R1 R1 R1
R2 R2 R2 R2 R2 R2
R3 R3 R3 R3 R3 R3
R4 R4 R4 R4 R4 R4
R5 R5 R5 R5 R5 R5
R6 R6 R6 R6 R6 R6
R7 R7 R7 R7 R7 R7
R8 R8 R8 R8 R8 R8_FIQ
R9 R9 R9 R9 R9 R9_FIQ
R10 R10 R10 R10 R10 R10_FIQ
R11 R11 R11 R11 R11 R11_FIQ
R12 R12 R12 R12 R12 R12_FIQ
R13 R13_SVC R13_ABORT R13_UNDEF R13_IRQ R13_FIQ
R14 R14_SVC R14_ABORT R14_UNDEF R14_IRQ R14_FIQ
PC PC PC PC PC PC
 
CPSR CPSR CPSR CPSR CPSR CPSR
  SPSR_SVC SPSR_ABORT SPSR_UNDEF SPSR_IRQ SPSR_FIQ
  регистры с банковым размещением

Регистры R0…R7 - регистры общего назначения с небанковым размещением. Это означает, что физически размещение этих регистров не зависит от рабочего состояния ядра процессора. Более того, ядро процессора не использует эти регистры в своих целях, т.е. каждый из них может использоваться в прикладной программе как обычные регистры.

Регистры R8…R14 - регистры с банковым размещением. Это означает, что физически размещение этих регистров зависит от рабочего состояния ядра процессора.

12.2.4.1 Режимы исключительных ситуаций и их обработка

Во всех исключительных ситуация ядра используются регистры R13 и R14.

Сразу после возникновения исключительно ситуации в регистре R14 размещается адрес той команды, выполнение которой вызвало эту исключительную ситуацию. После обработки исключительной ситуации производится возврат в прерванную основную программу. Возврат возможен либо по адресу прерванной команды, либо в любое другое место программы (изменение содержимого регистра R14).

Регистр R13 используется для поддержки работы своего программного стека для каждого из режимов ядра процессора. В режиме быстрого прерывания (FIQ) выполняется аппаратное сохранение и восстановление регистров R8…R12.

Из всех семи режимов ядра процессора только системный режим не имеет собственных банковых регистров, поэтому он использует в своей работе регистры пользовательского режима.

Из всех семи режимов ядра процессора только системный режим не имеет собственных банковых регистров, поэтому он использует в своей работе регистры пользовательского режима. Задачи, которые требуют своего выполнения в привилегированном режиме, могут быть запущены в системном режиме, что позволит отслеживать все классы исключительных ситуаций.

12.2.4.2 Статусные регистры процессора

Все режимы работы ядра процессора размещаются в статусных регистрах. Текущее состояние ядра процессора находится в статусном регистре текущей программы (CPSR). Этот регистр имеет указанные следующие поля.

  • четыре флага АЛУ: минус, ноль, перенос и переполнение (N, Z, C,V)
  • два бита запрета прерываний (один для IRQ и один для FIQ)
  • один бит, определяющий текущий режим ядра: ARM или Thumb
  • пять бит, определяющих текущее состояние ядра процессора

Все пять исключительных состояний ядра имеют сохраненный статусный регистр текущей программы (SPSR), который хранит содержимое регистра CPSR при возникновении исключительной ситуации.

12.2.4.3 Типы исключительных ситуаций

Ядро поддерживает пять типов исключительных ситуаций, работающих в привилегированном режиме. Ниже приведен их список:

  • быстрое прерывание (FIQ)
  • обычное прерывание (IRQ)
  • аварийная ситуация при работе с памятью (используется для реализации защищенного режима работы памяти или виртуальной памяти)
  • сбой при выполнении команды или выполнение несуществующей команды
  • программные прерывания (SWI)

Исключительные ситуации вызываются от внешних или внутренних источников.

В один и тот же момент времени могут возникать две и более исключительных ситуации.

Сразу после возникновения исключительной ситуации для сохранения PC используется регистр R14, а для хранения регистра CPSR - регистр SPSR (для соответствующего состояния ядра).

После обработки исключительной ситуации содержимое регистра SPSR копируется в регистр CPSR, а содержимое R14 копируется в программный счетчик PC. Для осуществления этого существуют два способа:

  • выполнение команды обработки данных с установленным битом S и указанием регистра PC в качестве регистра-получателя
  • выполнение команды групповой загрузки регистров (LDM) с восстановлением CPSR

12.2.5 Обзор системы команд в режиме ARM

Все команды в режиме ARM делятся на следующие группы:

  • Команды перехода
  • Команды обработки данных
  • Команды передачи статусного регистра
  • Команды загрузки/хранения
  • Команды сопроцессоров
  • Команды обработки исключительных ситуаций

Команды в режиме ARM могут выполняться по условию. Для этого в коде каждой команды присутствует 4-битное поле условия: биты [31:28].

В таблице 12-2 приведен полный список команд в режиме ARM.

Таблица 12-2. Список команд в режиме ARM

Мнемоника Команда
ADC Сложение с переносом
ADD Сложение
AND Логическое И
B Переход
BIC Очистить бит
BL Переход со ссылкой
BX Переход и переключение режима ядра
CDP Обработать данные сопроцессором
CMN Сравнить с отрицательным операндом
CMP Сравнение
EOR Исключающее ИЛИ
LDC Загрузить в сопроцессор из памяти
LDM Загрузить сразу несколько регистров
LDR Загрузить регистр из памяти по указанному адресу
LDRB Загрузка байта
LDRBT Загрузка байта с переводом
LDRSB Загрузка байта со знаком
LDRT Загрузка слова с переводом
LDRSH Загрузка полуслова со знаком
LDRH Загрузка полуслова
MCR Скопировать регистр CPU в регистр сопроцессора
MLA Умножение со сложением
MOV Загрузить в регистр константу
MRC Скопировать регистр сопроцессора в регистр CPU
MRS Переместить регистр статуса/флагов PSR в регистр Rn
MSR Загрузить в PSR статус/флаги указанный регистр
MUL Умножение
MVN Загрузить регистр отрицательной константой
ORR Логическое ИЛИ
RSB Обратное вычитание
RSC Обратное вычитание с переносом
SBC Вычитание с переносом
SMULL Умножение со знаком с 64-битным результатом
SMLAL Умножение со знаком с 64-битным результатом и накоплением
STC Сохранить регистр сопроцессора в памяти
STM Сохранить сразу несколько регистров
STR Сохранить регистр в памяти
SUB Вычитание
SWI Программное прерывание
SWP Обменять местами содержимое регистра и памяти
TEQ Побитовая проверка на равенство
TST Проверка битов
UMULL Умножение без знака с 64-битным результатом
UMLAL Умножение без знака с 64-битным результатом и накоплением

12.2.6 Обзор системы команд в режиме Thumb

Система команд ядра в режиме Thumb является подмножеством команд в режиме ARM.

Все команды в режиме Thumb делятся на следующие группы:

  • Команды перехода
  • Команды обработки данных
  • Команды загрузки/хранения
  • Команды пакетной загрузки/хранения
  • Команды обработки исключительных ситуаций

В режиме Thumb доступны для работы восемь регистров общего назначения: R0…R7. Эти регистры являются физически теми же самыми регистрами в режиме ARM. Некоторые Thumb команды также имеют доступ к программному счетчику PC (ARM регистр R15), регистру ссылки LR (ARM регистр R14) и указателю на вершину стека (ARM регистр R13). Все остальные Thumb команды не имеют доступа к регистрам ядра R8…R15.

Мнемоника Команда
ADC Сложение с учетом переноса
ADD Сложение
AND Логическое "И"
ASR Арифметический сдвиг вправо
B Безусловный переход
Bxx Переход по условию
BIC Сброс битов (маскирование)
BL Переход со ссылкой
BX Переход и смена режима ядра
CMN Сравнение с отрицанием
CMP Сравнение
EOR Исключающее "ИЛИ"
LDMIA Групповая загрузка регистров
LDR Загрузка целого слова
LDRB Загрузка байта
LDRH Загрузка полуслова
LSL Логический сдвиг влево
LDSB Загрузка байта со знаком
LDSH Загрузка полуслова со знаком
LSR Логический сдвиг вправо
MOV Пересылка
MUL Умножение
MVN Пересылка с инверсией
NEG Инверсия (побитовое "НЕ")
ORR Логическое "ИЛИ"
POP Извлечение регистров из вершины стека
PUSH Размещение регистров в вершине стека
ROR Циклический сдвиг вправо
SBC Вычитание с переносом
STMIA Групповое сохранение регистров
STR Сохранение целого слова
STRB Сохранение байта
STRH Сохранение полуслова
SWI Программное прерывание
SUB Вычитание
TST Побитовая проверка


<--Предыдущая страница Оглавление Следующая страница -->