Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
404
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

Преиндексная адресация с непосредственным смещением. Испол-

нительный адрес — сумма или разность содержимого регистра

и константы ( или ). В случае использовании модификатора {!} вычисленный исполнительный адрес сохраняется в регистре до обращения к памяти.

Примеры:

LDR

R0,

[R1,

#32]

;

R0

=

*(

R1

+ 32 )

LDR

R0,

[R1,

#32]!

;

R0

=

*(

R1

+= 32 )

Преиндексная адресация с регистровым смещением. Исполни-

тельный адрес — сумма или разность базового адреса в регистре

и смешения в регистре , которое может подвергаться сдвигу. В случае использования модификатора «!» вычисленный исполнительный адрес сохраняется в регистре до обращения к памяти.

Примеры:

LDR

R0, [R1, R2]

; R0

= *(

R1

+

R2

)

LDR

R0, [R1, R2]!

; R0

= *(

R1

+= R2 )

LDR

R0, [R1, –R2, LSL #4]

;

R0

= *(R1 – (R2 << 4))

LDR

R0, [R1, –R2, LSL #4]!

;

R0

= *(R1 –=

R2

<< 4)

Постиндексная адресация с непосредственным смещением. Ис-

полнительный адрес хранится в регистре . После обращения к памяти содержимое регистра изменяется путем прибавления или вычитания 8- или 12-разрядной константы /.

LDR

R0, [R1], #32

; R0 = *R1; R1 + = 32

Постиндексная адресация с регистровым смещением. Исполни-

тельный адрес хранится в регистре . После обращения к памяти содержимое регистра изменяется путем прибавления или вычитания смещения , которое может подвергаться сдвигу.

LDR

R0, [R1],

#R2

; R0

= *R1; R1 + =

R2

LDR

R0, [R1],

#R2, LSR #2

;

R0

=

*R1

 

 

 

 

 

;

R1

+

= (

R2 >> 2

)

1.5 Процедура начальной загрузки и режимы отображения памяти

Микроконтроллер LPC2148 имеет встроенную программу начальной загрузки (загрузчик), которая размещается во встроенном ПЗУ. Запись кода загрузчика производится при изготовлении микросхемы. Функции загрузчика: «прошивка» основной программы в ПЗУ через последовательный интерфейс, запуск основной программы, защита кода программы от несанкционированного считывания.

Размер области памяти, выделяемой загрузчику, составляет 12 кбайт. Эта область расположена, начиная с адреса 0x7FFFD000 (рисунок 1.2.1).

Непосредственно после сброса область векторов прерываний (адреса памяти 0x00000000–0x0000003F) отображается на начало области загрузчика 0x7FFFD000–0x7FFFD03F. Поэтому при сбросе управление передается на физический адрес 0x7FFFD000, то есть запускается загрузчик.

24

Загрузчик проверяет контрольную сумму векторов прерываний. Вычисляется сумма содержимого первых восьми 32-разрядных ячеек памяти с адресами 0x00000000–0x0000001C. Если сумма дает ноль (разряды старше 31-го отбрасываются), то контрольная сумма считается верной. Как правило, для совпадения контрольной суммы в ячейку 0x00000014 следует записать код 0xB9205F80. В общем случае для расчета этой величина программисту необходимо сложить содержимое всех остальных семи ячеек памяти; выделить младшие 32 разряда; поразрядно инвертировать и прибавить единицу.

Верная контрольная сумма служит признаком того, что память программ не пуста и содержит программу. В этом случае переотображение векторов прерываний прекращается, управление передается на команду по адресу 0x00000000, то есть первой команде основной программы.

При несовпадении контрольной суммы считается, что память не содержит программы. Загрузчик переходит в режим ожидания потока данных с последовательного порта UART0 для загрузки кода программы.

Отметим, что имеется еще один режим отображения векторов прерываний, в котором адресам 0x00000000–0x0000003F ставятся в соответствие физические адреса оперативной памяти 0x40000000–0x4000003F.

При необходимости режим отображение памяти может быть изменен программным путем с помощью регистра MEMMAP. Значения управляющих кодов приведены в таблице 1.5.1.

Таблица 1.5.1 – Управление режимами отображения векторов прерываний

MEMMAP

Физические адреса, на которые

Режим

отображаются вектора прерываний

 

 

0x00

0x7FFFD000–0x7FFFD03F

Режим загрузчика

0x01

0x00000000–0x0000003F

Режим программы

0x02

0x40000000–0x4000003F

Режим ОЗУ

1.6 Обработка исключительных ситуаций

Исключительные ситуации или просто «исключения» — это события, которые требуют немедленной реакции со стороны программы. Частным случаем исключений являются прерывания, запрашиваемые периферийными устройствами микроконтроллера. Другие исключения возникают в случае ошибочных действий программы. Прерывания являются одним из основных приемов программного управления вычислительным процессом. Обработка исключений, вызванных ошибкой, направлена на повышение надежности микропроцессорной системы.

Ядро ARM7 предоставляет возможность аппаратного диагностирования исключительных ситуаций. Возникновение исключения сопровождается автоматическим переводом процессора из режима User в один из привилегированных режимов соответственно возникшему исключению (раздел 1.2.1). Выполнение программы приостанавливается, и управление передается процедуре обработки прерывания или исключения. Обработчик заканчивается

25

командой возврата в основную программу. При этом состояние программы восстанавливается таким, каким оно было до возникновения исключения.

Исключения характеризуются разными приоритетами. Обработка исключения с меньшим приоритетом может быть приостановлена возникшим исключением с более высоким приоритетом.

Исключительные ситуации, обработка которых предусмотрена аппаратурой контроллера LPC2148, перечислены ниже (см. также раздел 2.4.1).

Reset — сброс. Исключение возникает в следующих случаях:

а) включение питания микроконтроллера или восстановление напряжения питания после провала до 1 В;

б) нарастающий перепад напряжения на контакте ; в) сигнал сброса от сторожевого таймера;

г) сигнал от супервизора питания, свидетельствующий о снижении напряжения до 2,6 В.

