Главная
Новости рынка
Рубрикатор



Архив новостей -->



 



   

А. Емелин, И. Шагурин

RISC-микроконтроллеры с процессорным ядром ARM. Часть 1

В последние годы всё более широкую популярность приобретают высокопроизводительные 32-разрядные микроконтроллеры, использующие процессорное ядро ARM. Такие микроконтроллеры выпускаются многими известными производителями: Atmel, Samsung, Intel, Motorola, Cirrus Logic, Oki и другими. Они привлекают пользователей низким значением соотношения "цена/качество", что обусловило их широкое применение в разнообразных устройствах. Ряд этих изделий используется российскими производителями для создания современной электронной аппаратуры различного назначения, поэтому представляется полезным ознакомление широкого круга российских специалистов с этим перспективным классом микроконтроллеров.

Процессорное ядро ARM разработано фирмой Advanced RISC Maсhines (Великобритания), которая к настоящему времени предоставила потребителям целый ряд их модификаций, образующих ряд семейств. Эти семейства представлены на рис. 1 в порядке повышения их функциональных возможностей. Все ядра совместимы по системе команд "снизу-вверх", что позволяет использовать в последующих разработках программное обеспечение, созданное для предыдущих модификаций микроконтроллеров.

Процессорные ядра фирмы ARM
Рисунок 1. Процессорные ядра фирмы ARM

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

  • поведенческое описание на языке VHDL или Verilog (такие ядра называются синтезируемыми);
  • электрическая схема процессорного ядра;
  • топологическая макроячейка (описание топологии ядра для реализации в составе интегральной микросхемы).

Используя ту или иную форму представления, производители создают различные модели микроконтроллеров, дополняя процессорное ядро набором необходимых периферийных устройств. При изготовлении последних моделей микроконтроллеров используется современная микроэлектронная технология, обеспечивающая минимальные размеры 0,25, 0,18 или 0,13 мкм. При этом получены характеристики процессорных ядер, приведённые в табл. 1.

Таблица 1. Характеристики процессорных ядер ARM

Ядро MIPS/МГц Площадь, мм² Потребление, мВт/МГц Тактовая частота Кэш-память MMU
0,25 мкм
ARM7TDMI 0,9 1,02 0,78 60–70    
ARM7TDMI-S 0,9 1,20 1,10 60–70    
0,18 мкм
ARM7TDMI 0,9 0,59 0,30 80–110    
ARM7TDMI-S 0,9 0,62 0,39 80–110    
ARM7EJ-S 1,0 0,85 0,40 80–110    
ARM940T 1,1 4,2 0,75 180–200 4K/4K MPU
ARM946E-S 1,1 5,0 1,00 150–170 0…1М MPU
ARM966E-S 1,1 4,0 0,90 150–170    
ARM720T 1,1 3,5 0,65 60–80 8K +
ARM920T 1,1 6,0 0,25 220–270 16K/16K +
ARM922T 1,1 3,5 0,25 220–270 180–200 +
ARM926EJ-S 1,0 6,5 1,40 180–200 4К…128К +
0,13 мкм
ARM7TDMI 0,9 0,30 0,08 100–133    
ARM7TDMI-S 0,9 0,32 0,11 100–133    
ARM7EJ-S 1,0 0,42 0,12 100–133    
ARM940T 1,1 2,1 0,20 220–250 4K/4K MPU
ARM946E-S 1,1 2,5 0,25 180–210 0…1М MPU
ARM966E-S 1,1 2,0 0,22 180–210    
ARM720T 0,9 1,8 0,20 100–120 8K +
ARM920T 1,1 6,0 0,25 220–270 16K/16K +
ARM922T 1,1 3,5 0,25 220–270 8K/8K +
ARM926EJ-S 1,0 3,2 0,35 220–270 4К…128К +
ARM1020E 1,23 10,3 0,60 270–325 32K/32K +
ARM1022E 1,23 6,7 0,60 270–325 16K/16K +

Пользователь-разработчик аппаратуры имеет дело с процессорными ядрами ARM, функционирующими в составе готовой микросхемы микроконтроллера.

В настоящее время самым младшим в ряду процессорных ядер ARM является семейство ARM7 Thumb, которое пришло на смену ARM6 Thumb. Это ядро с 32-разрядной целочисленной RISC-архитектурой, обеспечивающее производительность 130 млн.оп./с. Ядро очень компактно — при производстве по технологии 0,18 мкм базовая модификация ARM7TDMI занимает площадь всего 0,59 мм2, при этом энергопотребление ядра составляет не более 0,25 мВт/МГц. Ядра ARM7TDMI-S и ARM7EJ-S являются синтезируемыми. Ядро ARM7EJ-S отличается от базового наличием операций, ориентированных на цифровую обработку сигналов (DSP), и поддержкой технологии Jazelle для ускорения работы Java-приложений.

Макроячейка ARM720T имеет в своём составе модуль управления памятью (MMU), который обеспечивает трансляцию логических адресов в физические, а также реализует функции защиты памяти. При использовании MMU память разбивается на секции размером 1 Мбайт, а секции могут быть разбиты на страницы размером 4 или 64 Кбайт. Наличие MMU позволяет использовать на данном процессоре операционные системы класса Linux, Windows CE или Palm OS.

Ячейка ARM740T является упрощённой версией ARM720T, в которой вместо модуля MMU присутствует модуль защиты памяти (MPU). Модуль MPU не поддерживает логической адресации (секции, страницы). Вместо этого можно выделить до 8 отдельных линейных областей памяти, задав для них определённые правила доступа.

Макроячейки ARM720T и ARM740T имеют в своём составе кэш-память объёмом 8 Кбайт. Микроконтроллеры с ядрами ARM7 Thumb применяются в цифровых аудиоплеерах, пейджерах, принтерах, карманных компьютерах.

Ядра семейства ARM7 имеют традиционную архитектуру фон-Неймана с общей памятью команд и данных. В последующих семействах ARM9, ARM10 реализуется гарвардская архитектура с раздельной внутренней кэш-памятью команд и данных.

Семейство ARM9 Thumb является развитием ARM7 Thumb по составу периферии и набору команд. Оно разработано для применения в портативных устройствах с высокими требованиями к быстродействию и энергопотреблению. Быстродействие вычислительного ядра достигает 220 млн.оп./с при потреблении 0,3 мВт/МГц. В настоящее время семейство представлено мак-роячейками ARM920T, ARM922T и ARM940T. Все они имеют отдельные кэши команд и данных, которые отличаются объёмом: 16К/16K, 8K/8K и 4K/4K, соответственно. Кроме того, ARM920T и ARM922T имеют отладочный интерфейс ETM и модуль управления памятью.

Группа синтезируемых ядер ARM9E-S Thumb выделяется фирмой ARM в отдельное семейство. Они имеют расширения для поддержки алгоритмов цифровой обработки сигналов (DSP), в том числе умножитель-накопитель (MAC). В ядро может быть включен математический сопроцессор VFP9-S, поддерживающий операции с плавающей точкой над данными двойной точности. Для синтезируемых ядер ARM946E-S и ARM926EJ-S возможна реализация кэш-памяти различного объёма: от 0 до 1М и от 4К до 128К, соответственно.

Основные области применения ядер ARM9 Thumb и ARM9E-S Thumb — цифровые системы телекоммуникации и реализация сложных алгоритмов управления. Микроконтроллеры на их основе используются в мобильных телефонах, модемах, сетевых картах, карманных компьютерах, автомобильной электронике. Благодаря DSP-расширениям ядро ARM9E-S Thumb может быть эффективно использовано в аудиокодировании (реализация протоколов AC3, MPEG), передаче голоса через Интернет и в антипробуксовочных тормозных системах (ABS).

Семейство ARM10 Thumb в настоящее время активно развивается. Фирма ARM осуществляет запланированный перевод ядра с технологии 0,15 мкм на 0,11. К 2003 году его быстродействие должно возрасти с 390 до 700 млн.оп./с, а энергопотребление сократиться до 0,3 мВт/МГц. Это ядро обладает следующими особенностями:

  • независимые 64-разрядные шины адреса и данных;
  • кэш-память команд и данных ёмко-стью по 16 или 32 Кбайт;
  • отдельные модули управления памятью команд и данных;
  • встроенный математический сопроцессор VFP10;
  • реализация режимов пониженного энергопотребления;
  • DSP-расширения системы команд;
  • встроенный умножитель.

Микроконтроллеры семейства ARM10 Thumb целесообразно применять в устройствах, требующих высокой производительности процессора. Совместно с математическим сопроцессором, ядра ARM10 способны решать, например, задачи цифровой обработки изображений и трёхмерной графики.

Микроконтроллеры семейства StrongARM являются совместной разработкой фирм ARM и Intel. Они предназначены в первую очередь для использования в портативных мультимедийных устройствах класса Palm PC. Ядро StrongARM является модификацией ядра ARM7, в котором не реализуется режим Thumb (работа с 16-разрядным форматом команд). В настоящее время на базе ядра StrongARM выпускается микроконтроллер SA-1110, который имеет в своём составе:

  • кэш команд объёмом 16 Кб и кэш данных объёмом 8 Кб;
  • мини-кэш, позволяющий ускорить обработку больших объёмов данных, сгруппированных последовательно;
  • устройства управления памятью программ и данных;
  • схемы управления прерываниями, энергопотреблением, сбросом, умножением частоты генератора;
  • контроллер внешней памяти;
  • контроллер прямого доступа к памяти;
  • контроллер жидкокристаллического дисплея;
  • интерфейсы USB, UART, SDLC, IrDA;
  • кодек, осуществляющий кодирование/декодирование аудиосигналов и сигналов от сенсорной панели индикатора.

Фирмой Intel разработана также микросхема SA-1111, которая работает совместно с SA-1110, обеспечивая расширение её возможностей. Микросхема SA-1111 имеет дополнительный порт USB, а также реализует интерфейсы с клавиатурой и мышью, PCMCIA-платами расширения.

В данной статье рассмотрены микроконтроллеры с ядром ARM7TDMI, которые являются наиболее массовыми и дешёвыми. Полное описание всех процессоров ARM можно найти на сайте производителя www.arm.com.

Архитектура процессорного ядра ARM7TDMI

Подробное описание ядра ARM7TDMI дано в [1]. Следует отметить следующие особенности его архитектуры:

  • ядро может функционировать в двух состояниях: ARM и THUMB. В состоянии ARM процессор выполняет 32-разрядные команды, в состоянии THUMB — 16-разрядные команды;
  • наличие трёхступенчатого конвейера позволяет выполнять последовательно поступающие команды за один такт (в том числе команды умножения);
  • ядро поддерживает функционирование внешнего сопроцессора;
  • в состав ядра включены отладочные интерфейсы JTAG и ETM.

Режимы работы и регистровые модели процессора ARM7TDMI

В состоянии ARM процессор может функционировать в одном из следующих режимов:

  1. User - выполнение программ пользователя.
  2. Supervisor - работа под управлением операционной системы (ОС), которая оперирует данными, недоступными программам пользователя.
  3. System - режим выполнения системных программ, при котором ОС работает с данными пользователя.
  4. IRQ - режим обработки прерываний, в который попадает процессор при поступлении запроса прерывания низшего уровня на вход IRQ.
  5. FIQ (Fast IRQ) - режим быстрой реакции на прерывания, в который попадает процессор при поступлении запроса высшего уровня на вход FIQ.
  6. Abort - режим, который реализуется при ошибке обращения к памяти (ошибки такого рода — обращение по несуществующему адресу, попытка записи в ПЗУ и другие, фиксируются контроллером прерываний, который выдаёт процессорному ядру запрос Abort).
  7. Undefined - режим реализуется при выборке неправильного кода команды.

Для каждого режима функционирования имеется соответствующая регистровая модель, которая содержит набор 32-разрядных регистров, доступных в этом режиме (рис. 2).

Регистровые модели процессора в состоянии ARM
Рисунок 2. Регистровые модели процессора в состоянии ARM

В базовом режиме User, в котором процессор работает основную часть времени, используются 32-разрядные регистры R0-R15 и регистр состояния CPSR. Регистр R15 выполняет функции программного счётчика PC. Регистр R14 (LR - Link Register) используется при вызовах подпрограмм как регистр связи, в котором сохраняется текущее содержимое PC для возвращения к основной программе. Для организации стека рекомендуется использовать регистр R13 (SP - Stack Pointer) в качестве указателя стека.

Все регистры имеют дополнительные имена, определённые стандартом фирмы ARM [2], которые приведены на рис. 2 в скобках. Этот документ регламентирует использование регистров при вызове подпрограмм и организации передачи данных между ними и предназначен, главным образом, для разработчиков компиляторов:

  • Регистры a1 - a4 (argument 1 – 4) используются для передачи параметров подпрограммам.
  • Регистры v1 - v8 ~(variable 1 - 8) используются для хранения локальных переменных.
  • Регистр IP (Intra-Procedure-call scratch register) - служит для хранения промежуточных данных между вызовами процедур.

Регистр состояния CPSR содержит следующие биты (рис. 3):

Формат регистра CPSR
Рисунок 3. Формат регистра CPSR

  • M4-0 - определяют режим работы процессора в соответствии с табл. 2;
  • T - задаёт состояние процессора: ARM (при T = 0) или THUMB (при T = 1);
  • I, F - маскируют (запрещают обработку) прерываний IRQ и FIQ;
  • N, Z, C, V - являются признаками знака (N), нуля (Z), переноса (С) и переполнения (V), значения которых устанавливаются в соответствии с результатом очередной операции.

Таблица 2.Режимы процессора

M4-0 Режим
1 0 0 0 0 User
1 0 0 0 1 FIQ
1 0 0 1 0 IRQ
1 0 0 1 1 Supervisor
1 0 1 1 1 Abort
1 1 0 1 1 Undefined
1 1 1 1 1 System

Запись нового содержимого в регистр CPSR возможна во всех режимах, кроме User. Эти режимы называются привилегированными.

При запуске процессор начинает работу в режиме Supervisor. Переход в режим User реализуется путём записи в регистр CSPR содержимого, в котором биты M4-0 = 10000. Обратное переключение из режима User в Supervisor производится только при поступлении команды программного прерывания SWI. Таким образом обеспечивается доступ пользователя к ресурсам операционной системы. Программа Supervisor получает доступ ко всем регистрам модели User, если выполнит переход в режим System, записав в регистр СPSR значение битов M4-0 = 11111. Переход в режимы IRQ, FIQ, Abort, Undefinied осуществляется автоматически при поступлении соответствующих запросов или событий.

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

Для каждого режима имеются отдельные регистры R13 (SP), R14 (LR). Поэтому при переключении режимов сохраняется текущее содержимое указателя стека и регистра связи. Таким образом при возвращении к данному режиму обеспечивается обращение к вершине стека и возможность возврата к основной программе, если производился вызов подпрограммы.

При переходе в режим FIQ (поступление запроса прерывания на вход FIQ) сохраняется текущее содержимое регистров R8-R12, вместо которых в этом режиме используются регистры R8_fiq - R12_fiq (рис. 2). Поэтому при обработке данного прерывания нет необходимости сохранять содержимое этих регистров в стеке. В ряде случаев это обеспечивает более быстрый переход к обработчику прерываний и возврат из него.

Способы адресации и система команд

Процессор использует способы адресации операндов, представленные в табл. 3.

Таблица 3. Способы адресации

