Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Регистр флагов прерываний (IFR)15 14 13 12 11 10 9 8
7 6 5 4 3 2 1 0
Регистр разрешения прерываний (IER) 15 14 13 12 11 10 9 8
7 6 5 4 3 2 1 0
Рисунок 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)
Рисунок 2.30 – Инициализация таблицы векторов Таблица 2.6 – Реакция на прерывание
Таблица 2.7 – Автоматически сохраняемые регистры
|