Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
Биты CLK1:CLK0 назначают источник тактирования для счетчика временной базы модуля таймера (см. рис. 4.27).
Биты PAOVI и PAI (не путать с одноименным входом) разрешают прерывания по событию переполнения счетчика (флаг PAOVF) и по событию на входе PAI (флаг PAIF), тип которого определяется режимом работы и значением бита PEDGE.
Регистр флагов счетчика событий PAFLG (Pulse Accumulator Flag Register) располагается в памяти МК по адресу $00A1 и содержит всего два значимых бита (рис. 4.45). Флаг переполнения счетчика устанавливается, когда 16-разрядный счетчик подсистемы изменяет свое значение с $FFFF на $0000. Флаг события подсистемы PAIF устанавливается в 1 при каждом перепаде потенциала на входе PAI,
Регистр счетчика PACNT (Pulse Accumulator Counter Register) содержит текущий код 16-разрядного счетчика подсистемы. Поэтому он располагается в двух ячейках памяти: старший байт PACNTH — по адресу $00A2, младший байт PACNTL — по адресу $00A3. Поскольку изменение кода счетчика может произойти в произвольный момент времени, рекомендуется производить его чтение в двухбайтовом формата с использованием типа LDD или LDX/LDY.
Мы рассмотрим пример определения скорости движения велосипеда по сигналам датчика Холла, который установлен на колесе велосипеда. Датчики Холла доступны в различных модификациях. Обобщая сведения о датчиках Холла, можно выделить следующие три типа датчиков:
• Линейные датчики, напряжение на выходе которых пропорционально напряженности магнитного поля, в которое помещен датчик;
• Биполярные датчики, формируют выходной сигнал, находясь вблизи южного магнитного полюса, сбрасываются в 0, находясь вблизи северного магнитного полюса;
• Однополярные датчики, формируют выходной сигнал, находясь вблизи южного магнитного полюса, сбрасываются в 0 при отсутствии магнитного поля.
В нашем примере мы поместим магнит на спицу вращающегося колеса. Однополярный датчик Холла установим на вилке колеса, выход датчика соединим со входом (PT7) счетчика внешних событий МК семейства 68HC12 (рис. 4.46). Тогда на выходе датчика будет генерироваться один импульс при каждом полном обороте колеса. Если мы подсчитаем число импульсов с выхода датчика на известном временном интервале, мы сможем определить скорость движения и расстояние, которое было преодолено за время измерения.
Рис. 4.46. Колесо велосипеда с датчиком Холла
Читателю предлагается самостоятельно написать программу расчета скорости и преодоленного расстояния, используя следующие подсказки:
• В первую очередь определите связь между одним оборотом колеса и пройденной дистанцией пути. Предположите, что диаметр колеса равен 66,04 см (26 дюймов).
• Произведите инициализацию подсистемы счетчика внешних событий:
a. Подсистема счетчика событий использует вход PT7 для подключения внешнего импульсного сигнала. Для конфигурирования линии PT7 на ввод установите бит 7 регистра TIOS в 0, также в 0 должны быть установлены биты 6 и 7 регистра PCTL1.
b. Запрограммируйте на выбранный режим регистр управления счетчиком событий PACTL. Определите необходимое состояние каждого бита самостоятельно.
• Считайте под управлением программы текущее состояние счетчика внешних событий, используя регистр PACNT.
• Сформируйте временной интервал, длительность которого должна быть достаточна накопления в счетчике событий нескольких десятков отсчетов. Тогда точность измерения скорости будет приемлемой (несколько единиц %).
• Считайте под управлением программы новое текущее состояние счетчика событий.
• Получите разность кодов и вычислите скорость и пройденное расстояние. Приведенный ниже программный фрагмент поможет Вам выполнить инициализацию подсистемы счетчика событий.
4.15. Модуль меток реального времени
Многие применения требуют организации выполнения одного и того же фрагмента программы через равные интервалы времени. Для удобства разработчиков МК семейства 68HC12/HCS12 оснащены специальным модулем меток реального времени RTI (Real Time Interrupt), который генерирует равноотстоящие во времени запросы на прерывание (рис. 4.47). Тогда фрагмент программы, которые должен исполняться через равные интервалы времени, может быть оформлен как подпрограмма прерывания по запросу RTI. И желаемый алгоритм функционирования устройства будет реализован.
Рис. 4.47. Временная диаграмма, поясняющая принцип действия модуля меток реального времени, и регистры управления модулем
Модуль меток реального времени RTI использует два регистра специальных функций: регистр управления RTICTL (Real Time Interrupt Control Register) и регистр флагов RTIFLG (Real Time Interrupt Flag Register).
Бит RTIE в регистре управления RTICTL (рис. 4.47) разрешает работу подсистемы меток реального времени. При RTIE = 1 подсистема находится в активном состоянии, при RTIE = 0 работа системы запрещена. Биты RTR2:RTR1:RTR0 определяют период следования меток реального времени. Таблица рис. 4.47 устанавливает соответствие между кодовой комбинацией битов RTR2:RTR1:RTR0 и временным интервалом между двумя соседними метками модуля RTI. Последний именуют периодом RTI.
Выбор периода генерации меток реального времени
RTR[2:0] | Коэффициент деления 2х | При частоте внутренней системной шины | |
---|---|---|---|
4 МГц | 8 МГц | ||
000 | зарезервирован | нет | нет |
001 | 13 | 2,048 мс | 1,024 мс |
010 | 14 | 4,096 мс | 2,048 мс |
011 | 15 | 8,192 мс | 4,096 мс |
100 | 16 | 16,384 мс | 8,192 мс |
101 | 17 | 32,768 мс | 16,384 мс |
110 | 18 | 65,536 мс | 32,768 мс |
111 | 19 | 131,072 мс | 65,536 мс |