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

Таблица 2.2

Описание служебных полей регистра TIMER0TCR

Разряды

Поле

Значение

Описание

15

TIF

0

1

Флаг прерывания Таймера 0 ЦПУ (Timer Interrupt Flag)

Значение счетного регистра Таймера 0 не декрементировалось до 0. Только чтение.

 Установка флага происходит при уменьшении значения счетного регистра до 0. Запись в разряд 1 приводит к сбросу флага (TIF = 0).

14

TIE

0/1

Разряд разрешения прерывания от Таймера 0 ЦПУ (Timer Interrupt Enable)

Прерывание запрещено/разрешено

13 – 12

Резерв

Зарезервировано

11 – 10

FREE

SOFT

00

01

10/11

Режимы эмуляции Таймера 0 ЦПУ [1]

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

Остановка таймера после следующего декрементирования до 0

Режимы свободного счета

9 – 6

Резерв

Зарезервировано

5

TRB

0

1

Разряд перезагрузки Таймера 0 ЦПУ (Timer Reload Bit)

Результатом чтения разряда TRB всегда является 0

 При записи в разряд TRB 1 счетный регистр таймера TIMH:TIM пеpезагружается значением регистра периода PRDH:PRD. Одновременно происходит загрузка регистра счетчика предделителя  PSCH:PSC значением регистра коэффициента деления TDDRH:TDDR

4

TSS

0

1

Разряд состояния остановки Таймера 0 ЦПУ – флаг, с помощью которого можно запустить или остановить таймер

Равенство разряда 0 означает, что таймер запущен. Для запуска или перезапуска таймера необходимо записать в разряд 0. После сброса разряд автоматически сбрасывается в 0.

Равенство разряда 1 означает, что таймер остановлен. Запись в разряд 1 приведет к остановке таймера.

3 – 0

Резерв

1

Зарезервировано

Таблица 2.3

Описание служебных полей регистра предделителя TPRH:TPR

Разряды

Поле

Описание

15 – 8

PSCH:PSC

Счетчик предделителя. Разряды содержат текущее значение обратного счета импульсов источника тактирования: значение счетчика уменьшается на 1 до 0. По окончании счета (PSCH:PSC = 0) разряды перезагружаются содержимым TDDRH:TDD, одновременно происходит декрементирование на 1 счетного регистра Таймера 0 TIMH:TIM. Разряды PSCH:PSC также перезагружаются при программной установке в 1 разряда TRB регистра управления Таймера 0 TIMER0TCR. Содержимое разрядов можно прочитать, но непосредственная запись в них невозможна. После сброса все разряды устанавливаются в 0.

7 – 0

TDDRH:TDD

Коэффициент предделения. При подсчете (TDDRH:TDD + 1) импульсов происходит уменьшение содержимого счетного регистра TIMH:TIM на 1. При сбросе все разряды принимают нулевое значение.

Для увеличения времени счета в целое число раз, от значения требуемого коэффициента необходимо отнять 1 и записать результат в разряды TDDRH:TDD.

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

При обращении используются назначенные регистрам мнемоника и определения (в терминах битовых полей и структур, сведенных в регистровые файлы), прописанные в библиотечном заголовочном файле DSP280x_CpuTimers.h [2]. Его листинг приведен в файле ПРИЛОЖЕНИЯ. Ниже представлен текст программы Example_280xCpuTimer.c, которая является примером конфигурирование и работы с Таймером 0 ЦПУ. Обозначенная в программе последовательность действий является универсальной и может служить руководством к действию при написании собственных программ.

#include "DSP280x_Device.h"     // DSP280x Headerfile Include File

#include "DSP280x_Examples.h"   // DSP280x Examples Include File

// Объявление прототипа функции-обработчика прерывания от Таймера 0 ЦПУ.

interrupt void cpu_timer0_isr(void);

void main(void)

{

// Шаг 1. Инициализация системы управления:

// ФАПЧ (PLL), сторожевой таймер, разрешение тактирования периферийных модулей.

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

// Шаг 2. Инициализация модуля в/в GPIO: