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

Микропроцессорная техника / Конспект лекций

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

необходимо предусмотреть обработку ситуации, когда сумма старого содержимого

TACCRx и значения нового периода оказывается больше содержимого регистра периода TACCR0. В таком случае для получения корректного результата из получившейся суммы необходимо вычесть значение TACCR0 + 1.

Режим реверсивного счёта

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

TACCR0, а затем в обратном направлении до нуля, как показано на рис. 6.7. При этом период равен удвоенному значению TACCR0.

Рисунок 6.7 Режим реверсивного счёта

Направление счёта фиксируется, что позволяет после останова таймера и последующего его запуска продолжать счёт в том же направлении, что и до останова. Если этого не требуется, то для сброса признака направления необходимо записать 1 в бит TACLR. Установка бита TACLR также вызывает очистку регистра TAR и делителя тактового сигнала таймера.

Врежиме реверсивного счёта флаг прерываний CCIFG для регистра TACCR0

ифлаг TAIFG устанавливаются только один раз за период, причём интервал между установкой этих флагов составляет 1/2 периода таймера. Флаг CCIFG

устанавливается при счёте таймера от значения (TACCR0 – 1) до TACCR0, а флаг

TAIFG — при счёте с 0001h до 0000h (рис. 6.8).

Изменение регистра периода TACCR0

При изменении содержимого регистра TACCR0 во время счёта таймера в обратном направлении, процесс счёта не прерывается. Новое содержимое TACCR0

защёлкивается в TACL0 сразу же, однако формирование периода с новой длительностью начнётся только после достижения счётчиком нулевого значения.

Если таймер считает в прямом направлении и новое значение периода больше или равно старому значению или же больше текущего значения таймера, то смена

51

направления счёта произойдёт после достижения таймером нового значения периода. Если новый период меньше текущего значения таймера, то таймер сразу же начинает считать в обратном направлении, однако перед сменой направления может возникнуть один дополнительный отсчёт.

Рисунок 6.8Установка флагов прерываний в режиме реверсивного счёта

Использование реверсивного режима счёта

Режим реверсивного счёта может применяться в случаях, когда требуется наличие «мёртвых зон» между выходными сигналами (см. подраздел 6.2.5). Так, на выводах, используемых для управления H-мостом, не допускается одновременное появление ВЫСОКОГО уровня во избежание перегрузки элементов моста.

В примере, изображённом на рис. 6.9, величина tdead определяется как tdead = ttimer · (TACCR1 – TACCR2),

где tdead — интервал времени, в течение которого оба вывода должны быть неактивными («мёртвое время»);

ttimer — период тактового сигнала таймера;

TACCRx — содержимое регистра захвата/сравнения x.

Регистры TACCRx не буферизованы — их содержимое обновляется в момент операции записи. Соответственно требуемая длительность «мёртвого» времени не будет выдерживаться автоматически.

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

В Таймере A в зависимости от модели микроконтроллера имеется два или три идентичных блока захвата/сравнения. Любой из блоков может использоваться для захвата значения таймера и формирования временных интервалов.

Режим захвата

Режим захвата включается при CAP = 1. Этот режим используется для регистрации временных событий. Он может быть использован для вычисления скорости или измерения временных параметров. Входы захвата CCIxA и CCIxB

подключены к выводам микроконтроллера или же к его внутренним шинам. Выбор

52

конкретного входа захвата осуществляется битами CCISx. Биты CMx определяют активный фронт сигнала захвата (нарастающий, спадающий или оба), по которому выполняется операция захвата. При выполнении этой операции:

-значение таймера копируется в соответствующий регистр TACCRx;

-устанавливается флаг прерывания CCIFG.

Рисунок 6.9 – Модуль вывода в режиме реверсивного счёта

Уровень входного сигнала можно в любой момент времени определить по состоянию бита CCI. На входы CCIxA и CCIxB могут поступать различные сигналы, в зависимости от модели.

Сигнал захвата может быть асинхронным по отношению к тактовому сигналу таймера, что приведёт к возникновению «гонок». При установленном бите SCS

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

Рисунок 6.10 – Сигнал захватат при SCS = 1

Для каждого регистра захвата/сравнения предусмотрена схема переполнения,

