logo search
HCS12 с применением языка С - royallib

Флаг переполнения счетчика

Если длительность измеряемых или формируемых микроконтроллером временных интервалов превышает период переполнения счетчика временной базы, то возникает необходимость в подсчете числа периодов переполнения этого счетчика. При достижении максимального кода $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 бит флага. Мы обсудим ниже варианты программного кода, которые могут быть использованы для сброса различных флагов, в том числе и флага переполнения счетчика временной базы.

Если в прикладной задаче необходимо измерить временной интервал, значительно превышающий по длительности период переполнения счетчика временной базы, то следует организовать дополнительный счетчик в одной из ячеек памяти. Содержимое этого счетчика будет инкрементироваться подпрограммой прерывания при каждом переполнении счетчика.