Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
• Бит разрешения работы модуля таймера TEN (регистр управления модулем таймера TSCR);
• Бит разрешения прерывания по переполнению счетчика временной базы TOI и биты выбора коэффициента деления программируемого делителя частоты на входе счетчика временной базы PR2:PR1:PR0 (регистр масок таймера TMSK2);
• Бит выбора режима работы канала IOSn (регистр режимов каналов захвата/сравнения TIOS). Если бит IOSn установлен в 1, то канал работает в режиме выходного сравнения. Если бит IOSn равен 0, то канал настроен на режим входного захвата;
• Биты выбора режима работы детектора
• Бит события в канале CnF (регистр флагов таймера TFLG1);
• Бит разрешения прерывания по событию в канале CnI (регистр масок таймера TMSK1);
• Регистр данных канала TCn, в который автоматически записывается код счетчика временной базы в момент события входного захвата.
Предположим, что период исследуемого сигнала не превышает длительности периода переполнения счетчика временной базы. Тогда, для измерения частоты и периода следования импульсов логического сигнала, необходимо реализовать в микроконтроллере следующую последовательность действий:
1. Разрешить работу модуля таймера;
2. Выбрать частоту тактирования счетчика временной базы, для чего установить желаемый коэффициент деления программируемого делителя частоты на входе счетчика временной базы;
3. Установить один из каналов в режим входного захвата по нарастающему фронту импульса;
4. Сохранить в памяти МК код счетчика временной базы в момент появления первого фронта импульса;
5. Сохранить в памяти МК код счетчика временной базы в момент появления второго фронта импульса;
6. Взять разность полученных кодов, которая будет равна периоду исследуемого сигнала. Воспользовавшись операцией деления, вычислить частоту исследуемого сигнала. На рис. 4.43 приведена блок схема рассмотренного алгоритма. Ниже приведен программный фрагмент (timer1.c), который реализует этот алгоритм. В программе применен метод программного опроса триггера события входного захвата C2F. Когда программа «обнаруживает» установленный в 1 триггер события первый раз, она копирует регистр данных канала в переменную rising_1, сбрасывает триггер и ожидает следующей установки триггера события. Когда триггер события установится второй раз, программа копирует регистр данных канала в переменную rising_2. Разность двух зафиксированных в регистре данных канала входного захвата значений позволит вычислить период, а затем и частоту исследуемого импульсного сигнала.
Рис. 4.43. Блок схема алгоритма измерения периода и частоты исследуемого сигнала
Отметим три момента в стиле написания исходного текста представленного программного фрагмента для измерения периода и частоты импульсного сигнала:
• Основная программа «main» содержит вызовы трех функций, каждая из которых выполняет отдельную смысловую задачу;
• Имена функций и переменных выбраны в соответствии с их смысловым назначением;
• Представленный исходный текст программы достаточно полно документирован посредством комментариев