служащая для индикации выполнения операции захвата до считывания результата

53

предыдущей операции. При возникновении такой ситуации устанавливается бит

COV, как показано на рис. 6.11. Бит COV должен сбрасываться программно.

Рисунок 6.11 – Цикл захвата

Захват может быть инициирован программно. Для выполнения захвата по обоим фронтам можно установить биты CMx = 11. После этого в программе достаточно установить бит CCIS1 и изменить состояние бита CCIS0 для формирования фронта сигнала захвата. Захват будет инициироваться при каждом измене нии бита CCIS0.

Режим сравнения

Режим сравнения включается при CAP = 0. Этот режим используется для генерации сигналов с широтно импульсной модуляцией или для формирования прерываний с заданной периодичностью. При достижении таймером в процессе счёта значения, записанного в регистре TACCRx:

-устанавливается флаг прерывания CCIFG;

-формируется внутренний сигнал EQUx = 1;

-сигнал EQUx воздействует на выход в соответствии с режимом работы модуля вывода;

-значение входного сигнала CCI защёлкивается в бите SCCI.

6.2.5. Модуль вывода

Каждый блок захвата/сравнения содержит модуль вывода. Этот модуль

используется для генерации различных сигналов, в том числе сигналов с ШИМ.

54

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

EQU0 и EQUx.

Режимы модуля вывода

Режимы работы модуля вывода определяются битами OUTMODx и

перечислены в табл. 6.2. Сигнал OUTx изменяется по нарастающему фронту тактового сигнала таймера во всех режимах, кроме режима 0. Режимы 2, 3, 6 и 7 не применимы к 0-му модулю вывода, поскольку в этом случае EQUx = EQU0.

Таблица 6.2 – Режимы работы модуля вывода

OUTMODx

Режим

Описание

000

Вывод

Выходной сигнал OUTx определяется состоянием

 

 

бита OUTx. Выходной сигнал изменяется сразу же

 

 

после изменения бита OUTx

001

Установка

При достижении таймером в процессе счёта

 

 

значения, записанного в ре гистре TACCRx, выход

 

 

устанавливается. Это состояние сохраняется до тех

 

 

пор, пока таймер не будет сброшен или пока не

 

 

будет задан новый режим работы модуля вывода с

 

 

последующим воздействием на выход

010

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

При достижении таймером в процессе счёта

 

сброс

значения, записанного в ре гистре TACCRx, выход

 

 

переключается. Выход сбрасывается при достиже

 

 

нии таймером значения, записанного в регистре

 

 

TACCR0

011

Установка/

При достижении таймером в процессе счёта

 

сброс

значения, записанного в ре гистре TACCRx, выход

 

 

устанавливается. Выход сбрасывается при дости

 

 

жении таймером значения, записанного в регистре

 

 

TACCR0

100

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

Выход переключается при достижении таймером в

 

 

процессе счёта значе ния, записанного в регистре

 

 

TACCRx. Период выходного сигнала равен

 

 

удвоенному периоду таймера

101

Сброс

При достижении таймером в процессе счёта

 

 

значения, записанного в ре гистре TACCRx, выход

 

 

сбрасывается. Это состояние сохраняется до тех

 

 

пор, пока не будет задан новый режим работы

 

 

модуля вывода с последую щим воздействием на

 

 

выход

55

OUTMODx

Режим

Описание

110

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

При достижении таймером в процессе счёта

 

установка

значения, записанного в ре гистре TACCRx, выход

 

 

переключается. Выход устанавливается при дости

 

 

жении таймером значения, записанного в регистре

 

 

TACCR0

111

Сброс/

При достижении таймером в процессе счёта

 

установка

значения, записанного в ре гистре TACCRx, выход

 

 

сбрасывается. Выход устанавливается при дости

 

 

жении таймером значения, записанного в регистре

 

 

TACCR0

Использование модуля вывода — таймер в режиме прямого счёта

Сигнал OUTx изменяется при достижении таймером в процессе счёта значения, записанного в регистре TACCRx, а также при переходе таймера от значения, записанного в регистре TACCR0, к нулевому значению. На рис. 6.12

