Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

Рис. 4.47. Временная диаграмма, поясняющая принцип действия модуля меток реального времени, и регистры управления модулем

Рис. 4.48. Блок-схема алгоритма часов реального времени

Регистр флагов RTIFLG (рис. 4.47) содержит всего один флаг RTIF. Этот флаг устанавливается, когда модуль закончил отсчет очередного периода RTI.

Счетчик подсистемы меток реального времени тактируется импульсной последовательностью с частотой fBUS.

В модуле меток реального времени эта частота делится. Коэффициент деления, устанавливаемый разрядами RTR2:RTR1:RTR0, можно выбрать по таблице рис. 4.47. Проанализировав данные таблицы, можно установить, что для МК с частотой внутренней шины 8 МГц максимальный период меток реального времени составляет примерно 65 мс.

Пример использования модуля меток реального времени

Ниже приведен исходный текст программы realtime.c для реализации часов реального времени на основе отсчетов модуля RTI с интервалами 8,196 мс. В подпрограмме прерывания программный счетчик накапливает 122 отсчета RTI (рис.4.48), которые составляют временной интервал длительностью 1 с. По прошествии каждой секунды инкрементируется программный счетчик sec_ctr, по прошествии каждой минуты — счетчик mins_ctr и т.д. вплоть до счетчика дней.

При желании функции программы можно расширить, введя подсчет дня недели, месяца и года.

/*-----------------------------------------------------------------------*/

/* filename: realtime.c */

/* МAIN PROGRAМ: Эта программа генерирует две импульсных */

/* последовательности с использованием таймера и двух каналов подсистемы */

/* прерывания.Сигналы формируются на выходах 2 и 3 таймера. */

/*-----------------------------------------------------------------------*/

/*подключаемые файлы*/

#include <912b32.h>

/*используемые функции*/

void RTI_isr{void); /*подпрограмма прерывания по RTI*/

/* interrupt pragma */

#pragma interrupt_handler RTI_isr

/*инициализация таблицы векторов прерывания*/

#pragma abs_address: 0xF7F0

void (*RTI_interrupt_vector[]) ={RTI_isr};

#pragma end_abs_address

/*глобальные переменные*/

unsigned int ms_ctr, sec_ctr, mins_ctr, hrs_ctr, days_ctr;

void main{void) {

 ms_ctr = 0; /*инициализация переменных*/

 sec_ctr = 0;

 mins_ctr = 0;

 hrs_ctr = 0;

 days_ctr = 0;

 RTICTL = 0х84; /*разрешить прерывания от модуля RTI, выбрать*/

 CLI; /*период RTI 8,196 мс*/

 while(1) /*ожидать прерывание*/

 {

;

 }

}

/*---------------------------------------------------------*/

/*
Функция RTI_isr подпрограмма прерывания каждые 8,196 мс */

/*---------------------------------------------------------*/

void RTI_isr(void) {

 RTIFLG = 0х80; /*сброс флага события RTI*/

 ms_ctr = ms_ctr+1; /*обновить счетчик миллисекунд*/

 if (ms_ctr == 122) /*обновить счетчик секунд*/

 {

ms_ctr = 0;

sec_ctr = sec_ctr + 1;

 }

 if (sec_ctr == 60) /*обновить счетчик минут*/

 {

sec_ctr = 0;

mins_ctr = mins_ctr + 1;

 }

 if (mins_ctr == 60) /*обновить счетчик часов*/

 {

mins_ctr = 0;

hrs_ctr = hrs_ctr + 1;

 }

 if (hrs_ctr == 24) /*обновить счетчик дней*/

 {

hrs_ctr = 0;

days_ctr = days_ctr + 1;

 }

}

/*---------------------------------------------------------*/

4.16. Модуль таймера ECT в составе МК МC68HC12BE32 и HCS12

Все микроконтроллеры семейства HCS12 и всего одна модель MC68HC12BE32 семейства 68HC12 оснащены более совершенным модулем таймера ECT (Enhanced Capture Timer). Модуль таймера EST унаследовал основные технические решения от своего предшественника — модуля таймера TIM. Поэтому, так же как в модуле TIM, основу таймера EST составляют 16-разрядный счетчик временной базы и восемь универсальных каналов захвата/сравнения.

Однако в модуле EST четыре канала из восьми в режиме входного захвата обладают дополнительным регистром. Такое решение позволяет в режиме входного захвата зафиксировать два момента изменения сигнала на входе канала прежде, чем будет установлен триггер события в канале CnF. Рассматриваемые каналы называют буферированными, они могут работать как в режиме временного хранения, так и в режиме очереди. Четыре оставшихся канала называют небуферированными. Правила функционирования этих каналов в режиме входного захвата полностью соответствуют аналогичным для модуля TIM. Полный набор функций каналов захвата/сравнения модуля таймера EST приведен на рис. 4.49.

Рис. 4.49. Усовершенствованный модуль таймера ECT

Второе отличие модуля EST от модуля TIM состоит в том, что модуль EST имеет в своем составе четыре 8-разрядных счетчика события (PACN3…PACN0). Эти счетчики могут быть объединены парами для получения двух 16-разрядных счетчиков событий: (PACN3:PACN2) и (PACN1:PACN0).

Обратимся далее к более подробному рассмотрению дополнительных режимов работы модуля EST.

Поделиться с друзьями: