Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Регистр флагов прерываний (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(младшее слово)

 

Date: 2015-06-06; view: 1066; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию