Регистр 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 ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |