ЭУМК по дисциплине "Проектирование проблемно-ориентированных вычислительных средств" › Теория › Тема 4. Управляющее устройство процессоров платформы с5000

# Электронный учебно-методический
комплекс по дисциплине
"Проектирование проблемно-ориентированных вычислительных средств"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

4.3. Система прерываний процессоров платформы С5000
4.3.1. Общая характеристика системы прерываний

Прерывания вызываются аппаратными или программными сигналами и используются для приостановки основной программы и выполнения процедуры обработки прерывания (ISR - Interrupt Service Routine). Как правило, прерывания генерируются аппаратными устройствами, которые должны передать или принять данные от C54x DSP (например, АЦП, ЦАП или другие процессоры). Прерывания могут также использоваться, чтобы сообщить о том, что имел место специфический случай (например, таймер закончил счет).
C54x DSP поддерживают два типа прерываний: программные и аппаратные:

- Программные прерывания вызываются командами (INTR, TRAP или RESET).
- Аппаратные прерывания вызываются сигналами от физических устройств и бывают двух типов:

- Внешние аппаратные прерывания инициируются сигналами от внешних прерывающих портов.
- Внутренние аппаратные прерывания инициируются сигналами от внутренних периферийных устройств.

Когда несколько аппаратных прерываний возникает в одно и то же время, C54x DSP обслуживает их согласно приоритету (высший приоритет имеет номер 1).
Аппаратные и программные прерывания могут быть отнесены к одной из следующих двух категорий:

- Маскируемые прерывания. Это аппаратные или программные прерывания, которые могут быть заблокированы (замаскированы) или разрешены (размаскированы) программно. C54x DSP поддерживают до 16 маскируемых пользовательских прерываний (SINT15-SINT0). Каждое устройство использует подмножество из эти 16 прерываний. Некоторые из них имеют два названия, потому что они могут быть вызваны программным обеспечением или аппаратными средствами, например:

- INT3–INT0 (внешние)
- BRINT0, BXINT0, BRINT1 и BXINT1 (последовательный порт)
- TINT0 и TINT1 (таймер)

- Немаскируемые прерывания. Эти прерывания не могут быть заблокированы. Немаскируемыми прерываниями являются все программные прерывания и два внешних аппаратных прерывания: RS (сброс) и NMI (немаскируемое прерывание), при этом RS и NMI могут также быть установлены программно. Немаскируемое прерывание RS сбрасывает все установленные режимы C54x DSP.

Обработка прерывания состоит из трех стадий:
1) Получение запроса на прерывание. Приостановка главной программы запрашивается программным обеспечением или аппаратными средствами. Если это маскируемое прерывание, устанавливается соответствующий бит в регистре флажков прерываний (IFR), когда прерывание получено.
2) Подтверждение прерывания. C54x DSP должен подтвердить запрос на прерывание. Если прерывание маскируемое, должны быть выполнены определенные условия для того, чтобы C54x DSP подтвердил их. Для немаскируемых аппаратных прерываний и для программных прерываний подтверждение следует немедленно.
3) Выполнение подпрограммы обслуживания прерывания (ISR). Когда прерывание подтверждено C54x DSP выполняет команду перехода, которая размещается по определенному адресу (вектор прерывания) и выполняет ISR.

4.3.2. Вектора прерываний, регистры флагов и масок прерываний, сохранение контекста при прерываниях
Регистры флагов и масок прерываний

Регистр флагов прерывания IFR – отображаемый на память регистр ЦП, который идентифицирует и сбрасывает активное прерывание (рис. 4.2). Прерывание устанавливает соответстующий флажок в IFR, пока он не будет определен ЦП. Любое из следующихо четырех события очищает флажок прерывания:

- C54x DSP сброшен (RS - низкий).
- Прерывание принято.
- Записана 1 в соответствующий бит IFR.
- Выполнена команда INTR с соответствующим номеро прерывания.

15 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Резерв | DMAC5 | DMAC4 | BXINT1 or DMAC3 | BRINT1 or DMAC2 | HPINT | INT3 | TINT1 or DMAC1 | DMAC0 | BXINT0 | BRINT0 | TINT0 | INT2 | INT1 | INT0

###### Рисунок 4.2 – Формат регистра флагов прерывания (IFR) процессора C5402

Единица в любом бите IFR указывает отложенное (ждущее обработки) прерывание. Чтобы сбросить прерывание, необходимо записать 1 в бит, соответствующий прерыванию в IFR. Все отложенные прерывания могут быть сброшены записью текущего содержимого IFR обратно в IFR.
Рисунок 4.3 показывает, как C54x DSP использует отображаемый на память регистр масок прерывания IMR для маскирования внешних и внутренних прерываний. Если INTM = 0 в регистре состояния ST1, 1 в любом бите IMR допускает соответствующее прерывание. Ни NMI ни RS не включены в IMR, потому что IMR не влияет на эти прерывания. Вы можете читать или писать в IMR.

15 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Резерв | DMAC5 | DMAC4 | BXINT1 or DMAC3 | BRINT1 or DMAC2 | HPINT | INT3 | TINT1 or DMAC1 | DMAC0 | BXINT0 | BRINT0 | TINT0 | INT2 | INT1 | INT0

###### Рисунок 4.3 – Формат регистра масок прерывания (IMR) процессора C5402

Сохранение контекста при обработке прерывания

Когда выполняется подпрограмма обслуживания прерывания, некоторые регистры должны быть сохранены в стеке. Когда выполняется возврат из подпрограммы ISR (RC[D], RETE[D] или RETF[D]), ваша программа должна восстановить содержимое этих регистров. Вы можете использовать память стека, пока стек не превышает пространство памяти. Этот стек также используется для вызова подпрограмм. Поскольку регистры ЦП и периферийных устройств отображаются на память, команды PSHM и POPM могут передавать эти регистры в стек и из стека, а команды PSHD и POPD могут передавать содержимое ячеек памяти данных в стек и обратно.

Вектора и таблица векторов прерываний

Вектора прерываний могут быть расположены с начала любой 128-словной страницы в памяти программ кроме зарезервированных областей. Адрес вектора прерывания генерируется объединением поля указателя прерывания (IPTR) из PMST с номером вектора прерывания (0-31), сдвинутым на 2. На рис. 4.4 приведен пример для прерывания INT0 и IPTR = 0001h, вектор прерывания выбирается из 00C0h. Номер вектора прерывания для INT0 равен 16 или 10h, а смещение в таблице равно 64 или 40h.

######

###### Рисунок 4.4 – Генерация адреса вектора прерывания

При сбросе биты IPTR устанавливаются в 1 (IPTR = 1FFh) и это значение отображает вектора на страницу 511 в области памяти программ. Поэтому, вектор сброса для аппаратного сброса всегда расположен по адресу 0FF80h. Вектора прерываний могут быть отображены в другую область загрузкой IPTR значением, отличным от 1FFh. Например, вектора прерываний могут быть перемещены, чтобы начинаться с адреса 0080h, загрузкой в IPTR значения 0001h.
Внимание: Вектор аппаратного сброса (RS) не может быть переопределен, потому что аппаратный сброс загружает 1 во все биты IPTR. Поэтому, вектор аппаратного сброса всегда выбирается по адресу FF80h в памяти программ.
В таблице 4.1 приведены номера прерываний, приоритет и расположение векторов прерываний.
Таблица 4.1 - Вектора прерываний процессора TMS320C5402

Номер TRAP / INTR (K) | Приоритет | Имя | Смещние (Hex) | Функция
0 | 1 | RS/SINTR | 0 | Сброс (аппаратный и программный)
1 | 2 | NMI/SINT16 | 4 | Немаскируемое прерывание
2 | – | SINT17 | 8 | Программное прерывание #17
3 | – | SINT18 | C | Программное прерывание #18
4 | – | SINT19 | 10 | Программное прерывание #19
5 | – | SINT20 | 14 | Программное прерывание #20
6 | – | SINT21 | 18 | Программное прерывание #21
. . . | . . . | . . . | . . . | . . .
14 | – | SINT29 | 38 | Программное прерывание #29
15 | – | SINT30 | 3C | Программное прерывание #30
16 | 3 | INT0/SINT0 | 40 | Внешнее прерывание #0
17 | 4 | INT1/SINT1 | 44 | Внешнее прерывание #1
18 | 5 | INT2/SINT2 | 48 | Внешнее прерывание #2
19 | 6 | TINT0/SINT3 | 4C | Прерывание таймера 0
20 | 7 | BRINT0/SINT4 | 50 | Прерывание приемника McBSP #0
21 | 8 | BXINT0/SINT5 | 54 | Прерывание передатчика McBSP #0
22 | 9 | DMAC0/SINT6 | 58 | Прерывание канала 0 DMA
23 | 10 | TINT1/DMAC1/ SINT7 | 5C | Прерывание таймера (стандартно) или канала 1 DMA
24 | 11 | INT3/SINT8 | 60 | Внешнее прерывание #3
25 | 12 | HPINT/SINT9 | 64 | Прерывание HPI
26 | 13 | BRINT1/DMAC2/ SINT10 | 68 | Прерывание приемника McBSP #1 (стандартно) или канала 2 DMA
27 | 14 | BXINT1/DMAC3/ SINT11 | 6C | Прерывание передатчика McBSP #1 (стандартно) или канала 3 DMA
28 | 15 | DMAC4/SINT12 | 70 | Прерывание канала 4 DMA
29 | 16 | DMAC5/SINT13 | 74 | Прерывание канала 5 DMA
30–31 | – | Reserved | 78–7F | Резерв

Оглавление | Программа | Теория| Практика | Контроль знаний | Об авторах
© БГУИР , 2012