Таймер 2: Примеры применения сбора данных
В приведенных ниже примерах программного кода и рисунках с 26 по 30 продемонстрированы функциональные возможности Таймера 2. Во всех примерах предполагается, что длительности импульсов и периоды сигналов не превышают 216 периодов входных синхроимпульсов и регистр захвата содержит желаемый результат.
Измерение длительности низкого импульса
Для измерения длительности первого полного обнаруженного низкого импульса на выводе T2P Таймер 2 должен быть настроен для работы в однократном режиме, стробирование должно быть задано по высокому уровню, а захват данных - по нарастающему фронту. Бит CPRL2 может быть установлен для формирования перезагрузки по нарастающему фронту.
; ------------------ Исходное состояние: T2R = T2V = T2C = 0000h ------------------------
MOVE T2CFG, #00000010b ; T2CI =0 (вход sysclk/N)
; T2DIV[2:0] =000 (/1)
; T2MD =0 (16-разрядный)
; CCF[1:0] =01 (нарастающий фронт)
; C/T2 =0 (таймер/захват)
MOVE T2CNA, #10100111b ; ET2 =1 (разрешение прерывания от Таймера 2)
; T2OE[0] =0 (вход)
; T2POL[0] =1 (уровень сигнала стробирования = '1')
; TR2L:TR2 =00 (не запускать таймер)
; CPRL2 =1 (перезагрузка по фронту захвата)
; SS2 =1 (однократный режим)
; G2EN =1 (активизация стробирования)
; ------------------ Прерывание TCC2: Длительность = T2C
|
Рисунок 26. Пример применения Таймера 2 - Измерение длительности низкого импульса
Многократное измерение длительности высокого импульса
Для многократного измерения длительности высокого импульса на выводе T2P, Таймер 2 может быть настроен для работы в однократном режиме с задержкой запуска, стробирование по низкому уровню сигнала, захват по спадающему фронту. Бит CPRL2 может быть установлен для формирования перезагрузки по каждому спадающему фронту.
; ------------------ Исходное состояние: T2R = T2V = T2C = 0000h ------------------------
MOVE T2CFG, #00000100b ; T2CI =0 (вход sysclk/N)
; T2DIV[2:0] =000 (/1)
; T2MD =0 (16-разрядный)
; CCF[1:0] =10 (спадающий фронт)
; C/T2 =0 (таймер/захват)
MOVE T2CNA, #10001111b ; ET2 =1 (разрешение прерывания от Таймера 2)
; T2OE[0] =0 (вход)
; T2POL[0] =0 (уровень сигнала стробирования = '0')
; TR2L:TR2 =01 (условие однократного запуска Таймера 2)
; CPRL2 =1 (перезагрузка по фронту захвата)
; SS2 =1 (однократный режим)
; G2EN =1 (активизация стробирования)
; ------------------ Прерывание TCC2: Длительность = T2C
|
Рисунок 27. Пример применения Таймера 2 - Измерение длительности высокого импульса
Измерение периода
Чтобы измерить период присутствующего на выводе T2P сигнала Таймер 2 должен быть настроен на работу в однократном режиме захвата, стробирование должно быть отключено, для захвата может быть выбран любой фронт (определяется битами CCF [1:0]). Бит CPRL2 может быть установлен на перезагрузку при каждом фронте захвата данных.
;------------------Исходное состояние: T2R = T2V = T2C = 0000h------------------------
MOVE T2CFG, *00000100b; T2CI =0 (вход sysclk/N)
; T2DIV [2:0] =000 (/1)
; T2MD =0 (16-разрядный)
; CCF [1:0] =10 (спадающий фронт)
; C/T2 =0 (таймер/захват)
MOVE T2CNA, *10000110b; ET2 =1 (разрешение прерывания от Таймера 2)
; T2OE [0] =0 (вход)
; T2POL [0] =0 (уровень сигнала стробирования = '0')
; TR2L:TR2 =00 (Таймер 2 не запускается)
; CPRL2 =1 (перезагрузка по фронту захвата)
; SS2 =1 (однократный режим)
; G2EN =0 (стробирование отключено)
;------------------ Прерывание TCC2: Период = T2C
|
Рисунок 28. Пример применения Таймера 2 - измерение периода сигнала
Неоднократное измерение скважности
Чтобы измерить скважность присутствующего на выводе T2P сигнала Таймер 2 должен быть настроен на однократный режим с задержкой перед запуском и захватом по обоим фронтам. Биты CPRL2 должны установлены в 1 для осуществления перезагрузки по каждому фронту. Для предотвращения перезагрузки на одном из фронтов необходимо активизировать стробирование. Бит T2POL [0] определяет, по какому фронту начинается/заканчивается цикл захвата и по какому фронту не надо производить перезагрузку.
;------------------Исходное состояние: T2R = T2V = T2C = 0000h------------------------
MOVE T2CFG, *00000110b; T2CI =0 (вход sysclk/N)
; T2DIV [2:0] =000 (/1)
; T2MD =0 (16-разрядный)
; CCF [1:0] =11 (оба фронта)
; C/T2 =0 (таймер/захват)
MOVE T2CNA, *10101111b; ET2 =1 (разрешение прерывания от Таймера 2)
; T2OE [0] =0 (вход)
; T2POL [0] =1 (блокировка перезагрузки по нарастающему
фронту
; однократный цикл начинается/заканчивается по спадающему
фронту)
; TR2L:TR2 =01 (запуск Таймера 2 в однократном режиме)
; CPRL2 =1 (перезагрузка по фронту захвата)
; SS2 =1 (однократный режим)
; G2EN =1 (разрешение стробирования)
;------------------Прерывание TCC2: Длительность низкого импульса =T2C
;-------------------Прерывание TCC2: Период = T2C
|
Рисунок 29. Пример применения Таймера 2 - измерение скважности
Переполнение/прерывание по истечении заданного периода
Чтобы прерывание формировалось только тогда, когда на выводе T2P присутствует низкий сигнал в течении некоторого заданного временного интервала, Таймер 2 может быть настроен на работу в режиме стробирующего сравнения с инициализацией начального значения, соответствующего заданной длительности.
;------------------Исходное состояние: T2R = T2V = T2C = 0000h------------------------
MOVE T2V, *1234h ; Переполнение после того, как на входе T2P низкий уровень
(10000h - 01234h) T2CLK циклов
MOVE T2CFG, *01110000b; T2CI =0 (вход sysclk/N)
; T2DIV [2:0] =111 (/128)
; T2MD =0 (16-разрядный)
; CCF [1:0] =00 (фронты не определены)
; C/T2 =0 (таймер/сравнение)
MOVE T2CNA, *10101001b; ET2 =1 (активизация прерывания от Таймера 2)
; T2OE [0] =0 (вход)
; T2POL [0] =1 (уровень сигнала стробирования = '1')
; TR2L:TR2 =01 (Запуск таймера 2)
; CPRL2 =0 (захват не возможен)
; SS2 =0 (не однократный режим)
; G2EN =1 (активизация стробирования)
;------------------Прерывание TF2: Превышен заданный период
|
Рисунок 30. Пример применения Таймера 2 - Переполнение/прерывание по истечении заданного периода