9.2.2. Пример часов реального времени с использованием модуля RTC

(Руководство разработчика по микроконтроллерам семейства HCS08)

В следующей программе показано, как использовать модуль RTC для МК серии QE на примере реализации простых часов реального времени. Часы отсчитывают секунды, минуты и часы.

Для правильной работы данного примера необходимо использовать кварцевый генератор частотой 32.768кГц, подключенный ко входу Yl. При этом перемычка J17 на демонстрационной плате DEMO9S08QE128 должна быть установлена. Не забудьте, что также должны быть запаяны дополнительные компоненты: RF, RS, C8 и C9.

Программный код генерирует метки реального времени с частотой 1Гц. Для этого используется внешний генератор ERCLK в составе модуля тактирования ICS (с частотой 32768 Гц), делитель на 1024 в составе модуля RTC и счетчик модуля RTC с программно установленным коэффициентом счета 32. Для достижения указанного значения необходимо записать в регистр RTCMOD значение 31.

Программный код очень похож на приведенный выше код для модуля RTI.

Пример 9.5. Часы реального времени на базе модуля RTC

//ДемонстрационнаяплатаDEMO9S08QE128
//ЧасыреальноговременисиспользованиеммодуляRTC
#include/*forEnableInterruptsmacro*/
#include"derivative.h"/*includeperipheraldeclarations*/
#include"hcs08.h"/*Этонашфайлсобъявлениями!*/
unsignedcharseconds,minutes,hours;
//ПодпрограммаобработкипрерываниямодуляRTC
voidinterruptVectorNumber_Vrtcrtc_isr(void)
{
RTCSC_RTIF=1;//СбросфлагаRTIF
seconds++;//Увеличиваемпеременнуюseconds(количествосекунд)
if(seconds>59)//Секундбольше59?
{
seconds=0;//Да,тогдаобнуляемколичествосекунд
minutes++;//иувеличиваемminutes(количествоминут)
if(minutes>59)//Минутбольше,чем59?
{
minutes=0;//Да,тогдаобнуляемколичествоминут
hours++;//иувеличиваемколичествочасов
if(hours>23)hours=0;
}
}
}
voidmain(void)
{
//НастройкарегистраSOPT1,включениелинииBKGD
//ивключениевозможностииспользованиякомандыSTOP
SOPT1=bSTOPE|bBKGDPE;
//КонфигурируеммодульICS:выборвнешнегокристалла,
//ICSERCLKвключенврежимеостанова
//ICSOUT=32768*512=16.7МГц,BUSCLK=8.4МГц
//IRCLK=отключен,ERCLK=32768Гц
ICSC2=bEREFS|bERCLKEN|bEREFSTEN;
/*КонфигурируеммодульICS:режимFEE,внешнийгенератор,коэффициентделениявмодулеICSравен1*/
ICSC1=ICS_FLL;//ICSврежимеFEE
while(ICSSC_CLKST!=ICSC1_CLKS);//Ждем,покаизменениявступятвсилу
SPMSC1=0;//ОтключениемодуляLVD
SPMSC2=0;//ВыбираемрежимостановаStop3
PTBDD=0xFF;//НастройкалинийпортаPTBнавывод
PTBD=0xFF;//УстановитьсостояниялинийPTBв1
//НастройкамодуляRTC:источниктактированияERCLK,
//коэффициентделениячастоты1024
RTCMOD=31;//Периодсчета=31+1=32
//ЧастотагенерациисигналаRTIF=32768/1024/32=1секунда
RTCSC=bRTC_RTIE|RTCLK_EXT|RTC_PRE_1024;
EnableInterrupts;
while(1)
{
//STOP;
}
}

9.3. Модуль MTIM

Модуль MTIM — простой 8-битный таймер; по структуре этот модуль очень похож на модуль меток реального времени RTC. Модуль MTIM имеют в своем составе МК серий QA, QG, SG и SH. Структурная схема модуля MTIM показана на Рис.9.3.

Рис.9.3. Структурная схема модуля MTIM.

Основным элементом модуля MTIM является 8-битный счетчик MTIMCNT. Он может тактироваться от одного из трех источников: от тактового сигнала шины BUSCLK, от тактового сигнала с выхода модуля тактирования XCLK или от внешнего генератора TCLK. Опции регистра MTIMCLK позволяют выбирать фронт сигнала тактирования, по которому будет увеличиваться значение счетчика MTIMCNT, если тактирование внешнее.

Если в качестве источника тактирования выбрана опция XCLK, то на вход модуля MTIM будет подключен опорный тактовый сигнал модуля внутреннего тактирования ICS с частотой, деленной на коэффициент RDIV модуля ICS.

Вывод микроконтроллера PTA5 может быть использован для подключения внешнего источника тактирования TCLK. Причем частота внешнего генератора не должна превышать одной четверти от частоты шины BUSCLK.

Источник тактирования счетчика модуля MTIM выбирается битовым полем CLKS в регистре MTIMCLK. Коэффициент для делителя определяется битовым полем PS регистра MTIMCLK. Можно выбрать один из 9 коэффициентов деления частоты: 1, 2, 4, 8, 16, 32, 64, 128 и 256.

Сигнал с выхода делителя поступает на вход 8-битного счетчика MTIMCNT, код которого увеличивается, пока не станет равным коду регистра периода MTIMMOD. По следующему нарастающему фронту тактового импульса устанавливается флаг события переполнения TOF в регистре MTIMSC. Если бит TOIE регистра MTIMSC установлен, то генерируется запрос на прерывание.

Частота меток реального времени от модуля MTIM рассчитывается по формуле:

,

где fTOF — частота генерации флага события модуля MTIM (частота меток реального времени);
fТАКТ — частота выбранного источника тактирования;
Делитель — коэффициент деления частоты;
MTIMMOD — значение регистра периода MTIMMOD.

Если значение регистра периода MTIMMOD = 0, то ограничение счета для счетчика модуля MTIM снимается, т.е. он считает от 0 до 255, поэтому период меток TOF равен 256 периодам тактового импульса. Того же эффекта можно добиться, записав в регистр MTIMMOD значение 255.

Если в бит TRST регистра управления MTMIMSC записать логическую 1, то произойдет сброс значения счетчика MTIMCNT и значения выбранного коэффициента деления. Этот бит доступен только для записи.

Счетчик модуля MTIM может также быть программно остановлен посредством записи 1 в бит TSTP регистра MTIMSC. При TSTP = 1 код счетчика не увеличивается. Если TSTP=0, то значение счетчика увеличивается по каждому фронту тактового импульса.

Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>