Использование прерываний. Таймеры ЦПУ, страница 3

ЦПУ фиксирует приоритет прерываний для линий INT1 – INT2. Блок PIE контролирует приоритет каждого из 8 прерываний группы. Таблица векторов защищена от непреднамеренной записи командой EALLOW.

Из 96 возможных аппаратных прерываний [1] фактически используется только 43. Остальные прерывания зарезервированы и могут быть использованы в новых процессорах по мере развития их семейства. Однако зарезервированные прерывания могут быть использованы в качестве программных прерываний. Для этого они должны быть доступны (разрешены) на уровне регистра флагов прерываний PIEIFRx при условии, что ни одно из прерываний в пределах используемой группы не используется в качестве аппаратного. В противном случае прерывания от периферийных модулей могут быть потеряны из-за случайной очистки их флагов в процессе модификации регистра PIEIFR.

Резюмируя, можно предложить два варианта безопасного использования зарезервированных прерываний в качестве программных прерываний:

1.  Ни для одного периферийного модуля (в пределах группы) прерывания не используются (не назначены).

2. 


Группе не назначено ни одного аппаратного прерывания.

1.4. Конфигурирование блока PIE

Краткое описание регистров блока PIE

Регистры управления блока PIE и их краткое описание приведены в табл. 1.1.

Таблица 1.1

Сводная таблица регистров управления блока PIE

Обозначение

Адрес hex

Размер (x16)

Описание

PIECTRL

0x0000 – 0CE0

1

Управляющий регистр блока PIE (PIE Control)

PIEACK

0x0000 – 0CE2

1

Регистр подтверждения (PIE Acknowledge)

PIEIER1 – PIEIER12

1 x 12

Регистры разрешения прерываний групп INT1 – INT12 (PIE INTx Group Enable)

PIEIFR1 – PIEIFR12

1 x 12

Регистры флагов прерываний групп INT1 – INT12 (PIE INTx Group Flag Register)

Обращение к управляющим регистрам и программирование блока PIE

При обращении используются назначенные регистрам мнемоника и определения (в терминах битовых полей и структур, сведенных в регистровые файлы), прописанные в библиотечном заголовочном файле DSP280x_PieCtrl.h [2]. Его листинг приведен в файле ПРИЛОЖЕНИЯ. Более подробная информация об используемом при программировании периферийных модулей подходе приведена в методических указаниях к лабораторной работе № 1 и в [3]. Ниже для примера представлен фрагмент текста программы, реализующей функцию инициализации регистров блока PIE – InitPieCtrl(). Исходный текст функции является частью библиотечного файла DSP280x_PieCtrl.c (см. файл ПРИЛОЖЕНИЯ) [2], содержащего элементарные процедуры для работы с блоком PIE.

void InitPieCtrl(void)

{

// Запрещение прерываний на уровне ЦПУ:

DINT;

// Отключение блока PIE

PieCtrlRegs.PIECTRL.bit.ENPIE = 0;

// Очистка всех регистров разрешения прерываний PIEIER:

PieCtrlRegs.PIEIER1.all = 0;

.

.

.

PieCtrlRegs.PIEIER12.all = 0;

// Очистка всех регистров флагов прерываний PIEIFR:

PieCtrlRegs.PIEIFR1.all = 0;

.

.

.

PieCtrlRegs.PIEIFR12.all = 0;

}         

2. ТАЙМЕРЫ ЦПУ

2.1. Общие сведения

ЦПУ процессоров семейства 280x включает в себя 3 32-разрядных таймера (Timer0/1/2). Timer1 и Timer2 ЦПУ зарезервированы для выполнения системных функций, например, таких как DSP/BIOS. Если в приложении не предусмотрено использование функций DSP/BIOS, то Timer2 может быть использован в приложениях пользователя. Timer0 непосредственно предназначен к использованию программистом. На рис. 2.1 представлена функциональная схема Таймера 0 ЦПУ.