Скачиваний:
180
Добавлен:
13.06.2014
Размер:
6.55 Mб
Скачать

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

12.1 Обзор

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

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

  • Ядро ARM7TDMI, основанное на архитектуре ARMv4T

  • Двойная система команд

    • 32-битная система команд ARM® с высокой производительностью

    • 16-битная система команд Thumb ® с высокой плотностью кода

  • Трехступенчатый конвейер команд

    • Выборка команды (F)

    • Декодирование команды (D)

    • Выполнение (E)

12.2 Процессор ARM7TDMI

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

  • ARM Architecture Reference Manual (Справочное руководство по архитектуре ARM)

  • ARM7TDMI Technical Reference Manual (Справочное руководство по процессору 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

Побитовая проверка

Соседние файлы в папке ПЦиПУ. материалы для Курсового проекта Тютякин А.В.