Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf12.2. Функционирование Таймера А 311
Режим непрерывного счёта
В режиме непрерывного счёта таймер циклически считает в прямом направ лении от нуля до значения 0FFFFh, как показано на Рис. 12.4. Регистр TACCR0 используется так же, как и остальные регистры захвата/сравнения.
0FFFFh |
0h |
Рис. 12.4. Режим непрерывного счёта. |
Флаг прерывания TAIFG устанавливается при счёте таймера от значения 0FFFFh до нуля (Рис. 12.5).
Тактовый сигнал таймера
Таймер |
FFFEh |
FFFFh |
0h |
1h |
FFFEh |
FFFFh |
0h |
Установка TAIFG
Рис. 12.5. Установка флага прерывания в режиме непрерывного счёта.
Использование режима непрерывного счёта
Режим непрерывного счёта может использоваться для формирования незави симых временных интервалов и сигналов разных частот. Каждый раз при завер шении очередного интервала генерируется прерывание. В процедуре обработки прерывания длительность следующего интервала прибавляется к содержимому регистра TACCRx. На Рис. 12.6 показано формирование двух временных интер валов длительностью t0 и t1 (эти значения прибавляются к содержимому регист ров захвата/сравнения). В данном случае формирование временных интервалов осуществляется аппаратно, и задержка обработки прерывания не сказывается на их длительности.
Временные интервалы можно формировать и в других режимах, использую щих регистр TACCR0 в качестве регистра периода. Однако при этом необходимо предусмотреть обработку ситуации, когда сумма старого содержимого TACCRx и значения нового периода оказывается больше содержимого регистра периода TACCR0. В таком случае для получения корректного результата из получившейся суммы необходимо вычесть значение TACCR0 + 1.
312 Глава 12. Таймер A |
|
|
TACCR1b |
TACCR1c |
|
TACCR0b |
TACCR0c |
TACCR0d |
|
||
0FFFFh |
|
|
TACCR1a |
|
TACCR1d |
TACCR0a |
|
|
t0 |
t0 |
t0 |
t1 |
t1 |
t1 |
Рис. 12.6. Формирование временных интервалов в режиме непрерывного счёта. |
Режим реверсивного счёта
Режим реверсивного счёта используется в случае, если период таймера дол жен быть отличным от 0FFFFh и если необходимо генерировать симметричные импульсы. В данном режиме таймер циклически считает в прямом направлении до тех пор, пока его значение не станет равным содержимому регистра сравнения TACCR0, а затем в обратном направлении до нуля, как показано на Рис. 12.7. При этом период равен удвоенному значению TACCR0.
0FFFFh |
TACCR0 |
0h |
Рис. 12.7. Режим реверсивного счёта. |
Направление счёта фиксируется, что позволяет после останова таймера и пос ледующего его запуска продолжать счёт в том же направлении, что и до останова. Если этого не требуется, то для сброса признака направления необходимо запи сать 1 в бит TACLR. Установка бита TACLR также вызывает очистку регистра TAR
иделителя тактового сигнала таймера.
Врежиме реверсивного счёта флаг прерываний CCIFG для регистра TACCR0
ифлаг TAIFG устанавливаются только один раз за период, причём интервал меж ду установкой этих флагов составляет 1/2 периода таймера. Флаг CCIFG устанав
12.2. Функционирование Таймера А 313
ливается при счёте таймера от значения (TACCR0 – 1) до TACCR0, а флаг TAIFG — при счёте с 0001h до 0000h (Рис. 12.8).
Тактовый сигнал |
|
|
|
таймера |
|
|
|
Таймер |
CCR0–1 CCR0 CCR0–1 CCR0–2 |
1h |
0h |
Прямой счёт/ |
|
|
|
Обратный счёт |
|
|
|
Установка TAIFG
Установка TACCR0 CCIFG
Рис. 12.8. Установка флагов прерываний в режиме реверсивного счёта.
Изменение регистра периода TACCR0
При изменении содержимого регистра TACCR0 во время счёта таймера в об ратном направлении, процесс счёта не прерывается. Новое содержимое TACCR0 защёлкивается в TACL0 сразу же, однако формирование периода с новой дли тельностью начнётся только после достижения счётчиком нулевого значения.
Если таймер считает в прямом направлении и новое значение периода больше или равно старому значению или же больше текущего значения таймера, то смена направления счёта произойдёт после достижения таймером нового значения пе риода. Если новый период меньше текущего значения таймера, то таймер сразу же начинает считать в обратном направлении, однако перед сменой направления может возникнуть один дополнительный отсчёт.
Использование реверсивного режима счёта
Режим реверсивного счёта может применяться в случаях, когда требуется на личие «мёртвых зон» между выходными сигналами (см. подраздел 12.2.5 «Модуль вывода»). Так, на выводах, используемых для управления H мостом, не допуска ется одновременное появление ВЫСОКОГО уровня во избежание перегрузки элементов моста.
В примере, изображённом на Рис. 12.9, величина tdead определяется как tdead = ttimer (TACCR1 – TACCR2),
где tdead — интервал времени, в течение которого оба вывода должны быть неак тивными («мёртвое время»);
ttimer — период тактового сигнала таймера;
TACCRx — содержимое регистра захвата/сравнения x.
Регистры TACCRx не буферизованы — их содержимое обновляется в момент операции записи. Соответственно требуемая длительность «мёртвого» времени не будет выдерживаться автоматически.
314 Глава 12. Таймер A |
|
|
|
|
|
|
||
0FFFFh |
|
|
|
|
|
|
|
|
TACCR0 |
|
|
|
|
|
|
|
|
TACCR1 |
|
|
|
|
|
|
|
|
TACCR2 |
|
|
|
|
|
|
|
|
0h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
«Мёртвое» время |
|
|
|
|
|
|
|
|
Режим 6: Переключение/установка |
|
|
|
|
|
|
|
|
Режим 2: Переключение/сброс |
TAIFG |
EQU1 |
EQU1 |
TAIFG |
EQU1 |
EQU1 |
События, генерирующие |
||
EQU0 |
|
EQU0 |
прерывания |
|||||
|
|
|
|
|||||
EQU2 |
|
EQU2 |
EQU2 |
EQU2 |
|
|||
|
|
Рис. 12.9. Модуль вывода в режиме реверсивного счёта. |
12.2.4. Блоки захвата/сравнения
В Таймере A в зависимости от модели микроконтроллера имеется два или три идентичных блока захвата/сравнения. Любой из блоков может использоваться для захвата значения таймера и формирования временных интервалов.
Режим захвата
Режим захвата включается при CAP = 1. Этот режим используется для регист рации временных событий. Он может быть использован для вычисления скоро сти или измерения временных параметров. Входы захвата CCIxA и CCIxB под ключены к выводам микроконтроллера или же к его внутренним шинам. Выбор конкретного входа захвата осуществляется битами CCISx. Биты CMx определяют активный фронт сигнала захвата (нарастающий, спадающий или оба), по которо му выполняется операция захвата. При выполнении этой операции:
значение таймера копируется в соответствующий регистр TACCRx;
устанавливается флаг прерывания CCIFG.
Уровень входного сигнала можно в любой момент времени определить по со стоянию бита CCI. На входы CCIxA и CCIxB могут поступать различные сигна лы, в зависимости от модели. Для получения более подробной информации обра титесь к документации на конкретный микроконтроллер.
Сигнал захвата может быть асинхронным по отношению к тактовому сигналу таймера, что приведёт к возникновению «гонок». При установленном бите SCS опе рация захвата синхронизируется с тактовым сигналом таймера. Рекомендуется всег да устанавливать этот бит. Синхронизация сигнала захвата показана на Рис. 12.10.
Для каждого регистра захвата/сравнения предусмотрена схема переполнения, служащая для индикации выполнения операции захвата до считывания результа та предыдущей операции. При возникновении такой ситуации устанавливается бит COV, как показано на Рис. 12.11. Бит COV должен сбрасываться программно.
12.2. Функционирование Таймера А 315
Тактовый сигнал таймера
Таймер |
n–2 |
n–1 |
n |
n+1 |
n+2 |
n+3 |
n+4 |
CCI
Захват
Установка TACCRx CCIFG
Рис. 12.10. Сигнал захвата при SCS = 1.
|
|
Ожидание |
|
|
Захват |
|
Чтение регистра захвата |
|
|
|
|
Захват |
|
Захват |
Чтение |
не |
|
захваченного |
|
|
выполнен |
||
выполнен |
|
значения |
|
|
|
||
|
|
|
Захват |
|
|
|
Чтение регистра захвата, |
|
|
|
захвата нет |
Захват
Сброс бита COV регистра TACCTLx
Выполнен 2 й захват Ожидание
COV = 1
Захват
Рис. 12.11. Цикл захвата.
Захват, инициируемый программно
Захват может быть инициирован программно. Для выполнения захвата по обоим фронтам можно установить биты CMx = 11. После этого в программе до статочно установить бит CCIS1 и изменить состояние бита CCIS0 для формиро вания фронта сигнала захвата. Захват будет инициироваться при каждом измене нии бита CCIS0:
MOV |
#CAP+SCS+CCIS1+CM_3,&TACCTLx |
; |
Настроим TACCTLx |
XOR |
#CCIS0,&TACCTLx |
; |
TACCTLx = TAR |
316 Глава 12. Таймер A
Режим сравнения
Режим сравнения включается при CAP = 0. Этот режим используется для ге нерации сигналов с широтно импульсной модуляцией или для формирования прерываний с заданной периодичностью. При достижении таймером в процессе счёта значения, записанного в регистре TACCRx:
устанавливается флаг прерывания CCIFG;
формируется внутренний сигнал EQUx = 1;
сигнал EQUx воздействует на выход в соответствии с режимом работы мо дуля вывода;
значение входного сигнала CCI защёлкивается в бите SCCI.
12.2.5. Модуль вывода
Каждый блок захвата/сравнения содержит модуль вывода. Этот модуль использу ется для генерации различных сигналов, в том числе сигналов с ШИМ. Каждый мо дуль вывода имеет восемь режимов работы, которые используются для формирова ния различных сигналов в соответствии с внутренними сигналами EQU0 и EQUx.
Режимы модуля вывода
Режимы работы модуля вывода определяются битами OUTMODx и перечис лены в Табл. 12.2. Сигнал OUTx изменяется по нарастающему фронту тактового сигнала таймера во всех режимах, кроме режима 0. Режимы 2, 3, 6 и 7 не приме нимы к 0 му модулю вывода, поскольку в этом случае EQUx = EQU0.
Таблица 12.2. Режимы работы модуля вывода
OUTMODx |
Режим |
Описание |
|
|
|
000 |
Вывод |
Выходной сигнал OUTx определяется состоянием бита OUTx. Выходной |
|
|
сигнал изменяется сразу же после изменения бита OUTx |
|
|
|
001 |
Установка |
При достижении таймером в процессе счёта значения, записанного в ре |
|
|
гистре TACCRx, выход устанавливается. Это состояние сохраняется до тех |
|
|
пор, пока таймер не будет сброшен или пока не будет задан новый режим |
|
|
работы модуля вывода с последующим воздействием на выход |
|
|
|
010 |
Переключе |
При достижении таймером в процессе счёта значения, записанного в ре |
|
ние/ сброс |
гистре TACCRx, выход переключается. Выход сбрасывается при достиже |
|
|
нии таймером значения, записанного в регистре TACCR0 |
|
|
|
011 |
Установка/ |
При достижении таймером в процессе счёта значения, записанного в ре |
|
сброс |
гистре TACCRx, выход устанавливается. Выход сбрасывается при дости |
|
|
жении таймером значения, записанного в регистре TACCR0 |
|
|
|
100 |
Переключе |
Выход переключается при достижении таймером в процессе счёта значе |
|
ние |
ния, записанного в регистре TACCRx. Период выходного сигнала равен |
|
|
удвоенному периоду таймера |
|
|
|
101 |
Сброс |
При достижении таймером в процессе счёта значения, записанного в ре |
|
|
гистре TACCRx, выход сбрасывается. Это состояние сохраняется до тех |
|
|
пор, пока не будет задан новый режим работы модуля вывода с последую |
|
|
щим воздействием на выход |
|
|
|
110 |
Переключе |
При достижении таймером в процессе счёта значения, записанного в ре |
|
ние/ |
гистре TACCRx, выход переключается. Выход устанавливается при дости |
|
установка |
жении таймером значения, записанного в регистре TACCR0 |
|
|
|
111 |
Сброс/ |
При достижении таймером в процессе счёта значения, записанного в ре |
|
установка |
гистре TACCRx, выход сбрасывается. Выход устанавливается при дости |
|
|
жении таймером значения, записанного в регистре TACCR0 |
|
|
|
12.2. Функционирование Таймера А 317
Использование модуля вывода — таймер в режиме прямого счёта
Сигнал OUTx изменяется при достижении таймером в процессе счёта значе ния, записанного в регистре TACCRx, а также при переходе таймера от значения, записанного в регистре TACCR0, к нулевому значению. На Рис. 12.12 показано формирование выходного сигнала в различных режимах работы модуля вывода с использованием регистров захвата/сравнения TACCR0 и TACCR1.
0FFFFh |
TACCR0 |
TACCR1 |
0h |
Режим вывода 1: Установка
Режим вывода 2: Переключение/сброс
Режим вывода 3: Установка/сброс
Режим вывода 4: Переключение
Режим вывода 5: Сброс
Режим вывода 6: Переключение/установка
Режим вывода 7: Сброс/установка
EQU0 |
EQU1 EQU0 |
EQU1 EQU0 |
События, генерирующие |
|
TAIFG |
TAIFG |
TAIFG |
||
прерывания |
Рис. 12.12. Формирование выходного сигнала — таймер в режиме прямого счёта.
Использование модуля вывода — таймер в режиме непрерывного счёта
Сигнал OUTx изменяется при достижении таймером в процессе счёта значе ний, записанных в регистрах TACCRx и TACCR0. На Рис. 12.13 показано форми рование выходного сигнала в различных режимах работы модуля вывода с ис пользованием регистров захвата/сравнения TACCR0 и TACCR1.
318 Глава 12. Таймер A
0FFFFh |
TACCR0 |
TACCR1 |
0h |
Режим вывода 1: Установка
Режим вывода 2: Переключение/сброс
Режим вывода 3: Установка/сброс
Режим вывода 4: Переключение
Режим вывода 5: Сброс
Режим вывода 6: Переключение/установка
Режим вывода 7: Сброс/установка
TAIFG EQU1 EQU0 TAIFG EQU1 EQU0 |
События, генерирующие |
|
прерывания |
Рис. 12.13. Формирование выходного сигнала — таймер в режиме непрерывного счёта.
Использование модуля вывода — таймер в режиме реверсивного счёта
Сигнал OUTx изменяется при достижении таймером в процессе счёта значе ния, записанного в регистре TACCRx (вне зависимости от направления счёта), а также при достижении значения, записанного в регистре TACCR0. На Рис. 12.14 показано формирование выходного сигнала в различных режимах работы модуля вывода с использованием регистров захвата/сравнения TACCR0 и TACCR2.
Примечание. Переключение между режимами модуля вывода
При переходе от одного режима работы модуля вывода к другому, один из битов OUTMODx в процессе переключения обязательно должен оставаться в установ ленном состоянии, за исключением переключения в режим 0. В противном случае из за ошибочного декодирования элементом ИЛИ НЕ режима 0 модуля возмож но появление на выходе паразитных импульсов. Безопасный метод переключения режимов модуля заключается в использовании в качестве промежуточного состоя
ния режима 7.
BIS #OUTMOD_7,&TACCTLx ; Устанавливаем режим 7 BIC #OUTMODx,&TACCTLx ; Сбрасываем требуемые биты