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

// Функция находится в библиотечном файле DSP280x_Gpio.c [2];

// позволяет задать конфигурацию модуля GPIO, используемую по умолчанию.

// InitGpio();    // В данном случае не используется.

// Шаг 3. Очистить все прерывания и инициализировать таблицу векторов прерываний блока PIE:

// Запретить прерывания на уровне ЦПУ.

DINT;

// Задать изначальное состояние управляющих регистров  блока PIE:

// все прерывания блока PIE запрещены, флаги прерываний сброшены. 

InitPieCtrl(); // Размещение – файл DSP280x_PieCtrl.c [2]

// Запретить прерывания на уровне ЦПУ и очистить все флаги прерываний:

IER = 0x0000;

IFR = 0x0000;

// Инициализировать таблицу векторов прерываний указателями

// на функции-обработчики прерываний. 

// Это действие приведет к заполнению всей таблицы, включая прерывания,

// которые не используются в данном примере. Это может пригодиться в целях отладки.

InitPieVectTable(); // Функция располагается в файле DSP280x_PieVect.c [2].

// Используемые в данном примере прерывания перераспределяются соответственно

// используемым в файле функциям. 

EALLOW; // Команда, необходимая для разрешения изменения содержимого ряда служебных защищенных регистров

PieVectTable.TINT0 = &cpu_timer0_isr;

EDIS;    // Запрет изменения содержимого защищенных регистров

// Шаг 4. Инициализация всех периферийных модулей:

// Функция находится в файле DSP280x_InitPeripherals.c

// InitPeripherals(); // В этом примере не используется

InitCpuTimers();      // Здесь инициализируется только Таймер 0 ЦПУ

// Конфигурирование таймера таким образом, чтобы прерывание происходило 1 раз

// в секунду:

// Частота тактирования ЦПУ - 100 МГц, период счета - 1000000  (в мкс)

ConfigCpuTimer(&CpuTimer0, 100, 1000000);

StartCpuTimer0();

// Шаг 5. Пользовательский код, разрешение прерываний:

// Разрешить прерывания по линии INT1 ЦПУ, которая подключена к Таймеру 0:

IER |= M_INT1;

// Разрешить прерывание от Таймера 0 в блоке PIE: Группа 1 прерывание 7

PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

// Разрешить глобальные прерывания и обработку событий отладки в реальном

// масштабе времени, имеющим более высокий приоритет:

EINT;   // Разрешение глобального прерывания INTM

ERTM;   // Разрешение глобального прерывания реального времени DBGM

// Шаг 6. Пустой бесконечный цикл:

for(;;);

}

interrupt void cpu_timer0_isr(void)

{

CpuTimer0.InterruptCount++; // Счетчик прерываний

// Подтверждение прерывания

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

}

3. ЗАДАНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ

Общие

1)  Проанализировать файлы DSP280x_PieVect.h, DSP280x_PieCtrl.h, DSP280x_PieVect.c, DSP280x_PieCtrl.c (файл ПРИЛОЖЕНИЯ).

2)  Подключить отладочную плату P07162 к ПК, согласно рекомендациям руководства к плате.

3)  Открыть учебный проект (C:\Projects\28xx\ Lab2\Lab2.pjt: Projects ® Open ® Lab2.pjt), и предварительно проанализировав текст исходного файла main.cpp, запустить проект на компиляцию.

4)  Запрограммировать процессор. При успешном завершении процедуры наблюдается мигание светодиода, установленного на отладочной плате, с определенной частотой. При выполнении двух последних пунктов придерживаться методики, изложенной в указаниях к лабораторной работе № 1.

Если программа не выполняется, проверьте:

-  есть ли в папке лабораторной работы Lab2 файл program.hex;

-  включено ли питание платы, подключена ли плата к ПК;

-  правильно ли задан номер COM-порта;

-  не занят ли порт другой программой (например, Termina1.exe).

Сбросьте процессор кнопкой на стенде и повторите загрузку.

Если по-прежнему ничего не получается, позовите преподавателя.

Индивидуальные

1) Измените программу таким образом, чтобы частота мигания светодиода увеличилась/уменьшилась, используя счетный регистр таймера. Объясните результат

2) Измените программу таким образом, чтобы частота мигания светодиода увеличилась/уменьшилась, используя регистр делителя таймера. Объясните результат.


ЛИТЕРАТУРА

1.  SPRU712: TMS320C28xx, 2801x, 2804x DSP system control and interrupts. Reference guide.

2.  SPRC191: C280x/C2801x C/C++ header files and peripheral examples library. V. 1.7.

3.  SPRAA85B: Programming TMS320x28xx and 28xxx peripherals in C/C++