Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основной текст.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.21 Mб
Скачать

Регистр флагов прерываний (ifr)

15 14 13 12 11 10 9 8

RTOSINT

DLOGINT

INT14

INT13

INT12

INT11

INT10

INT9

7 6 5 4 3 2 1 0

INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

Регистр разрешения прерываний (ier)

15 14 13 12 11 10 9 8

RTOSINT

DLOGINT

INT14

INT13

INT12

INT11

INT10

INT9

7 6 5 4 3 2 1 0

INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

Рисунок 2.26 – Регистры системы прерываний

Биты регистров можно установить и сбросить программно:

/*** ручная установка/стирание IFR ***/

extern сregister volatile unsigned int IFR;

IFR |= 0x0008; //установить INT4 в IFR

IFR &= 0xFFF7; //запретить INT4 в IFR

/*** Регистр разрешения прерываний ***/

extern сregister volatile unsigned int IER;

IER |= 0x0008; //разрешение INT4 в IER

IER &= 0xFFF7; //запрещено INT4 в IER

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

Бит глобального разрешения/запрещения прерываний (INTM) находится в регистре ST1 (бит 0).

– разрешение: INTM = 0;

– запрещение: INTM = 1 (значение после сброса).

Модификация INTM выполняется только через ассемблерный код:

/*** Глобальные прерывания***/

asm(“ CLRC INTM”); //глобальное разрешение прерываний

asm(“ SETC INTM”); //глобальное запрещение прерываний

Все 96 возможных источников прерываний группируются в 12 PIE–линий, 8 источников на линию (рис.2.27). Для разрешения/запрещения отдельных источников, необходимо запрограммировать другую группу регистров: «PIEIFRx» и «PIEIERx» (рис.2.28).

Рисунок 2.27 – Расширение периферийных прерываний – PIE

Рисунок 2.28 – PIE Регистры

Пример программирования этих регистров:

#include “DSP2833x_Device.h”

PieCtrlRegs.PIEIFR1.bit.INTx4 =1; //установка IFR для XINT1 в PIE группе1

PieCtrlRegs.PIEIER3.bit.INTx5 = 1; //разрешение CAPINT1 в PIE группа 3 PieCtrlRegs.PIEACK.all = 0x0004; //подтверждение PIE группа 3

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //разрешение PIE

Все источники прерывания подключаются к линиям прерывания согласно таблице назначения (табл.2.5).

Примеры: ADCINT = INT1.6; T2PINT = INT3.1; SCITXINTA = INT9.2

Загрузка таблицы векторов после сброса показана на рисунке 2.29.

В таблице 2.5 показано размещение векторов в памяти, адреса 0x00 0D40 по 0x00 0DFF использованы в качестве области расширения. Теперь у нас есть 32 бита для каждого индивидуального вектора прерывания PIEINT1.1 до PIEINT12.8.

Алгоритм инициализации таблицы векторов показан на рисунке 2.30.

После того, как прерывание подтверждено ЦП, начинается автоматическая аппаратная контекстная последовательность. Она включает автоматическое сохранение 14 внутренних регистров со всеми важными внутренними битами управления и статуса, и загружает счетчик команд (PC) адресом ISR. Последовательность действий, выполняемая аппаратурой, в ответ на прерывание показана в таблице 2.6, а сохраняемые регистры в таблице 2.7.

Таблица 2.5 – F2833x PIE Таблица назначения прерываний

Рисунок 2.29 – Таблица векторов прерываний после сброса

Т аблица 2.5 – Размещение векторов PIE (ENPIE = 1)

Название

Адрес вектора PIE

Описание векторов PIE

Сброс

0x00 0D00

Вектор сброса

INT1

0x00 0D02

INT1 отображен ниже

… …

… …

… …

… …

… …отображен ниже

… …

INT12

0x00 0D18

INT12 отображен ниже

INT13

0x00 0D1A

XINT13 вектор прерывания Таймер1(RTOS)

INT14

0x00 0D1C

Таймер 2 – вектор RTOS

Datalog

0x00 0D1D

Вектор регистрации данных

… …

… …

… …

… …

… …

… …

USER11

0x00 0D3E

Пользовательское прерывание

INT1.1

0x00 0D40

PIEINT1.1 вектор прерывания

… …

… …

… …

INT1.8

0x00 0D4E

PIEINT1.8 вектор прерывания

… …

… …

… …

INT12.1

0x00 0DF0

PIEINT12.1 вектор прерывания

… …

… …

… …

INT12.8

0x00 0DFE

PIEINT12.8 вектор прерывания

Рисунок 2.30 – Инициализация таблицы векторов

Таблица 2.6 – Реакция на прерывание

Действия ЦП

Описание

Registers ® stack

Автоматическое сохранение 14 регистров

0 –> IFR (бит)

Стереть соответствующий бит в IFR

0 –> IER (бит)

Стереть соответствующий бит в IER

1 –> INTM/DBGM

Запрещение прерываний/событий отладки

Вектор –> PC

Загрузка PC адресом вектора прерывания

Стирает другие биты статуса

Стирает LOOP, EALLOW, IDLESTAT

Таблица 2.7 – Автоматически сохраняемые регистры

T

ST0

AH

AL

PH

PL

AR1

AR0

DP

ST1

DBSTAT

IER

PC(старшее слово)

PC(младшее слово)