Счетчик реального времени(RTC) в Xmega.

Posted by Reason89 | Posted in , ,


    В микроконтролерах Xmega используется 16 битный счетчик реального времени(RTC) с одним каналом сравнения. Счетчик реального времени обычно используется в экономичных режимах работы МК с целью сохранения счета времени и возобновления активной работы МК через регулярные интервалы времени. Максимальное время отсчета счетчика 18 с лишним часов. Счетчик реального времени имеет предмасштабирование, с максимальным коэффициентом 1024. Коэффициент предмасштабирования можно задать в регистре CTRL.
    RTC - асинхронный модуль. Он синхронизируется от отдельного источника, который никак не связан с сигналом основной системной синхронизации и другими производными от него сигналами.  RTC может тактироваться от: внутреннего RC-генератора ультранизкой мощности на 32 кГц, внутренний подстраиваемый RC-генератор на 32 кГц( более точный, но и более прожорливый), внешний кварцевый генератор на 32.768 кГц (самый точный).
    RTC формирует событие или прерывание по достижению определенного или максимального значения(т.е. по переполнению). Счетчик реального времени может генерировать прерывания, по переполнению и по сравнению.
    Прерывание по переполнению имеют постоянную частоту при постоянном значении периода (PER). Регистр сравнения (COMP) позволяет изменять частоту прерываний без изменения периода или перезапуска регистра счетчика (CNT).
    Система событий не работает в спящих режимах глубже нерабочего режима (Idle).
    Векторы прерываний RTC:
OVF_vect Вектор прерывания по переполнению счетчика реального времени
PER_vect Вектор прерывания по совпадению в счетчике реального времени
    Функция инициализации RTC:

void RTC_init()
{
    CLK.RTCCTRL = CLK_RTCEN_bm+CLK_RTCSRC_RCOSC_gc;    // Включение и настройка на частоту 1кГц от внутреннего генератора 32кГц
    RTC.PER = 264;                                    // Заносим значение вершины счета.(До какого значения считать)
    RTC.CNT = 0;                                    // Обнуляем счетчик. В этом регистре хранится значение счетчика реального времени.
    RTC.INTCTRL = 0x03;                                // Включаем прерывания. Уровень прерываний высокий
}

RTC.CTRL = 0x01;                                    // Включение счетчика реального времени без предделителя, при 0x00 RTC выключен
                                                    // В этот регистр заносится коэффициент деления при включении RTC