Векторизованные запросы прерываний имеют средний приоритет. Только 16 из 32 возможных запросов могут быть назначены контроллером в эту категорию. Любой из 32 запросов может быть назначен на любой из 16 слотов векторизованных запросов прерываний, среди которых слот 0 имеет самый высокий приоритет, а слот 15 — самый низкий.
Невекторизованные запросы прерываний имеют самый низкий приоритет.
Контроллер векторов прерываний объединяет в соответствии с логической функцией OR сигналы от всех векторизованных и невекторизованных запросов прерываний (IRQ) для их подачи на процессор ARM. Сервисная программа обслуживания запроса прерывания (IRQ) читает регистр из VIC и производит пе-
ГЛАВА 6
реход на требуемый вектор. Если поступает любой из векторизованных запросов прерывания, то VIC выделяет для него адрес с самым высоким приоритетом, соответствующий сервисной программе обслуживания запросов прерываний. В ином случае, VIC по умолчанию выделяет для запроса адрес подпрограммы, которая обслуживает все невекторизованные запросы прерываний. Эта выделяемая по умолчанию подпрограмма читает другой регистр VIC, чтобы определить, какие запросы прерываний в данный момент являются активными.
Все регистры контроллера векторов прерываний имеют размер слова. Запись и чтение байта и полуслова не поддерживаются.
Блок-схема контроллера векторов прерываний приведена на Рис. 6.1.
Дополнительная информация о контроллере векторов прерываний доступна в документации по PrimeCell ™ Vectored Interrupt Controller (PL190).
6.2. Регистры VIC
Регистры VIC перечислены в Табл. 6.1. Более детальные их описания даны ниже. В этом разделе регистры VIC описываются в том порядке, в котором они используются в логике VIC, начиная от входов прерываний и заканчивая регистрами, редко используемыми программным обеспечением.
Таблица 6.1. Регистры VIC
Название |
Описание |
Доступ |
Значение после сброса11 |
Адрес |
VICIRQStatus |
Регистр состояния IRQ. При чтении этого регистра возвращается текущее состояние тех запросов прерываний, которые разрешены и классифицируются как запросы IRQ |
RO |
0 |
OxFFFF FO00 |
VICFIQStatus |
Регистр состояния FIQ. При чтении этого регистра возвращается текущее состояние тех запросов прерываний, которые разрешены и классифицируются как запросы FIQ |
RO |
0 |
OxFFFF F004 |
VICRawIntr |
Регистр состояния необработанных прерываний. При чтении этого регистра возвращается текущее состояние 32 запросов прерываний/программных прерываний вне зависимости от их разрешенности или их классификации |
RO |
0 |
OxFFFF F008 |
VICIntSelect |
Регистр выбора прерываний. Этот регистр классифицирует каждое из 32 запросов прерываний как запрос FIQ или запрос IRQ |
R/W |
0 |
OxFFFF F00C |
VICIntEnable |
Регистр разрешения прерываний. Этот регистр управляет разрешениями, которые даются каждому из 32 запросов прерываний и программным прерываниям как FIQ или IRQ |
R/W |
0 |
OxFFFF F010 |
VICIntEnClr |
Регистр разрешения сброса разрешенных прерываний. Этот регистр разрешает программному обеспечению сбрасывать один или более битов в регистре разрешения прерываний |
W |
0 |
OxFFFF F014 |
VICSoftInt |
Регистр программных прерываний. Содержимое этого регистра побитно объединяется по функции ИЛИ с сигналами 32 запросов прерываний от различных периферийных устройств и функций |
R/W |
0 |
OxFFFF F018 |
VICSoftlntClear |
Регистр сброса программных прерываний. Этот регистр разрешает программному обеспечению сбрасывать один или более битов в регистре программных прерываний |
W |
0 |
OxFFFF F01C |
VICProtection |
Регистр разрешения защиты. Этот регистр позволяет ограничивать доступ к регистрам VIC для программного обеспечения, выполняющегося в пользовательском режиме |
R/W |
0 |
OxFFFF F020 |
VICVectAddr |
Регистр адреса вектора. Когда происходит запрос IRQ, сервисная подпрограмма обслуживания запросов IRQ может прочитать этот регистр и передать управление по прочитанному значению адреса |
R/W |
0 |
OxFFFF F030 |
VICDefVectAddr |
Заданный по умолчанию регистр адреса вектора. Этот регистр содержит адрес для сервисной подпрограммы обработки прерываний (ISR), которая обрабатывает невекторизованные запросы прерываний |
R/W |
0 |
OxFFFF F034 |
VICVfectAddrO |
Регистр адреса вектора 0. Регистры адреса векторов 0... 15 содержат адреса для сервисных подпрограмм обработки прерываний для 16 векторных слотов IRQ |
R/W |
0 |
OxFFFF F100 |
VICVectAddrl |
Регистр адреса вектора 1 |
R/W |
0 |
OxFFFF F104 |
VIC\fectAddr2 |
Регистр адреса вектора 2 |
R/W |
0 |
OxFFFF F108 |
Таблица 6.1. Регистры VIC (продолжение)
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |