Руководство пользователя MSP430 (1041606), страница 21
Текст из файла (страница 21)
12.1 Введение в таймер В
Таймер В – это 16-разрядный таймер/счетчик с тремя или семью регистрами захвата/сравнения. Таймер В может поддерживать несколько режимов захвата/сравнения, вывод ШИМ-сигналов и выдержку временных интервалов. Таймер В также имеет расширенные возможности прерываний. Прерывания могут быть сгенерированы при переполнении счетчика и от каждого из регистров захвата/сравнения.
Таймер В обладает следующими возможностями:
-
Асинхронный 16-разрядный таймер/счетчик с четырьмя режимами работы и четырьмя настраиваемыми длительностями
-
Выбираемые и конфигурируемые источники тактирования
-
Три или семь конфигурируемых регистров захвата/сравнения
-
Конфигурируемые выходы с возможностью ШИМ
-
Защелки сравнения с двойной буферизацией и синхронизируемой загрузкой
-
Регистр вектора прерывания для быстрого декодирования всех прерываний таймера В
Блок-схема таймера В показана на рис.12-1.
Примечание: Использование слова «счет» |
12.1.1 Сходства и различия с таймером А
Таймер В идентичен таймеру А, но со следующими исключениями:
-
Длина таймера В программируется и может составлять 8, 10, 12 или 16 бит
-
Регистры TBCCRx таймера В имеют двойную буферизацию и могут группироваться
-
Все выходы таймера В могут быть переведены в третье (высокоимпедансное) состояние
-
Функция бита SCCI не реализована в таймере В.
12.2 Работа таймера В
Модуль таймера В конфигурируется программным обеспечением пользователя. Настройка и работа таймера В рассматривается в следующих разделах
12.2.1 16-разрядный счетчик таймера
16-разрядный регистр таймера/счетчика TBR инкрементируется и декрементируется (в зависимости от режима работы) по каждому нарастающему фронту тактового сигнала. Регистр TBR может программно читаться и записываться. Помимо этого, таймер может генерировать прерывание при его переполнении.
Регистр TBR может быть очищен установкой бита TBCLR. Установка TBCLR также очищает делитель тактовой частоты и направление счета для режима «вверх/вниз».
Примечание: Модификация регистров таймера В |
Длина TBR
Таймер В конфигурируется для работы в качестве 8, 10, 12 или 16-разрядного таймера с помощью битов CNTLx. Максимальное значение счета TBR(max) для выбранной длины соответственно составит 0FFh, 03FFh, 0FFFh и 0FFFFh. Данные, записанные в регистр TBR в 8-ми, 10-ти и 12-разрядном режиме выравниваются по правому знаку с нулями впереди.
Выбор источника тактирования и делитель
В качестве источников тактовой частоты TBCLK могут выступать ACLK, SMCLK или внешние сигналы, поступающие через TBCLK или INCLK. Источник тактирования выбирается битами TBSSELx. Выбранный источник тактирования может подключаться к таймеру напрямую или через делитель на 2, 4 или 8 с помощью битов IDx.
12.2.2 Старт таймера
Таймер может быть запущен или перезапущен следующими способами:
Таймер считает, когда MCx > 0 и активен источник тактовых сигналов
Когда таймер находится в режиме счета «вверх» или «вверх/вниз», его можно остановить загрузкой нуля в TBCL0. Таймер может быть тогда и перезапущен при загрузке ненулевого значения в TBCL0. В этом случае таймер начинает инкрементирование вверх от нуля.
12.2.3 Управление режимом таймера
Таймер имеет четыре режима работы, описанных в таблице 12-1: «стоп», «вверх», «непрерывный» и «вверх/вниз». Рабочий режим выбирается с помощью битов MCx.
Таблица 12-1. Режимы таймера.
MCx | Режим | Описание |
00 | Стоп | Останов таймера |
01 | Вверх | Таймер многократно считает от нуля до значения в регистре сравнения TBCL0 |
10 | Непрерывный | Таймер многократно считает от нуля до значения, выбранного битами TBCNTLx. |
11 | Вверх/вниз | Таймер многократно считает от нуля вверх до значения в TBCL0 и назад до нуля. |
Режим «вверх»
Режим «вверх» используется, если период таймера должен быть отличен от количества отсчетов TBR(max). Таймер многократно считает вверх до значения в защелке сравнения TBCL0, которое определяет период, как показано на рис.12-2. Количество отсчетов таймера в периоде равно TBCL0+1. Когда значение таймера равно TBCL0, таймер перезапускается на счет с нуля. Если режим «вверх» выбран, когда значение таймера больше чем в TBCL0, таймер немедленно перезапускается на отсчет с нуля.
Рис.12-2 Режим «вверх»
Флаг прерывания TBCCR0 CCIFG устанавливается, когда значение таймера равно значению TBCL0. Флаг прерывания TBIFG устанавливается, когда таймер пересчитывает от TBCL0 к нулю. На рис.12-3 показан цикл установки флагов.
Рис.12-3 Установка флагов в режиме «вверх»
Изменение регистра периода TBCL0
При изменении TBCL0 во время работы таймера, когда TBCL0 находится в режиме непосредственной загрузки, если новый период больше старого или больше текущего значения счета, таймер считает вверх к новому периоду. Если новый период меньше текущего значения счета, таймер обнуляется. Однако, может произойти один дополнительный отсчет перед обнулением счетчика.
Непрерывный режим
В непрерывном режиме таймер многократно считает вверх до значения TBR(max) и перезапускается от нуля, как показано на рис.12-4. Защелка сравнения TBCL0 работает подобно другим регистрам захвата/сравнения.
Рис.12-4 Непрерывный режим
Флаг прерывания TBIFG устанавливается, когда таймер считает от TBR(max) к нулю. На рис.12-5 показан цикл установки флагов.
Рис.12-5 Установка флагов в непрерывном режиме
Использование непрерывного режима
Непрерывный режим может использоваться для генерации независимых временных интервалов и выходных частот. Каждый раз по завершении интервала генерируется прерывание. Следующий временной интервал добавляется к защелке TBCLx в процедуре обработки прерывания. На рис.12-6 показаны два раздельных временных интервала t0 и t1, добавляемые к регистрам захвата/сравнения. Выдержка временных интервалов осуществляется аппаратно, без участия программного обеспечения и без воздействия задержек прерывания. Может быть сгенерировано до трех (таймер В3) или до семи (таймер В7) независимых временных интервалов или выходных частот при использовании регистров захвата/сравнения.
Рис.12-6 Временные интервалы в «непрерывном» режиме
Временные интервалы могут быть реализованы также в других режимах, в которых TBCL0 используется как регистр периода. Работа с ними более комплексна, т.к. сумма старого значения TBCLx и нового периода может оказаться больше значения TBCL0. Когда сумма предыдущего значения TBCLx плюс tx больше содержимого TBCL0, для получения правильного временного интервала необходимо вычитать старое значение TBCL0.
Режим «вверх/вниз»
Режим «вверх/вниз» используется, если период таймера должен отличаться от величины отсчетов TBR(max), а также если требуется генерация симметричных импульсов. Таймер многократно считает вверх до значения в защелке сравнения TBCL0 и назад к нулю, как показано на рис.12-7. Период в этом случае равен удвоенному значению TBCL0.
Примечание: TBCL0 > TBR(max) |
Рис.12-7 Режим «вверх/вниз»
Направление счета защелкивается. Это позволяет таймеру останавливаться и перезапускаться с тем направлением счета, которое было до его останова. Если это не желательно, для сброса направления нужно использовать бит TBCLR. Бит TBCLR также очищает значение TBR и делитель TBCLK.
В режиме «вверх/вниз» флаг прерывания TBCCR0 CCIFG и флаг прерывания TBIFG устанавливаются один раз в период, разделяясь 1/2-ой периода таймера. Флаг прерывания TBCCR0 CCIFG устанавливается, когда таймер считает от TBCL0-1 до TBCL0, а TBIFG устанавливается, когда таймер завершает счет вниз от 0001h к 0000h. На рис.12-8 показан цикл установки флагов.
Рис.12-8 Установка флагов в режиме «вверх/вниз»
Изменение значение регистра периода TBCL0
Когда изменяется TBCL0 во время работы таймера при выбранном направлении счета вниз и установленном непосредственном режиме загрузке TBCL0, таймер продолжает отсчет вниз до нуля. Новый период будет активизирован после завершения счета счетчика до нуля.
Если таймер считает вверх, когда новый период защелкнут в TBCL0, и новый период больше или равен старому периоду или же больше текущего значения счета, таймер считает вверх до нового периода перед счетом вниз. Когда таймер считает вверх, а новый период меньше текущего значения счета в момент загрузки TBCL0, таймер начинает считать вниз. Однако, может произойти один дополнительный отсчет прежде, чем счетчик начнет считать вниз.
Использование режима «вверх/вниз»
Режим «вверх/вниз» поддерживает приложения, требующие наличия «мертвого» времени между выходными сигналами (см. раздел Модуль вывода Таймера В). К примеру, чтобы избежать режима перегрузки, два выхода, управляющие H-мостом никогда не должны иметь высокий уровень одновременно. В примере, показанном на рис.12-9 «мертвое» время tdead задается так:
tdead = ttimer * (TBCL1 – TBCL3), где:
tdead – время, в течение которого оба выхода не активны;
ttimer – время цикла такта таймера;
TBCLx – содержимое защелки сравнения х.
Возможность одновременной загрузки сгруппированных защелок гарантирует наличие «мертвого» времени.
Рис.12-9 Модуль вывода в режиме «вверх/вниз»
12.2.4 Блоки захвата/сравнения
Три или семь идентичных блоков захвата/сравнения TBCCRx представлены в таймере В. Любой из блоков может использоваться для захвата данных таймера или для генерации временных интервалов.
Режим захвата
Режим захвата выбирается, когда CAP=1. Режим захвата используется для регистрации временных событий. Он может быть использован для выполнения быстрых вычислений или измерений времени. Входы захвата CCIxA и CCIxB подключаются к внешним выводам или внутренним сигналам и выбираются с помощью битов CCISx. Биты CMx позволяют задать, как будет происходить захват: по переднему, по заднему или по обеим фронтам входного сигнала. Захват происходит по выбранному фронту входного сигнала. Если захват произошел, то:
-
Значение таймера копируется в регистр TBCCRx
-
Устанавливается флаг прерывания CCIFG
Уровень входного сигнала может быть прочитан в любое время через бит CCI. Устройства семейства MSP430x1xx могут иметь различные сигналы, подключенные к CCIxA и CCIxB. См. справочное руководство конкретного устройства для выяснения подробностей подключения этих сигналов.
Сигнал захвата может быть асинхронен тактовой частоте таймера и вызывать состояние гонки сигналов. При установке бита SCS захват синхронизируется со следующим тактовым импульсом таймера. Рекомендуется устанавливать бит SCS для синхронизации сигнала захвата с тактовыми импульсами таймера. Это иллюстрируется на рис.12-10.
Рис.12-10 Сигнал захвата (SCS=1)
Логика переполнения предусмотрена в каждом регистре захвата/сравнения для индикации в случае, если произошел второй захват перед прочтением значения первого захвата. Когда это происходит, устанавливается бит COV, как показано на рис.12-11. Бит COV должен сбрасываться программно.