Обозначение Название
#Imm Непосредственная
Rn Регистровая
Rn, shift #n Регистровая с масштабированием
[Rn] Косвенно-регистровая
[Rn,±Imm] {!} Преиндексная с непосредственным смещением
[Rn,±Rm] {!} Преиндексная с регистровым смещением
[Rn,±Rm, shift #n] Преиндексная с масштабированным регистровым смещением
[Rn],±Rm Постиндексная с регистровым смещением
[Rn],±Rm, shift #n Постиндексная с масштабированным регистровым смещением

При непосредственной адресации операнд Imm входит в состав команды. При регистровой адресации в команде задаётся имя регистра Rn, содержимое которого является операндом или результатом операции.

Особенностью системы команд ARM является наличие регистровой адресации с масштабированием. При масштабировании содержимое регистра Rn сдвигается на число разрядов n, указанное в команде (от 1 до 31). Вместо "shift" в ассемблерном тексте используется один из четырёх символов, задающих вид реализуемого сдвига:

  • LSL — логический сдвиг влево;
  • LSR — логический сдвиг вправо;
  • ASR — арифметический сдвиг вправо;
  • ROR — циклический сдвиг вправо.

Таблица 4. Суффиксы для организации условных операций

Суффикс Логическое выражение Условие
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 Больше или равно
GE N = V Больше или равно
LT N V Меньше
GT Z = 0, N = V Больше
LE Z = 1, N V Меньше или равно
AL   Всегда

Таким образом различные сдвигов реализуются с помощью команды пересылки MOV (табл. 5), используя регистровую адресацию с масштабированием. При выполнении арифметических и логических сдвигов последний выдвигаемый разряд поступает в регистр CPSR в качестве признака переноса C. При циклическом сдвиге бит C включается в цепь сдвига, только если число разрядов сдвига задано равным нулю. В этом случае выполняется циклический сдвиг операнда на один разряд вправо через бит C в регистре CPSR.

Таблица 5. Команды пересылки

Мнемокод Команда Операция
LDM Групповая загрузка содержимого регистров из памяти  
LDR Загрузка регистра из памяти Rd := (адрес)
MOV Пересылка регистра или константы Rd := Op2
MRS Пересылка из CPSR или SPSR в регистр Rn := CPSR (SPSR)
MSR Пересылка из регистра в СPSR или SPSR CPSR (SPSR): = Rm
MVN Пересылка с побитной инверсией Rd := НЕ Op2
STM Групповое сохранение содержимого регистров в памяти  
STR Пересылка из регистра в память <адрес> := Rn
SWP Обмен содержимого регистра и памяти Rd := [Rn], [Rn] := Rm

При косвенно-регистровой адресации содержимое указанного регистра Rn содержит адрес ячейки памяти, где хранится операнд или результат.

Индексная адресация имеет две разновидности: пре-индексная и пост-индексная. В случае пре-индексной адресации адресом служит содержимое базового регистра Rn, которое индексируется перед выполнением операции путём сложения или вычитания непосредственного операнда Imm, содержимого регистра Rm или масштабированного содержимого Rm. Если в поле операнда содержится символ {!}, то индексированное содержимое Rn сохраняется после выполнения операции. В случае пост-индексной адресации адресом служит содержимое базового регистра Rn, которое индексируется после выполнения операции.

Ядро ARM7TDMI является RISC-процессором, поэтому оно выполняет относительно небольшой набор команд. Можно выделить следующие особенности системы команд:

  • Отсутствие аппаратной поддержки стека. Стек организуется программно, причём в качестве указателя стека рекомендуется использовать регистр R13, хотя в принципе в этой роли может быть любой другой регистр общего назначения. Обычно обращение к стеку производится с помощью команд групповой пересылки STM и LDM.
  • Установка в регистре CSPR признаков N, Z, C, V по результатам выполнения операций производится при наличии в команде суффикса S. При его отсутствии признаки в регистре CPSR не изменяются.
  • Любая команда может быть условной, если её снабдить соответствующим суффиксом. Виды условий и их суффиксы приведены в табл. 4.

При наличии суффикса AL команда выполняется безусловно - при любых значениях признаков. Условия "Выше", "Ниже", "Выше или равно", "Ниже или равно" используются при сравнении чисел без знака; условия "Больше", "Меньше", "Больше или равно", "Меньше или равно" - при сравнении чисел со знаком.

Из группы команд пересылки (табл. 5) интересны команды групповой загрузки–сохранения содержимого регистров LDM и STM. Они позволяют пересылать содержимое нескольких регистров, перечисленных в команде. В формате команды есть 16-бит поле, в котором каждый бит соответствует одному из регистров R15-0. Если бит равен единице, содержимое данного регистра сохраняется в памяти (по команде STM) или загружается из памяти (по команде LDM).

При записи в регистр CPSR с помощью команды MSR в режиме User изменяются только признаки N, Z, V, C. Остальные биты сохраняют ранее установленное значение. В любом режиме изменение бита Т с помощью команды MSR не реализуется. Для программной смены состояния процессора используется команда BX (табл. 7).

Таблица 6. Команды арифметических и логических операций

Мнемокод Команда Операция
ADC Сложение с учётом переноса Rd := Rn+Op2+C
ADD Сложение Rd := Rn+Op2
AND Логическое И Rd := Rn AND Op2
BIC Очистка битов (маскирование) Rd := Rn AND (НЕ Op2)
CMN Сравнение с отрицательным числом CPSR flags := Rn+Op2
CMP Сравнение CPSR flags := Rn–Op2
EOR Исключающее ИЛИ Rd := Rn XOR Op2
MLA Умножение с накоплением Rd := (RmґRs)+Rn
MUL Умножение Rd := RmxRs
ORR Логическое ИЛИ Rd := Rn OR Op2
RSB Обратное вычитание Rd := Op2–Rn
RSC Обратное вычитание с заёмом Rd := Op2–Rn–1+C
SBC Вычитание с заёмом Rd := Rn–Op2–1+C
SUB Вычитание Rd := Rn - Op2
TEQ Побитное сравнение CPSR flags:= Rn XOR Op2
TST Тестирование битов CPSR flags:= Rn AND Op2

Таблица 7. Команды передачи управления

Мнемокод Команда Операция
B Переход PC := PC + (rel<<1)
BL Переход с сохранением адреса возврата в LR LR := PC, PC := PC + (rel<<1)
BX Переход с возможностью смены состояния PC := Rn, T := Rn[0]
SWI Программное прерывание режим Supervisor, LR := PC, PC := 0x0008

При выполнении арифметических и логических операций (табл. 6) один из операндов размещается в регистре, второй Op2 - в регистре, ячейке памяти или задаётся непосредственно. Результат всегда размещается в регистре Rd. Отметим, что процессор не выполняет операцию деления, которая должна реализоваться программным путём (обычно вызовом соответствующей подпрограммы).

Ядро ARM выполняет несколько разновидностей операции умножения. Существуют две основные команды - простое умножение MUL и умножение с накоплением MLA. Любая из этих команд может иметь либо короткую (результат записывается в один регистр с потерей старших разрядов), либо длинную форму (произведение записывается в два регистра). При записи команды длинная форма обозначается суффиксом L. В первом случае операции умножения можно производить как со знаковыми, так и с беззнаковыми целыми числами. Длинная форма команды умножения имеет два варианта — знаковый и беззнаковый, которые отличаются префиксом: S и U, соответственно. Таким образом команда умножения имеет следующие разновидности: MUL, SMULL, UMULL. Аналогично, команда умножения с накоплением имеет разновидности MLA, SMLAL, UMLAL.

Команда обратного вычитания RSB позволяет изменить порядок записи операндов в команде вычитания. Она соответствует команде "Вычесть из операнда Op2 содержимое регистра Rn и записать в регистр Rd".

Операция CMN позволяет сравнить два операнда, у одного из которых при сравнении изменяется знак.

Команды передачи управления (табл. 7) служат для изменения хода программы. Команда перехода B с соответствующим суффиксом (табл. 4) обеспечивает выполнение условных или безусловных переходов. Переход к подпрограмме осуществляется командой BL, при этом текущее содержимое программного счётчика PC (адрес возврата) сохраняется в регистре связи LR. В качестве операнда в команде задаётся 24-разрядное смещение rel, которое сдвигается на один разряд влево и по-сле знакового расширения добавляется к текущему содержимому PC. При вызове вложенных подпрограмм необходимо программным путём организовать сохранение промежуточных значений адресов возврата (содержимого LR) в стеке, используя регистр SP в качестве указателя. Также программным путём обеспечивается, в случае необходимости, сохранение в стеке содержимого регистров. Заданный адрес перехода должен быть чётным, если процессор находится в состоянии THUMB, или кратным четырём, если процессор в состоянии ARM.

Команда BX позволяет осуществить переход с одновременным изменением состояния процессора. Адрес перехода (чётный или кратный четырём) определяется разрядами 31-1 или 31-2 содержимого регистра Rn, заданного в команде, а состояние процессора - нулевым битом этого регистра, который копируется в регистр CPSR в качестве бита T.

Команда программного прерывания SWI используется для доступа к функциям ОС. При выполнении данной команды процессор переходит в режим Supervisor, запоминает адрес возврата в регистре LR и переходит на адрес 0x0008. По этому адресу располагается команда перехода на обработчик прерывания. Отметим, что выполнение команды SWI - единственный способ, позволяющий перевести процессор из режима User в привилегированный режим Supervisor.

Специальная группа команд (табл. 8) обеспечивает совместную работу процессора с сопроцессором, который обычно представляет собой специализированный блок, изготовленный на одном кристалле с процессором. К процессорному ядру ARM может быть подключено до 16 сопроцессоров, каждый из которых может иметь до 16 собственных регистров cRn. Данные, передаваемые сопроцессору по внутренней шине, включают в себя номер сопроцессора, номера регистров сопроцессора, код операции и поле дополнительной информации (рис. 4). От сопроцессора требуется возможность принимать команду, исполнять её и выдавать на шину результат. При этом один из регистров сопроцессора cRn должен выполнять функцию регистра команд — воспринимать записанные в него данные как код операции (команду сопроцессора). После ввода в этот регистр кода операции процессор должен послать команду CDP, которая будет выполняться сопроцессором. Ввод/вывод данных в регистры сопроцессора реализуется с помощью команд LDC, STC, MCR, MPC.

Таблица 8. Команды поддержки сопроцессора

Мнемокод Команда Операция
CDP Выполнение команды сопроцессором  
LDC Загрузка данных в сопроцессор из памяти cRn := <адрес>
MCR Пересылка из регистра процессора в регистр сопроцессора cRn := Rn {<p>cRm}
MRC Пересылка из регистра сопроцессора в регистр процессора Rn := cRn {<op>cRm}
STC Сохранение регистров сопроцессора в памяти <адрес> := cRn

Форматы команд
Рисунок 4. Форматы команд

В настоящее время для семейства ARM7 фирма ARM предлагает два сопроцессора. DSP-сопроцессор позволяет ускорить выполнение операций, типичных для цифровой обработки сигналов. Jazelle-сопроцессор позволяет ускорить выполнение Java-приложений. Оба сопроцессора включены в ядро ARM7EJ-S.

Форматы команд процессора ARM представлены на рис. 4, где использованы следующие обозначения:

  • Cond - поле условия (табл. 4);
  • Rn, Rm - поля номеров регистров операндов;
  • Rd - поле регистра назначения;
  • Opcode - поле кода операции;
  • Offset - поле смещения;
  • Register List - список регистров;
  • S - разрешение установки флагов условий;
  • L - флаг направление передачи данных (в память / из памяти);
  • B - флаг байтовой операции;
  • W - разрешение индексации операнда;
  • P - флаг пре- или пост-индексной адресации;
  • U - направление изменения содержимого индексного регистра;
  • A - флаг накопления в команде умножения;
  • N - вид смещения (короткое/длинное).

Процессор использует следующие варианты форматов команд, которые приведены на рис. 4:

  1. Общий формат команд обработки данных.
  2. Формат команды умножения.
  3. Умножение длинных чисел.
  4. Команда обмена содержимого регистров.
  5. Команда перехода и смены состояния.
  6. Передача 16-разрядного полуслова — регистровое смещение.
  7. Передача 16-разрядного полуслова — непосредственное смещение.
  8. Передача 32-разрядного слова.
  9. Неопределённые коды команд.
  10. Команды групповой пересылки содержимого регистров.
  11. Команды перехода.
  12. Передача константы сопроцессору.
  13. Выполнение команды сопроцессором.
  14. Передача содержимого регистра в сопроцессор.
  15. Программное прерывание.

Литература

  1. ARM7TDMI Technical Reference Manual. rev. 3,4. ARM Limited. 1994–2001.
  2. The ARM-THUMB Procedure Call Standart. ARM Limited, 1998.






Реклама на сайте
тел.: +7 (495) 514 4110. e-mail:admin@eust.ru
1998-2014 ООО Рынок микроэлектроники