Величина коэффициента деления определяет длительность периода переполнения счетчика временной базы. Поскольку разрядность счетчика равна 16, то коэффициент счета этого двоичного счетчика равен 2 16или 65356. Минимальный период переполнения счетчика составляет 8169 мс (2 16импульсов × 1/8 МГц), поскольку максимальная частота импульсной последовательности PCLK, равная частоте тактирования межмодульных магистралей, составляет 8 МГц. Однако при задании максимального коэффициента деления, равного 32 (см. таблицу рис. 4.28), период переполнения счетчика составит уже 262424 мс (2 16импульсов × 32/8 МГц).
В некоторых приложениях необходимо формировать временные интервалы, значительно превышающие приведенные расчетные значения. Этого можно достигнуть путем снижения частоты тактирования счетчика временной базы.
Однако уменьшение частоты импульсной последовательности PCLK связано со снижением производительности процессорного ядра. Поэтому для счетчика временной базы предусмотрены три альтернативных источника тактирования PACLK, PACLK/256, PACLK/65536. Выбор одного из четырех источников тактирования осуществляется двухразрядным кодом CLK1:CLK0 в регистре управления счетчиком внешних событий PACL. Формат регистра PACL представлен на рис. 4.27.
Флаг переполнения счетчика
Если длительность измеряемых или формируемых микроконтроллером временных интервалов превышает период переполнения счетчика временной базы, то возникает необходимость в подсчете числа периодов переполнения этого счетчика. При достижении максимального кода $FFFF счетчик не останавливается, он продолжает считать дальше. Поэтому при поступлении следующего тактового импульса в счетчике установится код $0000. Такое изменение кода называется событием переполнения счетчика и фиксируется установкой бита TOF в регистре управления счетчиком TFLG2 (рис. 4.27). Триггер TOF называют триггером переполнения счетчика. Этот триггер может быть считан под управлением программы, или, если прерывания по событию переполнения счетчика разрешены, то установленный в 1 триггер TOF генерирует запрос на прерывание. Прерывание по переполнению счетчика временной базы имеет свой собственный вектор и собственный бит разрешения прерывания TOI в регистре TMSK2 (рис. 4.27).
Если код счетчика временной базы изменился с $FFFF на $0000, то триггер TOF устанавливается в 1. При использовании этого флага для вызова прерываний следует позаботиться о том, чтобы флаг был сброшен под управлением подпрограммы прерывания до наступления следующего переполнения таймера. Для сброса (установки в 0) флага TOF следует записать 1 в бит 7 регистра TMSK2, т.е. выполнить любую команду установки в 1 этого флага. Вышесказанное не ошибка! Большинство флагов регистров специальных функций МК семейства 68HC12/HCS12, генерирующих разнообразные запросы на прерывание, сбрасываются в 0 посредством записи 1 в находящийся в состоянии 1 бит флага. Мы обсудим ниже варианты программного кода, которые могут быть использованы для сброса различных флагов, в том числе и флага переполнения счетчика временной базы.
Если в прикладной задаче необходимо измерить временной интервал, значительно превышающий по длительности период переполнения счетчика временной базы, то следует организовать дополнительный счетчик в одной из ячеек памяти. Содержимое этого счетчика будет инкрементироваться подпрограммой прерывания при каждом переполнении счетчика.
Определение длительности временных интервалов
Во многих приложениях возникает необходимость определения длительности временного интервала между двумя изменениями сигнала на одной из линий порта. Эта задача может быть решена двумя способами.
При первом способе счетчик временной базы сбрасывается в момент первого изменения сигнала. Обнуление счетчика можно произвести в подпрограмме прерывания по событию входного захвата, которое соответствует первому изменению исследуемого сигнала. В этой же подпрограмме подсистема входного захвата перепрограммируется на детектирование второго события в исследуемом сигнале. Счетчик временной базы продолжает наращивать код. В момент второго изменения сигнала, которое фиксирует подсистема входного захвата, текущий код счетчика запоминается в специальном двухбайтовом регистре. Если в процессе слежения за сигналом переполнений счетчика временной базы не было, то запомненный код и есть искомая длительность временного интервала, выраженная в числе периодов частоты тактирования счетчика временной базы.
Читать дальше