- •Раздел 5. Микроконтроллеры arm7 семейства at91sam7 фирмы Atmel
- •Тема 5.1 Общие сведения
- •Тема 5.2 Сравнительный обзор микроконтроллеров с ядром arm7
- •Тема 5.2.1 мк семейства aDuC70xx фирмы Analog Devices
- •Тема 5.2.2 мк семейства lpc2ххх фирмы nxp
- •Тема 5.2.3 мк семейства tms470r1x фирмы Texas Instruments
- •Тема 5.2.4 мк семейства at91sam7s фирмы Atmel
- •Тема 5.3 Процессорное ядро arm7
- •Тема 5.3.1 Конвейер
- •Тема 5.3.2 Режимы работы процессора
- •Тема 5.3.3 Регистры
- •Тема 5.3.4 Регистр текущего состояния программы
- •Тема 2.3.5 Определение режима работы процессора
- •Тема 2.3.6 Обработка исключительных ситуаций
- •Тема 5.3.7 Система команд
Тема 5.3.7 Система команд
Не смотря на то, что большинство программ, исполняемых процессорами ARM7, написано на языках высокого уровня, для разработки действительно эффективных встраиваемых приложений необходимо понимать машинный код, скрывающийся под ними.
Процессор ARM7 поддерживает два набора команд: мультимедийный набор команд ARM с 32-битными командами и набор команд общего назначенияThumb с 16-битными командами.
Ядро ARM7 было разработано таким образом, что его можно использовать как в качестве процессора с обратным порядком байтов (big – endian processor), так и в качестве процессора с прямым порядком байтов (little – endian processor). В первом случае старший бит 32-битного слова располагается в начале слова, а во втором случае – в конце. В связи с этим необходимо удостовериться, что при компиляции формат слов задан правильно.
Одна из наиболее интересных особенностей набора команд ARM заключается в том, что каждая команда поддерживает условное выполнение. Старшие четыре бита кода команды всегда сравниваются с флагами условий в регистре состояния CPSR. Если их значения не совпадают, команда не выполняется и проходит через конвейер как команда NOP (пустой оператор). К базовым мнемоническим обозначениям команд ассемблера можно добавлять любой из шестнадцати префиксов, приведенных в таблице 5.7, определяющих тестируемые состояния флагов условий.
Таблица 5.7 Префиксы команд
На практике существует некоторый порог, при котором принудительное “проталкивание” команд NOP через конвейер оказывается эффективнее выполнения традиционных команд условного перехода и связанного с этим повторным заполнением буфера. Этот порог равен трем командам, поэтому короткий переход, такой как:
if(x<100)
{
x++;
}
при использовании условно выполняемых команд ARM будет реализован более эффективно.
Все множество команд ARM можно разбить на 6 основных групп:
- команды ветвления;
- команды обработки данных;
- команды передачи данных;
- команды передачи боков данных;
- команды умножения;
- команды программного прерывания.
Команды ветвления
Базовая команда перехода (В) позволяет выполнить переход в диапазоне до 32 Мбайт как вперед, так и назад. Модифицированная команда перехода с сохранением адреса (BL) выполняет туже операцию и сохраняет в регистре связи (R14 – LR) текущее состояние PC, увеличенное на четыре (из-за особенностей организации конвейера команд).
Команда перехода с сохранением адреса используется в качестве команды вызова подпрограмм, сохраняющей адрес возврата в регистре связи. Для возврата из подпрограмм можно использовать обычную команду перехода, выполняющую переход по адресу, находящемуся в регистре связи.
Используя флаги условий, можно выполнять условные вызовы подпрограмм.
Существует еще две команды перехода: «переход со сменой состояния» (ВХ) и «переход со сменой состояния и сохранением адреса» (ВLX).Эти команды осуществляют те же операции, что и предыдущие команды, но при этом еще и выполняют переключение с набора команд ARM и Thumb и обратно.
Это единственный способ, который необходимо использовать для изменения используемого набора команд, т.к. непосредственные манипуляции с флагом Т регистра состояния CPSR могут привести к непредсказуемым результатам.
Команды обработки данных
Обобщенный формат всех команд обработки данных приведен на рисунке 5.3.
Рисунок 5.3 Формат команд обработки данных
В процессоре ARM7 имеется многорегистровое устройство циклического сдвига (barrel shifter), позволяющее при выполнении команды сдвигать значение второго операнда на величину до 32-битов.
Бит S используется для управления флагами условий. Если этот бит установлен, флаги условий изменяются в соответствии с результатом выполнения команды. Если этот бит сброшен, состояние флагов условий не изменяется. Если при установленном бите S в качестве регистра результата указан счетчик команд (R15), производится копирование содержимого регистра состояния CPSR в регистр SPSR. Эта возможность используется для восстановления PC и переключения в исходный режим в конце обработки исключительных ситуаций. Выполнение такой команды не возможно в режиме User, т.к. в этом режиме регистр SPSR отсутствует, результат выполнения этой операции невозможно предсказать.
Эти особенности предоставляют богатый набор команд обработки данных, которые позволяют создавать очень эффективный программный код. Но эта же особенность создает определенные сложности при разработки компиляторов.
Копирование регистров
Процессор ARM7 поддерживает команды загрузки/сохранения, позволяющие пересылать знаковые и беззнаковые числа разного размера (слово – 32 бита, полуслово – 16 байт, байт – 8 бит) в заданных регистрах.
Данные команды способны равнозначно воздействовать на весь регистровый банк процессора, за счет чего имеется возможность загрузить 32-битное слово непосредственно в РС, осуществляя переход в пределах всего адресного пространства процессора. Если конечный адрес лежит вне диапазона команды перехода, то его можно непосредственно загрузить в счетчик команд.
Групповое копирование регистров
Помимо команд загрузки/сохранения содержимого отдельны регистров, в наборе команд ARM имеются команды для загрузки (LDM) и сохранения (STM) групп регистров. С помощью одной команды можно скопировать в память весь блок регистров или его часть, а с помощью другой – восстановить его содержимое.
Команды обмена
В наборе команд ARM имеется команда обмена (SWP), благодаря которой обеспечивается поддержка семафоров реального времени (механизм синхронизации процессов). Эта команда осуществляет одновременный обмен содержимого регистра и памяти, благодаря чему исключается возможность прерывания процесса обмена критическими данными при возникновении исключительной ситуации.
Эта команда недоступна из языка Си, но как правило поддерживается библиотеками компилятора
Изменение регистра состояния
Регистры CPSR и SPSR являются регистрами процессора, но не входят в состав основного банка регистров. Напрямую обращаться к этим регистрам могут только две команды ARM – MSR и MRS. Эти команды обеспечивают пересылку содержимого регистра CPSR или SPSR с заданным регистром.
Команды MSR и MRS доступны только в привилегированных режимах. В пользовательском режиме User менять рабочий режим процессора и маскировать прерывания невозможно.
Переход в привилегированный режим возможен при возникновении исключительной ситуации, сбросе, генерации прерываний IRQ и FIQ или же в результате выполнения команды SWI.
Программное прерывание
Команда программного прерывания SWI генерирует исключительную ситуацию, в результате чего процессор переключается в режим Supervisor, а в счетчик команд заносится значение 0х00000008.
-