показано формирование выходного сигнала в различных режимах работы модуля вывода с использованием регистров захвата/сравнения TACCR0 и TACCR1.

Рисунок 6.12 – Формирование выходного сигнала — таймер в режиме прямого счёта.

56

Использование модуля вывода — таймер в режиме непрерывного счёта

Сигнал OUTx изменяется при достижении таймером в процессе счёта значений, записанных в регистрах TACCRx и TACCR0. На рис. 6.13 показано формирование выходного сигнала в различных режимах работы модуля вывода с ис пользованием регистров захвата/сравнения TACCR0 и TACCR1.

Рисунок 6.13 – Формирование выходного сигнала — таймер в режиме непрерывного счёта

Использование модуля вывода — таймер в режиме реверсивного счёта

Сигнал OUTx изменяется при достижении таймером в процессе счёта значения, записанного в регистре TACCRx (вне зависимости от направления счёта), а также при достижении значения, записанного в регистре TACCR0. На рис. 6.14 показано формирование выходного сигнала в различных режимах работы модуля вывода с использованием регистров захвата/сравнения TACCR0 и TACCR2.

При переходе от одного режима работы модуля вывода к другому, один из битов OUTMODx в процессе переключения обязательно должен оставаться в установленном состоянии, за исключением переключения в режим 0. В противном

57

случае из-за ошибочного декодирования элементом ИЛИ-НЕ режима 0 модуля возможно появление на выходе паразитных импульсов. Безопасный метод переключения режимов модуля заключается в использовании в качестве промежуточного состояния режима 7.

Рисунок 6.14 – Формирование выходного сигнала — таймер в режиме реверсивного счёта

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

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

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

TACCR0;

-вектор прерывания TAIV для всех остальных флагов CCIFG и флага TAIFG.

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

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

58

Прерывание TACCR0

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

Рисунок 6.15 Флаг прерывания захвата/сравнения TACCR0

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

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

Для определения, какой из флагов вызвал генерацию прерывания, используется регистр вектора прерывания TAIV.

Разрешённое прерывание с наивысшим приоритетом формирует в регистре

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

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

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

6.3. Регистры Таймера А

Список регистров Таймера А приведён в табл. 6.3.

59

Таблица 6.3Регистры Таймера А

Регистр

 

Обозначение

Тип

Адрес

Исходное

 

 

 

регистра

 

состояние

Регистр управления

Таймера

TACTL

Чтение/

0160h

Сбрасывается

А

 

 

запись

 

после POR

Регистр счётчика Таймера А

TAR

Чтение/

0170h

Сбрасывается

 

 

 

запись

 

после POR

Регистр управления

блоком

TACCTL0

Чтение/

0162h

Сбрасывается

захвата/сравнения 0 Таймера

 

запись

 

после POR

А

 

 

 

 

 

Регистр захвата/сравнения 0

TACCR0

Чтение/

0172h

Сбрасывается

Таймера А

 

 

запись

 

после POR

Регистр управления

блоком

TACCTL1

Чтение/

0164h

Сбрасывается

захвата/сравнения 1 Таймера

 

запись

 

после POR

А

 

 

 

 

 

Регистр захвата/сравнения 1

TACCR1

Чтение/

0174h

Сбрасывается

Таймера А

 

 

запись

 

после POR

Регистр управления

блоком

TACCTL2*

Чтение/

0166h

Сбрасывается

захвата/сравнения 2 Таймера

 

запись

 

после POR

А

 

 

 

 

 

Регистр захвата/сравнения 2

TACCR2*

Чтение/

0176h

Сбрасывается

Таймера А

 

 

запись

 

после POR

Регистр вектора прерывания

TAIV

Только

012Eh

Сбрасывается

Таймера А

 

 

чтение

 

после POR

* Отсутствует в моделях MSP430x20xx

TACTL, регистр управления Таймера А

Unused(биты 15…10) – не используются

TASSELx (биты 9…8) – Выбор источника тактового сигнала. 00: TACLK

01: ACLK

10:SMCLK

11:INCLK

IDx (биты 7…6) – коэффициент деления входного делителя. Эти биты определяют коэффициент деления задающего тактового сигнала.

00: /1 01: /2 10: /4

60