
- •Раздел 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.3 Регистры
Процессор имеет архитектуру “load-and-store” (загрузка – сохранение), поэтому для выполнения любой обработки данных необходимо сначала перенести эти данные из памяти в определенные регистры, выполнить команду обработки данных и затем записать полученные значения обратно в память.
Основной регистровый файл состоит из 16 пользовательских регистров R0 – R15. Каждый из этих регистров является 32-битными. Регистры R0 – R12 имеют общее назначения и не выполняют ни каких других специальных функций. Регистры R13 – R15 имеют дополнительные функции.
Регистр R13 используется в качестве указателя стека (Stack Pointer – SP).
Регистр R14 является регистром связи (Link Register – LR). При вызове подпрограммы адрес возврата автоматически запоминается в регистре связи, откуда затем считывается при возврате. Такое решение позволяет быстро переходить к «концевым» функциям (функции, которые не вызывают других функций) и возвращаться из них. Если же функция входит в состав «ветви», т.е. вызывает другие функции, содержимое регистра связи необходимо сохранять в стеке.
Регистр R15 выполняет функции счетчика команд (PC).
Многие команды могут работать с регистрами R13 – R15 как с обычными пользовательскими регистрами.
Регистр текущего состояния программы
Наряду с банком регистров в процессоре имеется дополнительный 32-битный регистр, называемый регистром текущего состояния программы (Current Program Status Register – CPSR). Регистр CPSR содержит набор флагов, которые управляют функционированием ЦПУ ARM7 и отображают его состояние.
Как уже было замечено, в состоянии ARM процессор ARM7 поддерживает 7 режимов работы. Каждому режиму соответствует определенная регистровая модель, содержащая набор регистров, доступных процессору в этом режиме. Все возможные регистровые модели для состояния ARM показаны в таблице 5.1. Все регистры общего назначения имеют дополнительные имена, определенные стандартом фирмы ARM. Регистры, имена которых в таблице выделены фоновой заливкой, банкированны, их переключение осуществляется при переключении режимов работы процессора. При переходе из одного рабочего режима в другой, текущее состояние регистров, указанных в таблице без суффиксов, автоматически переписывается в соответствующие банкирующие регистры, а при возврате в прежний режим вновь используется содержимое регистров без суффиксов.
Таблица 5.1 Регистровая модель процессора ARM7TDMI в различных режимах состоянии ARM
user, system |
supervisor |
abort |
undefined |
IRQ |
FIQ |
R0 (a1) |
R0 |
R0 |
R0 |
R0 |
R0 |
R1 (a2) |
R1 |
R1 |
R1 |
R1 |
R1 |
R2 (a3) |
R2 |
R2 |
R2 |
R2 |
R2 |
R3 (a4) |
R3 |
R3 |
R3 |
R3 |
R3 |
R4 (v1) |
R4 |
R4 |
R4 |
R4 |
R4 |
R5 (v2) |
R5 |
R5 |
R5 |
R5 |
R5 |
R6 (v3) |
R6 |
R6 |
R6 |
R6 |
R6 |
R7 (v4) |
R7 |
R7 |
R7 |
R7 |
R7 |
R8 (v5) |
R8 |
R8 |
R8 |
R8 |
R8_FIQ |
R9 (v6) |
R9 |
R9 |
R9 |
R9 |
R9_FIQ |
R10 (v7) |
R10 |
R10 |
R10 |
R10 |
R10_FIQ |
R11 (v8) |
R11 |
R11 |
R11 |
R11 |
R11_FIQ |
R12 (IP) |
R12 |
R12 |
R12 |
R12 |
R12_FIQ |
R13 (SP) |
R13_SVC |
R13_ABORT |
R13_UNDEF |
R13_IRQ |
R13_FIQ |
R14 (LR) |
R14_SVC |
R14_ABORT |
R14_UNDEF |
R14_IRQ |
R14_FIQ |
R15 (PC) |
PC |
PC |
PC |
PC |
PC |
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
- |
SPSR_SVC |
SPSR_ABORT |
SPSR_UNDEF |
SPSR_IRQ |
SPSR_FIQ |
Получается, что суммарное количество физических 32-битных регистров общего назначения, доступных процессору во всех режимах состояния ARM, равно 31.
Переход процессора из состояния ARM в состояние Thumb производится с помощью команды BX. Набор регистров в состоянии Thumb сокращен по сравнению с набором регистров, доступных в состоянии ARM. Все возможные регистровые модели для состояния Thumb показаны в таблице 5.2.
В кодах операций большинства команд Thumb под номер регистра отведено только 3 бита, поэтому прямое обращение возможно только к восьми регистрам: R0 – R7. Регистры R8 – R12 доступны только через специальные команды загрузки. Регистры SP и LR выполняют фиксированные функции указателя вершины стека и регистра связи соответственно. Для работы с этими регистрами в состоянии Thumb имеются специальные команды.
Таблица 5.2 Регистровая модель процессора ARM7TDMI в состоянии Thumb
user, system |
supervisor |
abort |
undefined |
IRQ |
FIQ |
R0 (a1) |
R0 |
R0 |
R0 |
R0 |
R0 |
R1 (a2) |
R1 |
R1 |
R1 |
R1 |
R1 |
R2 (a3) |
R2 |
R2 |
R2 |
R2 |
R2 |
R3 (a4) |
R3 |
R3 |
R3 |
R3 |
R3 |
R4 (v1) |
R4 |
R4 |
R4 |
R4 |
R4 |
R5 (v2) |
R5 |
R5 |
R5 |
R5 |
R5 |
R6 (v3) |
R6 |
R6 |
R6 |
R6 |
R6 |
R7 (v4) |
R7 |
R7 |
R7 |
R7 |
R7 |
SP |
SP_svc |
SP_abt |
SP_und |
SP_irq |
SP_fiq |
LR |
LR_svc |
LR_abt |
LR_und |
LR_irq |
LR_fiq |
PC |
PC |
PC |
PC |
PC |
PC |
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
- |
SPSR_svc |
SPSR_abt |
SPSR_und |
SPSR_irq |
SPSR_fiq |