Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_

.pdf
Скачиваний:
95
Добавлен:
05.03.2016
Размер:
2.03 Mб
Скачать

12.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 ; Сбрасываем требуемые биты

 

 

 

 

 

12.2. Функционирование Таймера А 319

0FFFFh

 

 

 

 

 

 

TACCR0

 

 

 

 

 

 

TACCR2

 

 

 

 

 

 

0h

 

 

 

 

 

 

 

 

 

 

 

 

Режим вывода 1:

 

 

 

 

 

 

Установка

 

 

 

 

 

 

Режим вывода 2:

 

 

 

 

 

 

Переключение/сброс

 

 

 

 

 

 

Режим вывода 3:

 

 

 

 

 

 

Установка/сброс

 

 

 

 

 

 

Режим вывода 4:

 

 

 

 

 

 

Переключение

 

 

 

 

 

 

Режим вывода 5:

 

 

 

 

 

 

Сброс

 

 

 

 

 

 

Режим вывода 6:

 

 

 

 

 

 

Переключение/установка

 

 

 

 

 

 

Режим вывода 7:

 

 

 

 

 

 

Сброс/установка

 

EQU2

EQU2

EQU2

EQU2

События, генерирующие

TAIFG

EQU0

TAIFG

EQU0

 

 

прерывания

Рис. 12.14. Формирование выходного сигнала — таймер в режиме реверсивного счёта.

12.2.6. Прерывания Таймера А

С модулем 16 битного Таймера А связаны два вектора прерывания:

вектор прерывания TACCR0 для бита CCIFG, соответствующего регистру TACCR0;

вектор прерывания TAIV для всех остальных флагов CCIFG и флага TAIFG. В режиме захвата любой из флагов CCIFG устанавливается в момент сохране

ния значения таймера в соответствующем регистре TACCRx. В режиме сравнения любой из флагов CCIFG устанавливается при достижении таймером в процессе счёта значения, записанного в соответствующем регистре TACCRx. Кроме того, любой флаг CCIFG можно установить или сбросить программно. При установке флага CCIFG, если установлен соответствующий бит CCIE и бит общего разре шения прерываний GIE, генерируется запрос прерывания.

Прерывание TACCR0

Флаг прерывания CCIFG для регистра TACCR0 соответствует прерыванию Таймера А с наивысшим приоритетом и имеет отдельный вектор прерывания, как

320 Глава 12. Таймер A

показано на Рис. 12.15. Флаг CCIFG для регистра TACCR0 автоматически сбра сывается при обслуживании запроса прерывания TACCR0.

Захват

EQU0

CAP

Тактовый сигнал

таймера

Установка

CCIE

IRQ, Запрос прерывания

D

Q

 

 

 

 

Сброс

 

IRACC, Запрос прерывания принят

 

 

POR

 

 

 

Рис. 12.15. Флаг прерывания захвата/сравнения TACCR0.

Генератор вектора прерывания TAIV

Флаги CCIFG для регистров TACCR1, TACCR2 и флаг TAIFG имеют различ ные приоритеты и служат источником единственного вектора прерывания. Для определения, какой из флагов вызвал генерацию прерывания, используется ре гистр вектора прерывания TAIV.

Разрешённое прерывание с наивысшим приоритетом формирует в регистре TAIV число (см. описание регистра). Это число можно оценить или же просто прибавить к счётчику команд для автоматического перехода к соответствующей секции программы. Запрещённые прерывания таймера не влияют на содержимое регистра TAIV.

При любом обращении к регистру TAIV как для чтения, так и для записи флаг прерывания с наивысшим приоритетом, ожидающего обработки, автоматически сбрасывается. Если имеется ещё один установленный флаг, то сразу же после об работки текущего прерывания будет сгенерировано новое прерывание. Напри мер, если на момент обращения к регистру TAIV в процедуре обработки прерыва ния были установлены флаги CCIFG для регистров TACCR1 и TACCR2, то авто матически будет сброшен флаг CCIFG для регистра TACCR1. После выполнения команды RETI процедуры обработки прерывания, флаг CCIFG для регистра TACCR2 вызовет генерацию нового прерывания.

Пример процедуры обработки прерывания TAIV

Вследующем примере показано рекомендуемое использование регистра TAIV

иприведена информация о накладных расходах на обработку прерывания. Со держимое регистра TAIV прибавляется к счётчику команд для автоматического перехода к соответствующей процедуре.

Значения, расположенные по правому краю, показывают число тактов ЦПУ, требуемое для выполнения каждой команды. Накладные расходы на обработку различных источников прерывания включают в себя задержку обслуживания прерывания и время, требуемое для возврата из прерывания, но не время, необхо димое для выполнения собственно задачи. Задержки обработки прерывания име ют следующие значения:

 

Блок захвата/сравнения CCR0

11 тактов

 

Блоки захвата/сравнения CCR1 и CCR2

16 тактов

 

Переполнение таймера TAIFG

14 тактов