Undefined — неопределенная команда. Исключение возникает, если на конвейер поступил код нераспознанной команды

Software interrupt (SWI) — программное прерывание. Вызывается командой SWI.

Prefetch abort (PAbort) — ошибка адреса команды. Исключение возникает при передаче управления по адресу памяти, не реализованному физически.

Data abort (DAbort) — ошибка адреса данных. Исключение возникает при попытке обращения к ячейке памяти, не реализованной физически.

Interrupt request (IRQ) — прерывание. Поступил запрос прерывания, разрешенного и классифицированного как zIRQ.

Fast interrupt request (FIQ) — быстрое прерывание. Поступил запрос прерывания, разрешенного и классифицированного как FIQ.

В таблице 1.6.1 для каждого исключения указан приоритет, закрепленный адрес памяти программ для передачи управления, режим, в который будет переведен процессор на время обработки исключения, и инструкция, завершающая обработку.

Общий порядок действий, выполняемых при возникновении исключения таков:

1. Cодержимое счетчика команд R15 (PC), указывающее на следующую команду, сохраняется в регистр R14_xxx (LR), где xxx — идентификатор

Таблица 1.6.1 – Исключения, поддерживаемые ядром ARM7TDMI

Исключение

Приор.

Вектор

I/F

Режим

Инструкция выхода

Reset

1

0x00000000

1/1

Supervisor

Undefined

6

0x00000004

–/–

Undefined

MOVS PC, R14

SWI

6

0x00000008

1/–

Supervisor

MOVS PC, R14

PAbort

5

0x0000000C

–/–

Abort

SUBS PC, R14, #4

DAbort

2

0x00000010

–/–

Abort

SUBS PC, R14, #4

SUBS PC, R14, #8

 

 

 

 

 

IRQ

4

0x00000018

1/–

IRQ

SUBS PC, R14, #4

FIQ

3

0x0000001C

1/1

FIQ

SUBS PC, R14, #4

26