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

Режим входного захвата

Структура аппаратных средств подсистемы входного захвата IC, которая образуется в результате конфигурирования универсального канала модуля таймера на режим захвата, представлена на рис. 4.34. Подсистема входного захвата запоминает код счетчика временной базы в момент изменения логического сигнала на входе IOSn (n — номер канала). Изменение логического сигнала распознается детектором события, который может быть программно настроен на один из четырех режимов работы:

• Распознавание изменения сигнала с 0 на 1 — положительный фронт;

• Распознавание изменения сигнала с 1 на 0 — отрицательный фронт;

• Распознавание любого изменения уровня сигнала;

• Соответствующий вывод МК не подключен к каналу входного захвата и является выводом порта T.

Рис. 4.34.  Структура одного канала таймера в режиме входного захвата и регистры управления каналом TCTL3 и TCTL4

Если детектор определил заданное изменение входного сигнала, то говорят, что наступило событие входного захвата. В момент наступления события код счетчика временной базы запоминается в регистре защелке, одновременно устанавливается триггер события канал CnF (рис. 4.34). Триггер может быть считан программно, или генерируется запрос на прерывание, если прерывания от канала n модуля таймера разрешены.

Для настройки детектора события каждого канала на один из трех перечисленных режимов используются биты EDGnB:EDGnA в регистрах TCTL3 ($008A) и TCTL4 ($008B). Формат этих регистров представлен на рис. 4.34. Таблица рис. 4.35 устанавливает соответствие между режимом работы детектора события и кодом инициализации в разрядах EDGnB:EDGnA.

Рис. 4.35. Выбор режима работы детектора события

Подсистема входного захвата IC используемся в микропроцессорной технике для измерения различных временных характеристик импульсных сигналов, таких как период следования, коэффициент заполнения, длительность нулевого или единичного состояния. Так для того, чтобы измерить период импульсной последовательности, необходимо запомнить состояние счетчика временной базы в моменты двух соседних изменений сигнала с 0 на 1 (положительный фронт) или с 1 на 0 (отрицательный фронт). Разность этих значений и составит период повторения импульсного сигнала, выраженный в числе периодов частоты тактирования счетчика временной базы. Таким образом будет произведено измерение в относительных единицах конкретной микропроцессорной системы. Если измерение производится с целью управления, то представление временного параметра в относительных единицах обычно является достаточным. Однако, если измеренный параметр должен быть отображен на дисплее, то он должен быть представлен в универсальных единицах измерения, т.е. в микросекундах, миллисекундах и т.д. Для получения численного значения последнего необходимо полученное число относительных единиц умножить на длительность периода частоты тактирования счетчика временной базы. При программировании на Си операция умножения реализуется с использованием стандартной библиотеки. При программировании на ассемблере Вам потребуются дополнительные знания, поскольку операцию умножения необходимо будет исполнять над двухбайтовыми числами.

Если детектор события распознал изменение входного сигнала, которое указано в его текущей конфигурации, то аппаратные средства канала входного захвата автоматически совершают следующие действия:

1. Текущее состояние 16-разрядного счетчика временной базы запоминается в регистре-защелке канала и сразу копируется в 16-разрядный регистр данных канала TCn (n — номер канала). Поскольку данные в регистре TCn не изменяются, то они могут быть считаны побайтно (TCnH — старший байт регистра данных канала, TCnL — младший байт регистра данных), или в двухбайтовом формате. При программировании на Си рекомендуется использовать двухбайтовый формат, используя для этого переменную в формате unsigned integer.

2. Устанавливается флаг события канала CnF. Этот флаг «сообщает» основной программе о том, что событие произошло, и регистр данных канала TCn должен быть считан программой.

3. Если прерывания по флагу события CnF разрешены (бит CnI установлен), то генерируется запрос на прерывание.

Подсистема входного захвата может быть настроена для реализации разнообразных функций. Рассмотрим пример измерения длительности единичного состояния входного сигнала, т.е. импульса положительной полярности. Предположим, что длительность импульса не превышает периода переполнения счетчика временной базы таймера, исследуемая импульсная последовательность поступает на вход канала 2 модуля таймера, который предварительно настроен в режим входного захвата. Тогда для измерения длительности импульса должна быть реализована следующая последовательность действий:

1. Управляющая программа устанавливает режим работы детектора событий канала 2. Должен быть выбран режим мониторинга нарастающего фронта входного сигнала. Для этого следует установить биты EDG2B:EDG2A в регистрах TCTL3:TCTL4 в состояние 01.

2. Управляющая программа контролирует состояние триггера события C2F.

3. Если триггер C2F установился в 1, то контролируемый сигнал на линии PT2 изменился с 0 на 1. В момент изменения код счетчика временной базы был автоматически переписан в регистр защелку канала 2. Теперь этот код доступен для чтения из регистра данных TC2.

4. Управляющая программа обнаруживает, что триггер C2F установился. Тогда программа считывает двухбайтовый код из регистра данных канала TC2 и записывает его в двухбайтовую беззнаковую переменную rising_edge.

5. Управляющая программа сбрасывает триггер события C2F посредством записи в бит C2F единицы.

6. Управляющая программа изменяет режим работы детектора событий канала 2. Должен быть выбран режим мониторинга отрицательного фронта входного сигнала. Для этого следует установить биты EDG2B:EDG2A в регистрах TCTL3:TCTL4 в состояние 10.

7. Управляющая программа контролирует состояние триггера события C2F.

8. Если триггер C2F установился в 1, то сигнал на линии PT2 изменился с 1 на 0. В момент изменения код счетчика временной базы был опять автоматически переписан в регистр защелку канала 2.

9. Управляющая программа обнаруживает установленный триггер C2F, считывает двухбайтовый код из регистра данных канала TC2 и записывает его в двухбайтовую беззнаковую переменную falling_edge.

10. Управляющая программа сбрасывает триггер события C2F посредством записи в бит C2F единицы.

11. Управляющая программа вычисляет число периодов частоты тактирования счетчика временной базы между положительным и отрицательным фронтами исследуемого сигнала: TIME = falling_edge – rising_edge. Это число и есть искомая длительность импульса положительной полярности сигнала на входе PT2, выраженная числом периодов частоты тактирования счетчика временной базы.

12. При необходимости длительность импульса может быть представлена в общепринятых единицах измерения времени. Для этого управляющая программа должна выполнить операцию умножения числа TIME на длительность единицы измерения времени таймера, т.е. на длительность периода частоты тактирования счетчика временной базы: tIZM = TIME×1/fBASE.

Регистры специальных функций, связанные с подсистемой входного захвата, мы обсудим позже, после рассмотрения подсистемы выходного сравнения.