Предыдущая Следующая

Регистр R15 выполняет функции программного счетчика (PC). В состоянии ARM биты [1] и [0] R15 всегда равны 0, т. е. адреса команд всегда кратны четырем, а в состоянии THUMB бит [0] R15 всегда равен 0, т. е. адреса команд всегда четные.

Регистр R14 (LR) используется при вызовах подпрограмм как регистр связи, в котором сохраняется текущее содержимое PC для возврата в основную программу.

Регистр R13 (SP) производитель рекомендует использовать для организации стека в качестве указателя его вершины.

Битовая структура регистра состояния CPSR изображена на Рис. 1.4. CPSR содержит следующие биты:

• М4...М0 — определяют режим работы процессора в соответствии с Табл. 1.3;

• Т — задает состояние процессора: ARM (Т = 0) или THUMB (Т = 1);

• I, F — маскируют (запрещают) обработку прерываний IRQ и FIQ соответственно;

• N, Z, С, V — являются признаками: отрицательного результата (N), нуля (Z), переноса (С) и переполнения (V); их значения могут устанавливаться в соответствии с результатом выполнения очередной команды.

Таблица 1.3. Задание режимов процессора с помощью битов режима

Биты М4...М0

Режим

10000

User

10001

FIQ

10010

IRQ

10011

Supervisor

10111

Abort

11011

Undefined

11111

System

Регистр CPSR доступен для записи во всех режимах, кроме режима User.

При запуске процессор начинает работу в режиме Supervisor. Переход в базовый режим User реализуется путем записи в регистр CSPR содержимого, в котором биты М4...М0 = 10000. Обратное переключение из режима User в режим Supervisor может быть произведено только при поступлении команды программного прерывания, мнемоническое имя которой — SWI. Таким способом обеспечивается доступ пользователя к ресурсам операционной системы. Чтобы из режима Supervisor получить доступ ко всем регистрам режима User, следует выполнить переход в режим System. Для этого в регистр CPSR записывается значение битов М4...М0 = 11111. Переход в режимы IRQ, FIQ, Abort, Undefinied происходит автоматически при поступлении соответствующих запросов прерывания или при наступлении соответствующих событий.

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

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


Предыдущая Следующая



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz