А. Емелин, И. Шагурин RISC-микроконтроллеры с процессорным ядром ARM. Часть 1В последние годы вс╦ более широкую популярность приобретают высокопроизводительные 32-разрядные микроконтроллеры, использующие процессорное ядро ARM. Такие микроконтроллеры выпускаются многими известными производителями: Atmel, Samsung, Intel, Motorola, Cirrus Logic, Oki и другими. Они привлекают пользователей низким значением соотношения "цена/качество", что обусловило их широкое применение в разнообразных устройствах. Ряд этих изделий используется российскими производителями для создания современной электронной аппаратуры различного назначения, поэтому представляется полезным ознакомление широкого круга российских специалистов с этим перспективным классом микроконтроллеров. Процессорное ядро ARM разработано фирмой Advanced RISC Maсhines (Великобритания), которая к настоящему времени предоставила потребителям целый ряд их модификаций, образующих ряд семейств. Эти семейства представлены на рис. 1 в порядке повышения их функциональных возможностей. Все ядра совместимы по системе команд "снизу-вверх", что позволяет использовать в последующих разработках программное обеспечение, созданное для предыдущих модификаций микроконтроллеров. Рисунок 1. Процессорные ядра фирмы ARM Следует отметить, что фирма ARM, являясь разработчиком процессорных ядер, не имеет собственного полупроводникового производства и не поставляет готовых кристаллов. Ядра поставляются заказчикам ≈ производителям микросхем в следующей форме:
Используя ту или иную форму представления, производители создают различные модели микроконтроллеров, дополняя процессорное ядро набором необходимых периферийных устройств. При изготовлении последних моделей микроконтроллеров используется современная микроэлектронная технология, обеспечивающая минимальные размеры 0,25, 0,18 или 0,13 мкм. При этом получены характеристики процессорных ядер, привед╦нные в табл. 1. Таблица 1.Характеристики процессорных ядер ARM
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf Пользователь-разработчик аппаратуры имеет дело с процессорными ядрами 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 мВт/МГц. Это ядро обладает следующими особенностями:
Микроконтроллеры семейства ARM10 Thumb целесообразно применять в устройствах, требующих высокой производительности процессора. Совместно с математическим сопроцессором, ядра ARM10 способны решать, например, задачи цифровой обработки изображений и тр╦хмерной графики. Микроконтроллеры семейства StrongARM являются совместной разработкой фирм ARM и Intel. Они предназначены в первую очередь для использования в портативных мультимедийных устройствах класса Palm PC. Ядро StrongARM является модификацией ядра ARM7, в котором не реализуется режим Thumb (работа с 16-разрядным форматом команд). В настоящее время на базе ядра StrongARM выпускается микроконтроллер SA-1110, который имеет в сво╦м составе:
Фирмой Intel разработана также микросхема SA-1111, которая работает совместно с SA-1110, обеспечивая расширение е╦ возможностей. Микросхема SA-1111 имеет дополнительный порт USB, а также реализует интерфейсы с клавиатурой и мышью, PCMCIA-платами расширения. В данной статье рассмотрены микроконтроллеры с ядром ARM7TDMI, которые являются наиболее массовыми и деш╦выми. Полное описание всех процессоров ARM можно найти на сайте производителя www.arm.com. Архитектура процессорного ядра ARM7TDMI Подробное описание ядра ARM7TDMI дано в [1]. Следует отметить следующие особенности его архитектуры:
Режимы работы и регистровые модели процессора ARM7TDMI В состоянии ARM процессор может функционировать в одном из следующих режимов:
Для каждого режима функционирования имеется соответствующая регистровая модель, которая содержит набор 32-разрядных регистров, доступных в этом режиме (рис. 2). Рисунок 2. Регистровые модели процессора в состоянии ARM В базовом режиме User, в котором процессор работает основную часть времени, используются 32-разрядные регистры R0-R15 и регистр состояния CPSR. Регистр R15 выполняет функции программного сч╦тчика PC. Регистр R14 (LR - Link Register) используется при вызовах подпрограмм как регистр связи, в котором сохраняется текущее содержимое PC для возвращения к основной программе. Для организации стека рекомендуется использовать регистр R13 (SP - Stack Pointer) в качестве указателя стека. Все регистры имеют дополнительные имена, определ╦нные стандартом фирмы ARM [2], которые приведены на рис. 2 в скобках. Этот документ регламентирует использование регистров при вызове подпрограмм и организации передачи данных между ними и предназначен, главным образом, для разработчиков компиляторов:
Регистр состояния CPSR содержит следующие биты (рис. 3): Рисунок 3. Формат регистра CPSR
таблица 2.Режимы процессора
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf Запись нового содержимого в регистр 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.Способы адресации
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf При непосредственной адресации операнд Imm входит в состав команды. При регистровой адресации в команде зада╦тся имя регистра Rn, содержимое которого является операндом или результатом операции. Особенностью системы команд ARM является наличие регистровой адресации с масштабированием. При масштабировании содержимое регистра Rn сдвигается на число разрядов n, указанное в команде (от 1 до 31). Вместо "shift" в ассемблерном тексте используется один из четыр╦х символов, задающих вид реализуемого сдвига:
Таблица 4.Суффиксы для организации условных операций
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf Таким образом различные сдвигов реализуются с помощью команды пересылки MOV (табл. 5), используя регистровую адресацию с масштабированием. При выполнении арифметических и логических сдвигов последний выдвигаемый разряд поступает в регистр CPSR в качестве признака переноса C. При циклическом сдвиге бит C включается в цепь сдвига, только если число разрядов сдвига задано равным нулю. В этом случае выполняется циклический сдвиг операнда на один разряд вправо через бит C в регистре CPSR. Таблица 5.Команды пересылки
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf При косвенно-регистровой адресации содержимое указанного регистра Rn содержит адрес ячейки памяти, где хранится операнд или результат. Индексная адресация имеет две разновидности: пре-индексная и пост-индексная. В случае пре-индексной адресации адресом служит содержимое базового регистра Rn, которое индексируется перед выполнением операции пут╦м сложения или вычитания непосредственного операнда Imm, содержимого регистра Rm или масштабированного содержимого Rm. Если в поле операнда содержится символ {!}, то индексированное содержимое Rn сохраняется после выполнения операции. В случае пост-индексной адресации адресом служит содержимое базового регистра Rn, которое индексируется после выполнения операции. Ядро ARM7TDMI является RISC-процессором, поэтому оно выполняет относительно небольшой набор команд. Можно выделить следующие особенности системы команд:
При наличии суффикса AL команда выполняется безусловно - при любых значениях признаков. Условия "Выше", "Ниже", "Выше или равно", "Ниже или равно" используются при сравнении чисел без знака; условия "Больше", "Меньше", "Больше или равно", "Меньше или равно" - при сравнении чисел со знаком. Из группы команд пересылки (табл. 5) интересны команды групповой загрузки√сохранения содержимого регистров LDM и STM. Они позволяют пересылать содержимое нескольких регистров, перечисленных в команде. В формате команды есть 16-бит поле, в котором каждый бит соответствует одному из регистров R15-0. Если бит равен единице, содержимое данного регистра сохраняется в памяти (по команде STM) или загружается из памяти (по команде LDM). При записи в регистр CPSR с помощью команды MSR в режиме User изменяются только признаки N, Z, V, C. Остальные биты сохраняют ранее установленное значение. В любом режиме изменение бита Т с помощью команды MSR не реализуется. Для программной смены состояния процессора используется команда BX (табл. 7). Таблица 6.Команды арифметических и логических операций
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf Таблица 7.Команды передачи управления
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf При выполнении арифметических и логических операций (табл. 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.Команды поддержки сопроцессора
В таблице могут быть мелкие неточности, поэтому рекомендуем обратиться к файлу в формате .pdf Рисунок 4.Форматы команд В настоящее время для семейства ARM7 фирма ARM предлагает два сопроцессора. DSP-сопроцессор позволяет ускорить выполнение операций, типичных для цифровой обработки сигналов. Jazelle-сопроцессор позволяет ускорить выполнение Java-приложений. Оба сопроцессора включены в ядро ARM7EJ-S. Форматы команд процессора ARM представлены на рис. 4, где использованы следующие обозначения:
Процессор использует следующие варианты форматов команд, которые приведены на рис. 4:
Литература
|
Ваш комментарий к статье | ||||