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

FIO0MASK0=0xBF;

FIO0PIN0=Bit << 6;

Пример 4 (вывод 12-го бита переменной в 1-ый бит порта):

FIO0MASK0=0xFD;

FIO0PIN0=(Word & 0x1000) >> 11;

Регистры FIOxDIR, FIOxPIN, FIOxSET, FIOxCLR полностью ана-

логичны соответствующим регистрам для низкоскоростного режима.

Регистры FIOxPINL, FIOxPINU (FIO0PINL, FIO0PINU, FIO1PINL, FIO1PINU) предназначены для чтения и записи порта в формате 16-разрядного слова. FIOxPINL связан с портовыми линиями Px.0–Px.15, FIOxPINU — с линиями Px.16–Px.31 (рисунок 1.10.2).

Регистры FIOxPIN0–FIOxPIN3 (FIO0PIN0–FIO0PIN3, FIO1PIN0– FIO1PIN3) предназначены для чтения и записи порта в байтовом формате. FIOxPIN0 связан с портовыми линиями Px.0–Px.7, FIOxPIN1 — с линиями

Px.8–Px.15 и т. д. (рисунок 1.10.4).

Регистры FIOxMASK (FIO0MASK, FIO1MASK) предназначены для наложения маски при всех операциях с портами. Установка единиц в некоторые разряды приводит к блокировке любых изменений соответствующих портовых линий через FIOxPIN, FIOxSET и FIOxCLR.

31

 

 

 

 

 

 

0

 

 

 

FIOxPIN

 

 

 

15

 

 

0

15

 

 

0

FIOxPINU

 

 

FIOxPINL

7

0

7

0

7

0

7

0

FIOxPIN3

 

FIOxPIN2

 

 

FIOxPIN1

 

FIOxPIN0

Рисунок 1.10.4 – Схема регистров управления портами в режимах четырехбайтного слова, двухбайтного слова и в байтовом режиме

Примечание. Для управления портами в формате байта и 16разрядного слова кроме FIOxPINL/U и FIOxPIN0–3, все другие регистры

(FIOxDIR, FIOxSET, FIOxCLR, FIOxMASK) допускают использование в кон-

це имени номеров 0–3 и обозначений «L/U».

1.11 Система прерываний

1.11.1 Назначение системы прерываний

Система прерываний представляет собой комплекс аппаратных средств микроконтроллера, обеспечивающих быструю реакцию на определенные события, возникающие в самом микроконтроллере или в среде, с которой он взаимодействует. Такими событиями может быть электрический сигнал на портовой линии, достижение таймером-счетчиком определенного значения, завершение аналого-цифрового преобразования или передачи данных по одному из поддерживаемых интерфейсов.

41

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

Упрощенно процесс обработки прерывания можно описать так: а) источник прерывания формирует запрос прерывания;

б) система прерываний приостанавливает выполнение основной программы и передает управление процедуре обработки прерывания;

в) после завершения процедуры обработки прерывания управление возвращается в основную программу.

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

Архитектура ARM7 поддерживает три вида прерываний: векторное IRQ, невекторное IRQ и быстрое FIQ. Одновременно поддерживается обработка не более 16 источников векторных прерываний, каждому из которых может быть назначен произвольный адрес обработчика. Если необходимо обеспечить поддержку более 16 источников прерываний, то используют невекторные прерывания с общим адресом обработчика. Процесс реакции на векторные и невекторные прерывания один и тот же. Быстрое прерывание FIQ имеет приоритет выше, чем IRQ и может прерывать обработку IRQ. Предусмотрен только один обработчик всех запросов FIQ с единственным адресом. Запрос от каждого источника может быть классифицирован как IRQ

или FIQ через регистр VICIntSelect (раздел 1.11.4).

1.11.2 Процесс обработки прерываний IRQ

Прерывания IRQ и FIQ являются частным случаем исключительных ситуаций. Процесс обработки прерывания подчинен общему порядку для исключений, рассмотренному в разделе 1.6.

При возникновении прерывания, классифицированного как IRQ, выполняются следующие действия:

1)содержимое счетчика команд , указывающее на следующую команду, сохраняется в R14_irq (LR);

2)слово состояния программы CPSR сохраняется в SPSR_irq;

3)режим меняется на IRQ;

4)бит I в слове состояния программы CPSR устанавливается в единицу, что запрещает все прерывания IRQ;

5)регистр VICVectAddr загружается адресом процедуры обработки прерывания из регистра VICVectAddr0–15, где 0–15 — номер слота, c которым связан данный источник прерывания;

42

6)в счетчик команд R15 (PC) записывается адрес 0x00000018, что приводит к немедленной передаче управления по этому адресу;

7)выполняется инструкция

LDR

PC, [PC, #-0x0FF0]

расположенная по адресу 0x00000018, что приводит к записи в счетчик команд содержимого регистра VICVectAddr с адресом

;

8) управление получает процедура обработки прерываний, адрес которой был задан в регистре VICVectAddr.

Процедура обработки прерываний начинается с команды STM, сохраняющей в стек все используемые регистры общего назначения (R0–R12).

1.11.3 Процесс обработки быстрых прерываний FIQ

При возникновении прерывания, классифицированного как FIQ, выполняются следующие действия:

1)счетчик команд , сохраняется в R14_fiq (LR);

2)слово состояния программы CPSR сохраняется в SPSR_fiq;

3)режим меняется на FIQ;

4)биты I, F в слове состояния программы CPSR устанавливается в единицу, что запрещает все прерывания IRQ и FIQ;

5)управление передается команде по адресу 0x0000001С путем записи этой константы в счетчик команд R15 (PC);

6)выполняется инструкция

LDR

PC, [PC, #Смещение]

что приводит к загрузке в счетчик команд адреса обработчика быстрого прерывания;

7) управление получает процедура обработки быстрого прерывания.

1.11.4 Регистры управления системой прерываний

Большинство регистров, предназначенных для управления системой прерываний или слежения за ее состоянием, имеют структуру, схематично показанную на рисунке 1.11.1. Каждый бит регистра соответствует одному из источников прерываний.

Регистр VICRAWStatus. Единица в любом из разрядов информирует о получении запроса прерывания от соответствующего источника, причем независимо от того разрешено ли прерывание (см. также VICIntEnable).

Регистр VICIRQStatus. То же, что VICRAWStatus, но единицами отмечаются только источники, прерывания от которых разрешены и классифицированы как IRQ (см. также VICIntSelect).

Регистр VICFIQStatus. То же, что VICIRQStatus, но для прерываний, классифицированных как FIQ.

Регистр VICIntEnable. Установка единицы в любой из разрядов разрешает обработку запросов прерывания от соответствующего источника. Сброс в ноль не имеет значения. Запрет обработки прерываний осуществляется через регистр VICIntEnClear.

43

Регистр VICIntEnClear. Установка единицы в любой из разрядов запрещает обработку запросов прерывания от соответствующего источника.

Регистр VICIntSelect. Сброс в ноль любого из разрядов классифицирует соответствующий источник как IRQ. Адрес обработчика прерывания должен храниться в одном из регистров VICVectAddr0–15 в зависимости от слота, назначенного данному источнику. Установка единицы классифицирует соответствующий источник как FIQ. Тогда адрес обработчика прерывания задается инструкцией по вектору 0x0000001C.

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

Регистр VICSoftIntClear. Установка единицы в любой из разрядов снимает программный запрос прерывания, выполненный через VICSoftInt.

Регистры VICVectCntl0–15 предназначены для того, чтобы распределить используемые источники прерываний по 16 слотам. Структура регистра показана на рисунке 1.11.1.

Бит 5 (SlotEN) должен быть установлен в единицу.

Биты 0–4 (IntRequest) назначают данному слоту номер источника прерывания. Номера источников прерываний соответствуют номерам битов

VICVecCntl0-15 – управление слотами векторных прерываний

15

8

7

6

5

 

 

 

 

N

 

 

 

 

tE

 

 

 

 

lo

 

 

 

 

S

Включить слот

4

0

IntRequest

Номер запроса прерывания

VICProtection – защита слотов

15

8

7

4

3

1

 

0

 

 

 

 

 

 

IC

 

s

 

 

 

 

 

V

 

 

es

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

a

 

 

 

Запретить управление из режима User

Маска регистров управления системой прерываний

31

24

23

22

21

20

19

18

17

16

 

 

 

 

B

1

D

 

 

1

0

T3

 

2

 

 

 

 

 

 

T

 

 

 

S

D

BO

I

C

D

E

E

 

 

 

 

U

 

A

 

 

A

 

 

 

 

 

 

 

 

2

 

 

IN

IN

 

 

15

14

13

12

11

10

9

8

 

7

 

6

5

4

3

 

2

 

1

0

 

 

1

 

0

 

C

 

L

 

I1

0

 

0

0

 

1

 

0

r1

er0

M

1

M

 

0

T

 

T

T

 

 

P

P

 

M

 

RT

 

RT

e

R

 

R

 

 

 

IN

 

IN

 

T

L

PI

C

 

 

re

 

e

D

 

 

 

R

 

P

 

S

 

S

I2

 

W

A

A

im

im

A

A

r

 

W

 

E

 

E

 

 

 

 

 

S

 

 

o

 

o

 

 

 

 

 

 

 

 

 

 

 

 

S

 

 

 

P

U

 

U

 

T

T

C

 

C

 

 

 

 

22

USB ― приемопередатчик USB

 

 

 

 

 

 

 

 

9, 19 I2C0/1 ― приемопередатчики I2C

 

20

BOD ― монитор питания

 

 

 

 

 

 

 

 

 

 

8 PWM0 ― широтно-импульсный модулятор

18, 21 AD0/1 ― аналого-цифровой преобразователь

 

 

6, 7 UART0/1 ― приемопередатчики UART

1417 EINT0EINT3 ― запрос внешним сигналом

 

 

4, 5 Timer0/1 ― таймеры-счетчики

 

13

RTC ― часы реального времени

 

 

 

 

 

 

 

2, 3 ARM Core0/1 ― резерв

 

 

 

 

 

 

12

PLL ― умножитель тактовой частоты

 

 

 

 

 

 

0 WDT ― сторожевой таймер

 

 

 

 

 

10, 11 SPI0/1 ― приемопередатчики SPI

Рисунок 1.11.1 – Структура основных регистров управления системой прерываний

44