Микроконтроллеры MSP430. Руководство пользователя - часть 3

 

  Главная      Учебники - Разные     Микроконтроллеры MSP430. Руководство пользователя

 

поиск по сайту            правообладателям  

 

 

 

 

 

 

 

 

 

 

 

содержание      ..     1      2      3      4      ..

 

 

 

Микроконтроллеры MSP430. Руководство пользователя - часть 3

 

 

 

 

Раздел 9

Цифровые входы/выходы

В этом разделе описывается работа портов цифровых входов/выходов. Порты P1-P2 имеются в устройствах MSP430x11xx. Порты Р1-Р3 реализованы в устройствах MSP430x12xx. Порты Р1-Р6 реализованы в устройствах MSP430x14, MSP430x15x и MSP430x16x.

9.1 Введение в цифровые входы/выходы

Устройства MSP430 имеют до 6 портов цифровых входов/выходов от Р1 до Р6. Каждый порт имеет 8 выводов входа/выхода. Каждый вывод индивидуально конфигурируется как вход или выход и каждая линия ввода/вывода может быть индивидуально считана или записана.

Порты Р1 и Р2 имеют возможность вызывать прерывание. Для каждой линии ввода/вывода портов Р1 и Р2 можно индивидуально разрешить прерывания и сконфигурировать их так, чтобы прерывание происходило по фронту или спаду входного сигнала. Все линии ввода/вывода порта Р1 являются источником одного вектора прерывания, а все линии ввода/вывода порта Р2 – источник другого вектора прерывания.

Цифровые входы/выходы обладают следующими возможностями:

  • Независимые индивидуально программируемые входы/выходы;
  • Любые комбинации входа или выхода;
  • Индивидуально конфигурируемые прерывания от Р1 и Р2;
  • Раздельные регистры данных для входов и выходов.

9.1 Функционирование цифровых входов/выходов

Цифровые входы/выходы конфигурируются программным обеспечением пользователя. Настройка и работа цифровых входов/выходов описывается в нижеследующих разделах.

9.2.1 Регистры ввода PnIN

Каждый бит в каждом регистре PnIN отражает величину входного сигнала на соответствующей ножке ввода/вывода, когда она сконфигурирована на функцию ввода/вывода.

    Бит = 0: Входной сигнал имеет низкий уровень;
    Бит = 1: Входной сигнал имеет высокий уровень.
Примечание: Запись в регистры «только для чтения» PxIN
Запись в эти регистры «только для чтения» приводит к увеличению потребления тока на время выполнения попытки записи.

9.2.2 Регистры вывода PnOUT

Каждый бит в каждом регистре PnOUT содержит значение, которое будет выведено на соответствующую ножку ввода/вывода, сконфигурированную на функцию ввода/вывода и имеющую направление на вывод.

    Бит = 0: Выходной сигнал имеет низкий уровень; Бит = 1: Выходной сигнал имеет высокий уровень.

9.2.3 Регистры направления PnDIR

Каждый бит в каждом регистре PnDIR позволяет выбрать направление соответствующей ножки ввода/вывода, независимо от выбранной для этой ножки функции. Биты PnDIR для ножек ввода/вывода, выбранные для других функций модуля должны быть установлены так, как это требуется для другой функции.

    Бит = 0: Ножка порта переключается на ввод;
    Бит = 1: Ножка порта переключается на вывод.

9.2.4 Регистры выбора функции PnSEL

Ножки порта часто мультиплексированы с другими функциями периферийных модулей. См. справочное руководство по конкретному устройству для выяснения возможных функций вывода. Каждый бит PnSEL определяет, как будет использована ножка – в качестве порта ввода/вывода или в качестве функции периферийного модуля.

    Бит = 0: Для ножки выбирается функция ввода/вывода
    Бит = 1: Для ножки выбирается функция периферийного модуля

Установка PnSEL=1 автоматически не определяет направление движения информации для ножки. Некоторые функции периферийных модулей требуют конфигурирования битов PnDIR для выбора направления, необходимого для правильной работы этой функции.

    ;Вывод ACLK на P2.0 в устройстве MSP430F11x1
    BIS.B #01h,&P2SEL ; Выбор функции ACLK для ножки
    BIS.B #01h,&P2DIR ; Установка направления на вывод (необходимо)
Примечание: Отключение прерываний от Р1 и Р2 при PnSEL=1
Когда какой-либо бит P1SELx или P2SELx установлен, функция прерывания от соответствующей ножки отключена. Поэтому сигналы на этих ножках не будут генерировать прерывания Р1 или Р2, независимо от состояния соответствующего бита P1IE или P2IE.

Когда вывод порта работает как вход периферии, входным сигналом периферии является зафиксированное в защелке представление сигнала на выводе устройства. Когда PnSELx=1, внутренний входной сигнал соответствует сигналу на ножке. Однако, если PnSELx=0, на входе периферии сохраняется значение входного сигнала на выводе устройства, имевшееся перед сбросом бита PnSELx.

9.2.5 Прерывания Р1 и Р2

Каждая ножка портов Р1 и Р2 имеет возможность вызова прерывания, конфигурируемую регистрами PnIFG, PnIE и PnIES. Все ножки Р1 – источник одного вектора прерывания, а все выводы Р2 – источник другого одиночного вектора прерывания. Определить источник прерывания - Р1 или Р2 можно путем проверки регистра PnIFG.

Регистры флагов прерывания Р1IFG, Р2IFG

Каждый бит PnIFG – это флаг прерывания соответствующей ножки ввода/вывода, устанавливаемый, когда происходит перепад выбранного входного сигнала на ножке. Все флаги прерывания PnIFG запрашивают прерывание, когда установлен их соответствующий бит PnIE и установлен бит GIE. Каждый флаг PnIFG должен быть сброшен программно. Программное обеспечение также может устанавливать каждый флаг PnIFG, обеспечивая возможность генерации программно-инициированного прерывания.

    Бит = 0: Прерывание не ожидается
    Бит = 1: Прерывание ожидается

Прерывания вызывают только перепады уровней, а не статические уровни. Если любой флаг PnIFG оказывается установленным во время выполнения процедуры обработки прерывания Px или устанавливается после команды RETI выполняемой процедуры обработки прерывания Px, установка флага PnIFGx генерирует другое прерывание. Таким образом, гарантируется, что каждый перепад уровня будет учтен.

Примечание: Состояние флагов PnIFG при изменении PnOUT или PnDIR
Запись в P1OUT, P1DIR, P2OUT или P2DIR может привести к установке соответствующих флагов P1IFG или P2IFG.


 
Примечание: Длительность события вызова прерывания на ножке ввода/вывода
Любое событие вызова внешнего прерывания должно иметь длительность, по крайней мере, равную 1,5 MCLK или дольше, чтобы быть гарантировано принятым и вызвать установку соответствующего флага прерывания.
 

 

Регистры выбора фронта прерывания P1IES, P2IES

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

    Бит = 0: Флаг PnIFG устанавливается при изменении уровня сигнала с низкого на высокий;
    Бит = 1: Флаг PnIFG устанавливается при изменении уровня сигнала с высокого на низкий.
Примечание: Запись в PnIESx
Запись в P1IES или P2IES может привести к установке соответствующих флагов прерывания.

 

PnIESx PnINx PnIFGx
0 -> 1 0 Не изменяется
0 -> 1 1 Может быть установлен
1 -> 0 0 Может быть установлен
1 -> 0 1 Не изменяется

Разрешение прерываний P1IE, P2IE

Каждый бит PnIE разрешает прерывание от соответствующего флага прерываний регистра PnIFG.

    Бит = 0: Прерывание запрещено
    Бит = 1: Прерывание разрешено

9.2.6 Конфигурирование неиспользуемых выводов порта

Неиспользуемые ножки ввода/вывода должны быть сконфигурированы на функцию ввода/вывода, в направлении вывода и оставаться неподключенными на печатной плате для уменьшения потребляемой мощности. Значение бита PxOUT может быть любым, поскольку ножка не подключена. См. раздел «Системный сброс, прерывания и режимы работы» для уточнения вопросов подключения неиспользуемых выводов.

9.3 Регистры цифровых входов/выходов

Для конфигурирования Р1 и Р2 используются семь регистров. Четыре регистра необходимы для конфигурирования портов Р3-Р6. Регистры цифровых входов/выходов приведены в таблице 9-1.

Таблица 9-1. Регистры цифровых входов-выходов.

Порт Регистр Краткое
обозначение
Адрес Тип
регистра
Исходное
состояние
P1 Ввод P1IN 020h Только чтение -
Вывод P1OUT 021h Чтение/запись Не изменяется
Направление P1DIR 022h Чтение/запись Сброс с PUC
Флаг прерывания P1IFG 023h Чтение/запись Сброс с PUC
Выбор фронта прерывания P1IES 024h Чтение/запись Не изменяется
Разрешение прерывания P1IE 025h Чтение/запись Сброс с PUC
Выбор порта P1SEL 026h Чтение/запись Сброс с PUC
P2 Ввод P2IN 028h Только чтение -
Вывод P2OUT 029h Чтение/запись Не изменяется
Направление P2DIR 02Ah Чтение/запись Сброс с PUC
Флаг прерывания P2IFG 02Bh Чтение/запись Сброс с PUC
Выбор фронта прерывания P2IES 02Ch Чтение/запись Не изменяется
Разрешение прерывания P2IE 02Dh Чтение/запись Сброс с PUC
Выбор порта P1SEL 026h Чтение/запись Сброс с PUC
P3 Ввод P3IN 018h Только чтение -
Вывод P3OUT 019h Чтение/запись Не изменяется
Направление P3DIR 01Ah Чтение/запись Сброс с PUC
Выбор порта P3SEL 01Bh Чтение/запись Сброс с PUC
P4 Ввод P4IN 01Ch Только чтение -
Вывод P4OUT 01Dh Чтение/запись Не изменяется
Направление P4DIR 01Eh Чтение/запись Сброс с PUC
Выбор порта P4SEL 01Fh Чтение/запись Сброс с PUC
P5 Ввод P5IN 030h Только чтение -
Вывод P5OUT 031h Чтение/запись Не изменяется
Направление P5DIR 032h Чтение/запись Сброс с PUC
Выбор порта P5SEL 033h Чтение/запись Сброс с PUC
P6 Ввод P6IN 034h Только чтение -
Вывод P6OUT 035h Чтение/запись Не изменяется
Направление P6DIR 036h Чтение/запись Сброс с PUC
Выбор порта P6SEL 037h Чтение/запись Сброс с PUC

 

Раздел 10

Сторожевой таймер

Сторожевой таймер – это 16-разряный таймер, который можно использовать как в качестве сторожевого, так и в качестве «интервального» таймера. В этом разделе описывается модуль сторожевого таймера. Сторожевой таймер реализован во всех устройствах MSP430x1xx.

10.1 Введение в сторожевой таймер

Первичная функция модуля сторожевого таймера (WDT) – выполнять рестарт управляемой системы при возникновении проблемы с программным обеспечением. Если установленный временной интервал истек, генерируется системный сброс. Если сторожевая функция в приложении не нужна, модуль может быть сконфигурирован как интервальный таймер для генерации прерываний через установленные интервалы времени.

Сторожевой таймер обладает следующими возможностями:

  • Восемь программно настраиваемых временных интервалов
  • Режим сторожевого таймера
  • Режим интервального отсчета
  • Доступ к регистру управления WDT защищен паролем
  • Управление функцией вывода nonRST/NMI
  • Возможность выбора источника тактовых импульсов
  • Возможность останова для уменьшения потребляемой мощности

Блок схема модуля WDT показана на рис.9-1.

Примечание: Работа сторожевого таймера после подачи питания
После сигнала PUC, модуль WDT автоматически конфигурируется в сторожевом режиме с начальным интервалом сброса ~32 мС с использованием DCOCLK. Пользователь должен выполнить необходимую настройку или остановить WDT до истечения начального интервала сброса.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Блок-схема сторожевого таймера
Рис.10-1 Блок-схема сторожевого таймера

10.2 Функционирование сторожевого таймера

Модуль WDT можно сконфигурировать с помощью регистра WDTCTL как сторожевой либо интервальный таймер. Регистр WDTCTL также содержит управляющие биты для конфигурирования вывода nonRST/NMI. WDTCTL – это 16-разрядный, защищенный паролем регистр чтения/записи. Любое чтение или попытка записи должны использовать команды-слова, а попытка записи должна содержать пароль записи 05Ah в старшем байте. Любая запись в WDTCTL любого значения, отличного от 05Ah в старшем байте приведет к нарушению ключа безопасности и запуску системного сброса PUC независимо от режима таймера. При любом чтении WDTCTL в старшем байте читается 069h.

10.2.1 Счетчик сторожевого таймера

Счетчик сторожевого таймера (WDTCNT) – это 16-разрядный суммирующий счетчик, не имеющий прямого доступа из программы. Управление WDTCNT и выбор временных интервалов производится через регистр управления сторожевым таймером WDTCTL. WDTCNT может тактироваться от ACLK или SMCLK. Источник тактирования выбирается с помощью битаWDTSSEL.

10.2.2 Сторожевой режим

После состояния PUC, модуль WDT конфигурируется в сторожевом режиме с начальным интервалом сброса ~32 мС с использованием DCOCLK. Пользователь должен настроить, остановить или очистить WDT до истечения начального интервала сброса, в противном случае будет сгенерирован новый сигнал PUC. Когда WDT сконфигурирован в сторожевом режиме, запись в WDTCTL неправильного пароля или истечение выбранного интервала времени приведет к запуску PUC. PUC сбросит WDT к исходному состоянию и сконфигурирует вывод nonRST/NMI на режим сброса.

10.2.3 Режим интервального таймера

Установка бита WDTTMSEL в «1» приводит к выбору режима интервального таймера. Этот режим можно использовать для получения периодических прерываний. В режиме интервального таймера флаг WDTIFG устанавливается по истечении выбранного интервала времени. PUC не генерируется в режиме интервального таймера по истечении установленного временного интервала, а WDTIFG разрешает биту WDTIE оставаться неизменным.

Когда биты WDTIE и GIE установлены, флаг WDTIFG запрашивает прерывание. Флаг прерывания WDTIFG автоматически сбрасывается, когда обслуживается его запрос на прерывание, либо же он может быть сброшен программно. Адреса векторов прерывания различаются для интервального и сторожевого режимов таймера.

Примечание: Модификация сторожевого таймера
Интервал WDT должен быть изменен совместно с WDTCNTCL=1 в одной команде, чтобы избежать неожиданной немедленной генерации PUC или прерывания. Модуль WDT должен быть приостановлен перед сменой источника тактирования для предотвращения возможности установки некорректного интервала.

10.2.4 Прерывания сторожевого таймера

WDT использует два бита в SFR для управления прерыванием.

  • Флаг прерывания WDT, WDTIFG, расположенный в IFG1.0
  • Бит разрешения прерывания от WDT, WDTIE, расположенный в IE1.0

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

При использовании WDT в режиме интервального таймера, флаг WDTIFG устанавливается после выбранного временного интервала и запрашивает прерывание интервального таймера WDT, если установлены биты WDTIE и GIE. Вектор прерывания интервального таймера отличается от вектора сброса, используемого в сторожевом режиме. В режиме интервального таймера флаг WDTIFG сбрасывается автоматически при обработке прерывания, либо же он может быть сброшен программно.

10.2.5 Работа в режимах пониженного энергопотребления

Устройства MSP430 имеют несколько режимов пониженного энергопотребления. Различные сигналы тактирования доступны в различных режимах пониженного энергопотребления. Потребности пользовательского приложения и тип используемой системы тактирования определяют, как WDT должен быть сконфигурирован. К примеру, WDT не должен конфигурироваться в сторожевом режиме с SMCLK в качестве источника тактирования, если пользователь хочет использовать 3-ий режим пониженного потребления, поскольку SMCLK не активен в режиме LPM3 и WDT не будет функционировать. Если сторожевой таймер не нужен, с помощью бита WDTHOLD можно остановить WDTCNT, чтобы уменьшить энергопотребление.

10.2.6 Примеры программного обеспечения

Любая операция записи в WDTCTL должна быть операцией-словом со значением 05Ah (WDTPW) в старшем байте:

    ; Периодическая отчистка активного сторожевого таймера
    MOV #WDTPW+WDTCNTCL,&WDTCTL
    ;
    ; Изменение интервала сторожевого таймера
    MOV #WDTPW+WDTCNTL+SSEL,&WDTCTL
    ;
    ; Останов сторожевого таймера
    MOV #WDTPW+WDTHOLD,&WDTCTL
    ;
    ; Переключение WDT в интервальный режим с интервалом clock/8192
    MOV #WDTPW+WDTCNTCL+WDTTMSEL+WDTIS0,&WDTCTL
    

10.3 Регистры сторожевого таймера

Регистры модуля сторожевого таймера приведены в таблице 10-1.

Таблица 10-1. Регистры сторожевого таймера.

Регистр Краткое
обозначение
Тип
регистра
Адрес Исходное
состояние
Регистр управления сторожевым таймером WDTCTL Чтение/запись 0120h 06900h после PUC
SFR регистр 1 разрешения прерываний IE1 Чтение/запись 0000h Сброс с PUC
SFR регистр 1 флагов прерываний IFG1 Чтение/запись 0002h Сброс с PUC1

1)WDTIFG сбрасывается с POR

WDTCTL, регистр сторожевого таймера

15 14 13 12 11 10 9 8
Читается как 069h
WDTPWx, должен записываться как 05Ah


 
7 6 5 4 3 2 1 0
WDTHOLD WDTNMIES WDTNMI WDTTMSEL WDTCNTCL WDTSSEL WDTISx
rw-0 rw-0 rw-0 rw-0 r0(w) rw-0 rw-0 rw-0


 
WDTPWx Биты
15-8
Пароль сторожевого таймера. Всегда читается как 069h. Должен записываться как 05Ah, в противном случае будет сгенерирован PUC.
WDTHOLD Бит 7 Останов сторожевого таймера. Этот бит останавливает сторожевой таймер. Установка WDTHOLD=1, когда WDT не используется, позволяет снизить энергопотребление.
0 Сторожевой таймер не остановлен
1 Сторожевой таймер остановлен
WDTNMIES Бит 6 Выбор фронта NMI сторожевого таймера. Этот бит позволяет выбрать фронт прерывания для NMI прерывания при WDTNMI=1. Изменение этого бита может вызвать NMI. Чтобы избежать случайного запуска NMI следует изменять этот бит при WDTNMI=0.
0 NMI прерывание происходит по переднему фронту
1 NMI прерывание происходит по спаду
WDTNMI Бит 5 Выбор NMI сторожевого таймера. Этот бит позволяет установить режим функционирования вывода nonRST/NMI.
0 Функция сброса
1 Функция NMI
WDTTMSEL Бит 4 Выбор режима сторожевого таймера
0 Сторожевой режим
1 Режим интервального таймера
WDTCNTCL Бит 3 Очистка счетчика сторожевого таймера. Установкой WDTCNTCL=1 производится очистка счетчика до значения 0000h. Бит WDTCNTCL автоматически сбрасывается.
0 Действие не производится
1 WDTCNT = 0000h
WDTSSEL Бит 2 Выбор источника тактирования сторожевого таймера
0 SMCLK
1 ACLK
WDTISx Биты 1-0 Выбор интервала сторожевого таймера. Эти биты определяют интервал времени сторожевого таймера, по истечении которого устанавливается флаг WDTIFG и/или генерируется сигнал PUC.
00 Частота источника тактирования сторожевого таймера / 32768
01 Частота источника тактирования сторожевого таймера / 8192
10 Частота источника тактирования сторожевого таймера / 512
11 Частота источника тактирования сторожевого таймера / 64

IE1, регистр 1 разрешения прерываний

7 6 5 4 3 2 1 0
              WDTIE
              rw-(0)


 
  Биты
7-1
Эти биты могут быть использованы другими модулями. См. справочное руководство конкретного устройства.
WDTIE Бит 0 Разрешение прерывания от сторожевого таймера. Этот бит разрешает прерывание WDTIFG в режиме интервального таймера. Нет необходимости устанавливать этот бит в режиме сторожевого таймера. Поскольку другие биты в IE1 могут быть использованы другими модулями, рекомендуется устанавливать и очищать эти биты с помощью команд BIS.B или BIC.B, а не командами MOV.B или CLR.B.
0 Прерывание запрещено
1 Прерывание разрешено

IFG1, регистр 1 флагов прерываний

7 6 5 4 3 2 1 0
              WDTIFG
              rw-(0)


 
  Биты
7-1
Эти биты могут быть использованы другими модулями. См. справочное руководство конкретного устройства.
WDTIE Бит 0 Флаг прерывания сторожевого таймера. В сторожевом режиме WDTIFG остается установленным до сброса программным обеспечением. В интервальном режиме бит WDTIFG сбрасывается автоматически при обслуживании прерывания или же может быть сброшен программно. Поскольку другие биты в IE1 могут быть использованы другими модулями, рекомендуется устанавливать и очищать эти биты с помощью команд BIS.B или BIC.B, а не командами MOV.B или CLR.B.
0 Прерывание не ожидается
1 Прерывание ожидается

 

Раздел 11

Таймер А

Таймер А – это 16-разрядный таймер/счетчик с тремя регистрами захвата/сравнения. В этом разделе описывается таймер А. Он реализован во всех устройствах MSP430x1xx.

11.1 Введение в таймер А

Таймер А – это 16-разрядный таймер/счетчик с тремя регистрами захвата/сравнения. Таймер А может обеспечить множество захватов/сравнений, выходов ШИМ и выдержку временных интервалов. Таймер А также имеет обширные возможности прерывания. Прерывания могут быть сгенерированы от счетчика при переполнении и от каждого из регистров захвата/сравнения.

  • Таймер А обладает следующими возможностями:
  • Асинхронный 16-разрядный таймер/счетчик с четырьмя режимами работы;
  • Выбираемый и конфигурируемый источник тактирования;
  • Три конфигурируемых регистра захвата/сравнения;
  • Конфигурируемые выходы с возможностью ШИМ;
  • Асинхронная фиксация (защелка) входа и выхода;
  • Регистр вектора прерываний для быстрого декодирования всех прерываний таймера А.

Блок-схема таймера А показана на рис. 11-1.

Примечание: Использование слова «счет»
«Счет» используется везде в этом разделе. Это способ показать, что счетчик должен быть в процессе подсчета для выполняемого действия. Если в счетчик напрямую записывается конкретное значение, соответствующе действие не происходит.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Блок-схема таймера А
Рис.11-1 Блок-схема таймера А

11.2 Функционирование таймера А

Модуль таймера А конфигурируется программным обеспечением пользователя. Настройка и работа таймера А рассматриваются в нижеследующих разделах.

11.2.1 16-разрядный таймер-счетчик

Регистр 16-разрядного таймера/счетчика TAR, инкрементируется или декрементируется (в зависимости от режима работы) с каждым нарастающим фронтом тактового сигнала. TAR может быть программно прочитан и записан. Кроме того, таймер может генерировать прерывание при переполнении. TAR можно очистить установкой бита TACLR. Установка TACLR также очищает делитель тактовой частоты и направление счета для режима вверх/вниз.

Примечание: Изменение регистров таймера А Рекомендуется останавливать таймер перед изменением режима его работы (за исключением операций с флагом прерывания и разрешения прерывания), чтобы предотвратить его некорректную работу. Когда сигнал TACLK асинхронен с сигналом тактирования ЦПУ, любое чтение из TAR должно происходить, когда таймер не работает, в противном случае результаты могут быть непредсказуемы. Любая запись в TAR приведет к немедленному результату.

Выбор источника тактирования и делитель

Тактирование таймера TACLK может производиться от ACLK, SMCLK или от внешнего источника через TACLK или INCLK. Источник тактовых импульсов выбирается с помощью битов TASSELx. Выбранный источник тактирования может быть подключен к таймеру напрямую или через делитель на 2, 4 или 8 с помощью битов IDx.

11.2.2 Запуск таймера

Таймер может быть запущен или перезапущен следующими способами:

  • Таймер считает, когда MCx > 0 и источник тактовых импульсов активен
  • Когда таймер в режиме «вверх» или «вверх/вниз», он может быть остановлен путем записи 0 в TACCR0. Затем таймер может быть перезапущен путем записи ненулевого значения в TACCR0. В этом случае таймер начинает инкрементироваться от нуля.

11.2.3 Управление режимом таймера

Таймер имеет четыре режима работы, описанных в таблице 11-1: «стоп», «вверх», «непрерывный» и «вверх/вниз». Режимы работы выбираются с помощью битов MCx.

Таблица 11-1. Режимы таймера.

MCx Режим Описание
00 Стоп Останов таймера
01 Вверх Таймер многократно считает от нуля до значения в TACCR0
10 Непрерывный Таймер многократно считает от нуля до значения 0FFFFh
11 Вверх/вниз Таймер многократно считает от нуля вверх до значения в TACCR0 и назад до нуля.

Режим «Вверх»

Режим «вверх» используется, если период таймера должен отличаться от количества отсчетов 0FFFFh. Таймер многократно считает вверх до значения, содержащегося в регистре сравнения TACCR0, который задает период, как показано на рис.11-2. Количество отсчетов таймера в периоде равно TACCR0+1. Когда значение таймера становится равно содержимому TACCR0, таймер перезапускается, начиная счет от нуля. Если режим «вверх» выбран, когда значение таймера больше содержимого TACCR0, таймер немедленно перезапускается, начиная считать от нуля.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-2 Режим «Вверх»

Флаг прерывания TACCR0 CCIFG устанавливается, когда значение таймера равно содержимому TACCR0. Флаг прерывания TAIFG устанавливается, когда таймер считает от TACCR0 к нулю. На рис.11-3 показан цикл установки флагов.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-3 Установка флагов в режиме «Вверх»

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

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

Непрерывный режим

В непрерывном режиме таймер многократно считает вверх до 0FFFFh и перезапускается от нуля, как показано на рис.11-4. Регистр захвата/сравнения TACCR0 работает подобно другим регистрам захвата/сравнения.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-4 Непрерывный режим

Флаг прерывания TAIFG устанавливается, когда таймер считает от 0FFFFh к нулю. На рис.11-5 показан цикл установки флага.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-5 Установка флага в непрерывном режиме

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

Непрерывный режим может использоваться для генерации независимых временных интервалов и выходных частот. Каждый раз по завершении интервала генерируется прерывание. Следующий временной интервал добавляется к регистру TACCRx в процедуре обработки прерывания. На рис.11-6 показаны два раздельных временных интервала t0 и t1, добавляемые к регистрам захвата/сравнения. При таком использовании временные интервалы управляются аппаратно, без программного обеспечения, без влияния времени задержки прерывания. При использовании всех трех регистров захвата/сравнения можно сгенерировать до трех независимых временных интервалов или выходных частот.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-6 Временные интервалы непрерывного режима

Временные интервалы можно реализовать также в других режимах, где TACCR0 используется как регистр периода. Их обработка более комплексна, поскольку сумма старого значения TACCRx и нового периода может быть выше значения TACCR0. Когда предыдущее значение TACCRx плюс tx больше величины TACCR0, значение TACCR0 должно быть вычтено для получения правильного временного интервала.

Режим «вверх/вниз»

Режим «вверх/вниз» используется, если период таймера должен отличаться от значения 0FFFFh и необходима генерация симметричных импульсов. Таймер непрерывно считает вверх до значения, находящегося в регистре сравнения TACCR0 и назад к нулю, как показано на рис.11-7. Период составляет удвоенную величину значения в TACCR0.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-7 Режим «вверх/вниз»

Направление счета запоминается. Это позволяет таймеру останавливаться и запускаться в том же направлении отсчета, которое было до останова. Если это нежелательно, для очистки направления нужно установить бит TACLR. Бит TACLR также очищает значения в TAR и в делителе TACLK.

В режиме «вверх/вниз» флаг прерывания TACCR0 CCIFG и флаг прерывания TAIFG устанавливаются только однажды во время периода, разделяясь 1/2 периода таймера. Флаг прерывания TACCR0 CCIFG устанавливается, когда таймер считает от TACCR0-1 к TACCR0, а флаг TAIFG устанавливается, когда таймер завершает счет вниз от 0001h к 0000h. На рис.11-8 показан цикл установки флагов.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-8 Установка флагов в режиме вверх/вниз

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

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

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

Использование режима вверх/вниз

Режим «вверх/вниз» поддерживает приложения, требующие наличия «мертвого» времени между выходными сигналами (см. раздел «Модуль вывода Таймера А»). К примеру, чтобы избежать перегрузки, два выхода, управляющие H-мостом никогда не должны одновременно иметь высокий уровень. В примере, показанном на рис.11-9 величина времени простоя tdead составляет:

    tdead = ttimer * (TACCR1 – TACCR2), где:
    tdead – интервал времени, в течение которого оба выхода должны быть неактивны
    ttimer – время цикла тактирования таймера
    TACCRx – содержимое регистра захвата/сравнения x

Регистры TACCRx не буферизированы. Когда в них производится запись, они немедленно модифицируются. Поэтому, любое требуемое «мертвое» время не будет поддерживаться автоматически.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-9 Модуль вывода в режиме «вверх/вниз»

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

В таймере А представлено три одинаковых блока захвата/сравнения TACCRx. Любой из блоков может быть использован для фиксации (захвата) данных таймера или для генерации временных интервалов.

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

Режим захвата выбирается, когда CAP=1. Режим захвата используется для регистрации временных событий. Это может потребоваться для быстрых вычислений или для измерения времени. Входы захвата CCIxA и CCIxB подключаются к внешним выводам или к внутренним сигналам и выбираются с помощью битов CCISx. Биты CMx определяют, как будет происходит захват: по фронту входного сигнала, по его спаду или в обоих случаях. Захват происходит по выбранному фронту входного сигнала. Если захват произошел, тогда:

  • Значение таймера копируется в регистр TACCRx
  • Устанавливается флаг прерывания CCIFG

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

Сигнал захвата может быть асинхронен тактовой частоте таймера и вызывать состояние гонки сигналов. Установка бита SCS будет синхронизировать захват со следующим тактовым импульсом таймера. Рекомендуется устанавливать бит SCS для синхронизации сигнала захвата с тактовыми импульсами таймера. Это иллюстрируется на рис.11-10.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-10 Сигнал захвата (SCS=1)

Логика переполнения предусмотрена в каждом регистре захвата/сравнения для индикации в случае, если произошел второй захват перед прочтением значения первого захвата. Когда это происходит, устанавливается бит COV, как показано на рис.11-11. Бит COV должен сбрасываться программно.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-11 Цикл захвата

Инициирование захвата программным обеспечением

Захваты могут быть инициированы программно. Биты CMx могут быть установлены для выполнения захвата по обоим фронтам. В этом случае программное обеспечение устанавливает CCIS1=1 и переключает бит CCISO для переключения сигнала захвата между VCC и GND, инициируя захват каждый раз, когда CCISO изменяет состояние:

    MOV #CAP+SCS+CCIS1+CM_3,&TACCTLx      ; Настройка TACCTLx
    XOR #CCIS0,&TACCTLx                   ; TACCTLx = TAR
    
Примечание: Разнногласие с официальной документацией
На взгляд общественности с конфиренции «Микроконтроллеры и их применение» здесь в описании что-то не то:
Перевод. Раздел "Таймер А", подраздел
"Инициирование захвата программным обеспечением".
Читаем:
Захваты могут быть инициированы программно. Биты CMx могут быть установлены для выполнения захвата по обоим фронтам. В этом случае программное обеспечение устанавливает CCI=1 и переключает бит CCISO для переключения сигнала захвата между VCC и GND, инициируя захват каждый раз, когда CCISO изменяет состояние...

Но бит CCI read only! Значит, софт его поставить не могет.(Да и правильно, иначе есть опасность столкновения сигналов, см. Блок-схему).
В английском оригинале аналогично. Переводчик не ошибся.

Но нужно не CCI ставить, а CCIS1.
Об этом говорит и рядомрасположенный ассемблерный пример, и аналогичный фрагмент в описании Таймера В. Там не CCI ставится, а CCIS1.
 

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

Режим сравнения выбирается, когда CAP=0. Режим сравнения используется для генерации выходных ШИМ-сигналов или прерываний через конкретные временные интервалы. Когда TAR досчитывает до значения в TACCRx, происходит следующее:

  • Устанавливается флаг прерывания CCIFG
  • Внутренний сигнал EQU=1
  • EQUx воздействует на выход согласно режиму вывода
  • Входной сигнал CCI фиксируется в SCCI

11.2.5 Модуль вывода

Каждый блок захвата/сравнения содержит модуль вывода. Модуль вывода используется для генерации выходных сигналов, в т.ч. таких, как ШИМ-сигналы. Каждый модуль вывода имеет восемь рабочих режимов, которые генерируют сигналы, основываясь на сигналах EQU0 и EQUx.

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

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

Таблица 11-2. Режимы вывода.

OUTMODx Режим Описание
000 Вывод Выходной сигнал OUTx определяется битом OUTx. Сигнал OUTx изменяется немедленно при изменении OUTx.
001 Установка Выход устанавливается, когда таймер досчитывает до значения в TACCRx. Он остается установленным до сброса таймера или до выбора другого режима вывода и воздействия на выход.
010 Переключение/Сброс Выход переключается, когда таймер досчитывает до значения TACCRx. Он сбрасывается, когда таймер досчитывает до значения TACCR0.
011 Установка/Сброс Выход устанавливается, когда таймер досчитывает до значения TACCRx. Он сбрасывается, когда таймер досчитывает до значения TACCR0.
100 Переключение Выход переключается, когда таймер досчитывает до значения TACCRx. Период выходного сигнала равен удвоенному периоду таймера.
101 Сброс Выход сбрасывается, когда таймер досчитывает до значения TACCRx. Это остается сброшенным до выбора другого режима вывода и воздействия на выход.
110 Переключение/Установка Выход переключается, когда таймер досчитывает до значения TACCRx. Он устанавливается, когда таймер досчитывает до значения TACCR0.
111 Сброс/Установка Выход сбрасывается, когда таймер досчитывает до значения TACCRx. Он устанавливается, когда таймер досчитывает до значения TACCR0.

Пример вывода – таймер в режиме «вверх»

Сигнал OUTx изменяется, когда таймер досчитывает вверх до значения TACCRx и обратно от TACCR0 к нулю, в зависимости от режима вывода. Пример с использованием TACCR0 и TACCR1 показан на рис.11-12.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-12 Пример вывода – таймер в режиме «вверх»

Пример вывода – таймер в непрерывном режиме

Сигнал OUTx изменяется, когда таймер достигает значений TACCRx и TACCR0, в зависимости от режима вывода. Пример с использованием TACCR0 и TACCR1 показан на рис.11-13.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-13 Пример вывода – таймер в непрерывном режиме

Пример вывода – таймер в режиме «вверх/вниз»

Сигнал OUTx изменяется, когда таймер становится равным TACCRx в каждом направлении счета, а также когда таймер равен TACCR0, в зависимости от режима вывода. Пример с использованием TACCR0 и TACCR2 показан на рис.11-14.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-14 Пример вывода – таймер в режиме «вверх/вниз»

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

BIS #OUTMOD_7,&TACCTLx ; Установка режима вывода 7
BIC #OUTMODx,&TACCTLx ; Очистка лишних битов

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

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

  • Вектор прерывания TACCR0 для TACCR0 CCIFG
  • Вектор прерывания TAIV для всех других флагов CCIFG и TAIFG

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

Прерывание TACCR0

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

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments
Рис.11-15 Флаг прерывания захвата/сравнения TACCR0

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

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

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

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

Пример программного обеспечения, использующего TAIV

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

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

    Блок захвата/сравнения TACCR0               11 циклов
    Блоки захвата/сравнения TACCR1, TACCR2      16 циклов
    Переполнение таймера TAIFG                  14 циклов
    ;   Обработчик прерывания для TACCR0 CCIFG.                                 Циклы
    CCIFG_0_HND
    ;                   ; Начало времени задержки обработчика прерывания          6
    RETI                                                                          5
    ; Обработчик прерывания для TAIFG, TACCR1 и TACCR2 CCIFG.
    TA_HND              ; Задержка прерывания                                     6
    ADD &TAIV,PC        ; Добавление смещения к таблице переходов                 3
    RETI                ; Вектор 0: Нет прерывания                                5
    JMP CCIFG_1_HND     ; Вектор 2: TACCR12
    JMP CCIFG_2_HND     ; Вектор 4: TACCR2                                        2
    RETI                ; Вектор 6: Зарезервировано                               5
    RETI                ; Вектор 8: Зарезервировано                               5
    TAIFG_HND           ; Вектор 10: Флаг TAIFG
    ...                 ; Задача стартует здесь
    RETI                                                                          5
    CCIFG_2_HND         ; Вектор 4: TACCR2
    .                   ; Задача стартует здесь
    RETI                ; Возврат к главной программе                             5
    CCIFG_1_HND         ; Вектор 2: TACCR1
    ..                  ; Задача стартует здесь
    RETI                ; Возврат к главной программе                             5
    

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

Перечень регистров Таймера А приведен в таблице 11-3.

Таблица 11-1. Регистры Таймера А.

Регистр Краткое
обозначение
Тип
регистра
Адрес Исходное
состояние
Управление Таймером А TACTL Чтение/запись 0160h Сброс с POR
Счетчик Таймера А TAR Чтение/запись 0170h Сброс с POR
Регистр 0 управления захватом/сравнением Таймера А TACCTL0 Чтение/запись 0162h Сброс с POR
Регистр 0 захвата/сравнения Таймера А TACCR0 Чтение/запись 0172h Сброс с POR
Регистр 1 управления захватом/сравнением Таймера А TACCTL1 Чтение/запись 0164h Сброс с POR
Регистр 1 захвата/сравнения Таймера А TACCR1 Чтение/запись 0174h Сброс с POR
Регистр 2 управления захватом/сравнением Таймера А TACCTL2 Чтение/запись 0166h Сброс с POR
Регистр 2 захвата/сравнения Таймера А TACCR2 Чтение/запись 0176h Сброс с POR
Вектор прерывания Таймера А TAIV Только чтение 012Eh Сброс с POR

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

15 14 13 12 11 10 9 8
Не используется TASSELx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)


 
7 6 5 4 3 2 1 0
IDx MCx Не исполь
зуется
TACLR TAIE TAIFG
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) w-(0) rw-(0) rw-(0)


 
Не используются Биты
15-10
Не используются
TASSELx Биты 9-8 Выбор источника тактирования Таймера А
00  TACLK
01  ACLK
10  SMCLK
11  INCLK
IDx Биты 7-6 Входной делитель. Эти биты позволяют выбрать коэффициент деления для входной тактовой частоты.
00  /1
01  /2
10  /4
11  /8
MCx Биты 5-4 Выбор режима. Установка MCx=00h, когда Таймер А не используется, позволяет уменьшить потребляемую мощность.
00  Режим остановка: таймер остановлен
01  Режим «вверх»: таймер считает вверх к TACCR0
10  Непрерывный режим: таймер считает вверх к 0FFFFh
11  Режим «вверх/вниз»: таймер считает вверх к TACCR0, затем вниз к 0000h
Не используется Бит 3 Не используется
TACLR Бит 2 Очистка Таймера А. Установка этого бита сбрасывает TAR, IDx и выбранное направление счета. Бит TACLR автоматически сбрасывается и всегда читается как нуль.
TAIE Бит 1 Разрешение прерывания от Таймера А. Этот бит разрешает запрос прерывания TAIFG.
0  Запрещение прерывания
1  Разрешение прерывания
TAIFG Бит 0 Флаг прерывания Таймера А
0  Прерывание не ожидается
1  Ожидается прерывание

TAR, регистр Таймера А

15 14 13 12 11 10 9 8
TARx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)


 
7 6 5 4 3 2 1 0
TARx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)


 
TARx Биты
15-0
Регистр Таймера А. Регистр TAR является счетчиком Таймера А.

TACCTLx, регистр управления захватом/сравнением

15 14 13 12 11 10 9 8
CMx CCISx SCS SCCI Не исполь
зуется
CAP
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) r-(0) r-(0) rw-(0)


 
7 6 5 4 3 2 1 0
OUTMODx CCIE CCI OUT COV CCIFG
rw-(0) rw-(0) rw-(0) rw-(0) r rw-(0) rw-(0) rw-(0)


 
CMx Биты
15-14
Режим захвата
00  Нет захвата
01  Захват по нарастающему (переднему) фронту
10  Захват по заднему фронту
11  Захват как по переднему, так и по заднему фронтам
CCISx Биты
13-12
Выбор входа захвата/сравнения. Этими битами выбирается входной сигнал TACCRx. См. справочное руководство конкретного устройства для выяснения подробностей подключения сигналов.
00  CCIxA
01  CCIxB
10  GND
11  VCC
SCS Бит 1 Синхронизация источника захвата. Этот бит используется для синхронизации входного сигнала захвата с тактовым сигналом таймера.
0  Асинхронный захват
1  Синхронный захват
SCCI Бит 10 Синхронизация входа захвата/сравнения. Выбранный входной сигнал CCI фиксируется по сигналу EQUx и может быть прочитан через этот бит.
Не используется Бит 9 Не используется. Только читается. Всегда читается как 0.
CAP Бит 8 Режим захвата.
0  Режим сравнения
1  Режим захвата
OUTMODx Биты 7-5 Режим вывода. Режимы 2, 3, 6 и 7 не используются для TACCR0, поскольку EQUx=EQU0.
000  Значение бита OUT
001  Установка
010  Переключение/сброс
011  Установка/сброс
100  Переключение
101  Сброс
110  Переключение/установка
111  Сброс/установка
CCIE Бит 4 Разрешение прерывания по захвату/сравнению. Этот бит разрешает запрос прерывания от соответствующего флага CCIFG.
0  Запрещение прерывания
1  Разрешение прерывания
CCI Бит 3 Вход захвата/сравнения. Выбранный входной сигнал может быть прочитан этим битом.
OUT Бит 2 Выход. Этот бит указывает состояние выхода. Если выбран режима вывода 0, этот бит напрямую управляет состоянием выхода.
0  Низкий уровень выхода
1  Высокий уровень выхода
COV Бит 1 Переполнение захвата. Этот бит указывает, что произошло переполнение захвата. Бит COV должен быть сброшен программно
0  Переполнения захвата не произошло
1  Произошло переполнение захвата
CCIFG Бит 0 Флаг прерывания захвата/сравнения
0  Прерывание не ожидается
1  Ожидается прерывание

TAIV, регистр вектора прерывания таймера А

15 14 13 12 11 10 9 8
0 0 0 0 0 0 0 0
r0 r0 r0 r0 r0 r0 r0 r0


 
7 6 5 4 3 2 1 0
0 0 0 0 TAIVx 0
r0 r0 r0 r0 r-(0) r-(0) r-(0) r0


 
TARx Биты
15-0
Значение вектора прерывания таймера А


 
Содержимое TAIV Источник прерывания Флаг
прерывания
Приоритет
прерывания
00h Прерывание не ожидается -  
02h Захват/сравнение 1 TACCR1 CCIFG Высший
04h Захват/сравнение 2 TACCR2 CCIFG  
06h Зарезервировано -  
08h Зарезервировано -  
0Ah Переполнение таймера TAIFG  
0Ch Зарезервировано -  
0Eh Зарезервировано - Низший

 

 

Раздел 12

Таймер В

Таймер В - это 16-разрядный таймер/счетчик со несколькими регистрами захвата/сравнения. В этом разделе описывается работа таймера В. Таймер В3 (с тремя регистрами захвата/сравнения) реализован в устройствах MSP430x13x и MSP430x15x. Таймер В7 (с семью регистрами захвата/сравнения) реализован в устройствах MSP430x14x и MSP430x16x.

12.1 Введение в таймер В

Таймер В – это 16-разрядный таймер/счетчик с тремя или семью регистрами захвата/сравнения. Таймер В может поддерживать несколько режимов захвата/сравнения, вывод ШИМ-сигналов и выдержку временных интервалов. Таймер В также имеет расширенные возможности прерываний. Прерывания могут быть сгенерированы при переполнении счетчика и от каждого из регистров захвата/сравнения.

Таймер В обладает следующими возможностями:

  • Асинхронный 16-разрядный таймер/счетчик с четырьмя режимами работы и четырьмя настраиваемыми длительностями
  • Выбираемые и конфигурируемые источники тактирования
  • Три или семь конфигурируемых регистров захвата/сравнения
  • Конфигурируемые выходы с возможностью ШИМ
  • Защелки сравнения с двойной буферизацией и синхронизируемой загрузкой
  • Регистр вектора прерывания для быстрого декодирования всех прерываний таймера В

Блок-схема таймера В показана на рис.12-1.

Примечание: Использование слова «счет»
«Счет» используется везде в этом разделе. Это способ показать, что счетчик должен быть в процессе подсчета для выполняемого действия во взятом месте. Если в счетчик напрямую записывается конкретное значение, соответствующе действие не происходит.

12.1.1 Сходства и различия с таймером А

Таймер В идентичен таймеру А, но со следующими исключениями:

  • Длина таймера В программируется и может составлять 8, 10, 12 или 16 бит
  • Регистры TBCCRx таймера В имеют двойную буферизацию и могут группироваться
  • Все выходы таймера В могут быть переведены в третье (высокоимпедансное) состояние
  • Функция бита SCCI не реализована в таймере В.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-1 Блок-схема таймера В
Рис.12-1 Блок-схема таймера В

12.2 Работа таймера В

Модуль таймера В конфигурируется программным обеспечением пользователя. Настройка и работа таймера В рассматривается в следующих разделах

12.2.1 16-разрядный счетчик таймера

16-разрядный регистр таймера/счетчика TBR инкрементируется и декрементируется (в зависимости от режима работы) по каждому нарастающему фронту тактового сигнала. Регистр TBR может программно читаться и записываться. Помимо этого, таймер может генерировать прерывание при его переполнении.

Регистр TBR может быть очищен установкой бита TBCLR. Установка TBCLR также очищает делитель тактовой частоты и направление счета для режима «вверх/вниз».

Примечание: Модификация регистров таймера В
Рекомендуется останавливать таймер перед изменением режима работы (кроме операций с флагом прерывания и разрешения прерывания) во избежание его ошибочной работы.
Когда TBCLK асинхронен тактовой частоте ЦПУ, любое чтение из TBR должно выполняться при неработающем таймере, в противном случае результат может оказаться непредсказуемым. Любая запись в TBR приведет к немедленному результату.

Длина 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, таймер немедленно перезапускается на отсчет с нуля.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-2 Режим «вверх»
Рис.12-2 Режим «вверх»

Флаг прерывания TBCCR0 CCIFG устанавливается, когда значение таймера равно значению TBCL0. Флаг прерывания TBIFG устанавливается, когда таймер пересчитывает от TBCL0 к нулю. На рис.12-3 показан цикл установки флагов.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-3 Установка флагов в режиме «вверх»
Рис.12-3 Установка флагов в режиме «вверх»

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

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

Непрерывный режим

В непрерывном режиме таймер многократно считает вверх до значения TBR(max) и перезапускается от нуля, как показано на рис.12-4. Защелка сравнения TBCL0 работает подобно другим регистрам захвата/сравнения.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-4 Непрерывный режим
Рис.12-4 Непрерывный режим

Флаг прерывания TBIFG устанавливается, когда таймер считает от TBR(max) к нулю. На рис.12-5 показан цикл установки флагов.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-5 Установка флагов в непрерывном режиме
Рис.12-5 Установка флагов в непрерывном режиме

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

Непрерывный режим может использоваться для генерации независимых временных интервалов и выходных частот. Каждый раз по завершении интервала генерируется прерывание. Следующий временной интервал добавляется к защелке TBCLx в процедуре обработки прерывания. На рис.12-6 показаны два раздельных временных интервала t0 и t1, добавляемые к регистрам захвата/сравнения. Выдержка временных интервалов осуществляется аппаратно, без участия программного обеспечения и без воздействия задержек прерывания. Может быть сгенерировано до трех (таймер В3) или до семи (таймер В7) независимых временных интервалов или выходных частот при использовании регистров захвата/сравнения.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-6 Временные интервалы в «непрерывном» режиме
Рис.12-6 Временные интервалы в «непрерывном» режиме

Временные интервалы могут быть реализованы также в других режимах, в которых TBCL0 используется как регистр периода. Работа с ними более комплексна, т.к. сумма старого значения TBCLx и нового периода может оказаться больше значения TBCL0. Когда сумма предыдущего значения TBCLx плюс tx больше содержимого TBCL0, для получения правильного временного интервала необходимо вычитать старое значение TBCL0.

Режим «вверх/вниз»

Режим «вверх/вниз» используется, если период таймера должен отличаться от величины отсчетов TBR(max), а также если требуется генерация симметричных импульсов. Таймер многократно считает вверх до значения в защелке сравнения TBCL0 и назад к нулю, как показано на рис.12-7. Период в этом случае равен удвоенному значению TBCL0.

Примечание: TBCL0 > TBR(max)
Если TBCL0 > TBR(max), счетчик работает так, как если бы был сконфигурирован для непрерывного режима. Счет вниз от TBR(max) до нуля не производится.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-7 Режим «вверх/вниз»
Рис.12-7 Режим «вверх/вниз»

Направление счета защелкивается. Это позволяет таймеру останавливаться и перезапускаться с тем направлением счета, которое было до его останова. Если это не желательно, для сброса направления нужно использовать бит TBCLR. Бит TBCLR также очищает значение TBR и делитель TBCLK.

В режиме «вверх/вниз» флаг прерывания TBCCR0 CCIFG и флаг прерывания TBIFG устанавливаются один раз в период, разделяясь 1/2-ой периода таймера. Флаг прерывания TBCCR0 CCIFG устанавливается, когда таймер считает от TBCL0-1 до TBCL0, а TBIFG устанавливается, когда таймер завершает счет вниз от 0001h к 0000h. На рис.12-8 показан цикл установки флагов.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-8 Установка флагов в режиме «вверх/вниз»
Рис.12-8 Установка флагов в режиме «вверх/вниз»

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

Когда изменяется TBCL0 во время работы таймера при выбранном направлении счета вниз и установленном непосредственном режиме загрузке TBCL0, таймер продолжает отсчет вниз до нуля. Новый период будет активизирован после завершения счета счетчика до нуля.

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

Использование режима «вверх/вниз»

Режим «вверх/вниз» поддерживает приложения, требующие наличия «мертвого» времени между выходными сигналами (см. раздел Модуль вывода Таймера В). К примеру, чтобы избежать режима перегрузки, два выхода, управляющие H-мостом никогда не должны иметь высокий уровень одновременно. В примере, показанном на рис.12-9 «мертвое» время tdead задается так:

    tdead = ttimer * (TBCL1 – TBCL3), где:
    tdead – время, в течение которого оба выхода не активны;
    ttimer – время цикла такта таймера;
    TBCLx – содержимое защелки сравнения х.
    

Возможность одновременной загрузки сгруппированных защелок гарантирует наличие «мертвого» времени.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-9 Модуль вывода в режиме «вверх/вниз»
Рис.12-9 Модуль вывода в режиме «вверх/вниз»

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

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

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

Режим захвата выбирается, когда CAP=1. Режим захвата используется для регистрации временных событий. Он может быть использован для выполнения быстрых вычислений или измерений времени. Входы захвата CCIxA и CCIxB подключаются к внешним выводам или внутренним сигналам и выбираются с помощью битов CCISx. Биты CMx позволяют задать, как будет происходить захват: по переднему, по заднему или по обеим фронтам входного сигнала. Захват происходит по выбранному фронту входного сигнала. Если захват произошел, то:

  • Значение таймера копируется в регистр TBCCRx
  • Устанавливается флаг прерывания CCIFG

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

Сигнал захвата может быть асинхронен тактовой частоте таймера и вызывать состояние гонки сигналов. При установке бита SCS захват синхронизируется со следующим тактовым импульсом таймера. Рекомендуется устанавливать бит SCS для синхронизации сигнала захвата с тактовыми импульсами таймера. Это иллюстрируется на рис.12-10.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-10 Сигнал захвата (SCS=1)
Рис.12-10 Сигнал захвата (SCS=1)

Логика переполнения предусмотрена в каждом регистре захвата/сравнения для индикации в случае, если произошел второй захват перед прочтением значения первого захвата. Когда это происходит, устанавливается бит COV, как показано на рис.12-11. Бит COV должен сбрасываться программно.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-11 Цикл захвата
Рис.12-11 Цикл захвата

Захват, инициируемый программным обеспечением

Захваты могут быть инициированы программно. Биты CMx могут устанавливаться для выполнения захвата на обоих фронтах. В этом случае программное обеспечение устанавливает бит CСIS1=1 и переключает бит CCIS0 для переключения сигнала захвата между VCC и GND, инициируя захват каждый раз, когда CCISO изменяет состояние:

    MOV #CAP+SCS+CCIS1+CM_3,&TBCCTLx      ; Настройка TBCCTLx
    XOR #CCIS0,&TBCCTLx                   ; TBCCTLx = TBR
    

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

Режим сравнения выбирается, когда CAP=0. Режим сравнения используется для генерации выходных ШИМ - сигналов или прерываний через заданные временные интервалы. Когда TAR досчитывает до значения в TBCLx, происходит следующее:

  • Устанавливается флаг прерывания CCIFG
  • Внутренний сигнал EQU=1
  • EQU воздействует на вывод согласно режиму вывода

Защелка сравнения TBCLx

Защелка сравнения TBCCRx TBCLx хранит данные для сравнения со значением таймера в режиме сравнения. TBCLx буферизирована TBCCRx. Буферизация защелки сравнения дает пользователю контроль над обновлением периода сравнения. Пользователь не имеет прямого доступа к TBCLx. Сравниваемые данные записываются в каждый регистр TBCCRx и автоматически переносятся в TBCLx. Синхронизация переноса из TBCCRx в TBCLx выбирается пользователем с помощью битов CLLDx в соответствии с описанным в таблице 12-2.

Таблица 12-2. Варианты загрузки TBCLx

CLLDx Описание
00 Новые данные переносятся из TBCCRx в TBCLx немедленно, когда записывается TBCCRx.
01 Новые данные переносятся из TBCCRx в TBCLx, когда TBR досчитывает до 0.
10 Новые данные переносятся из TBCCRx в TBCLx, когда TBR досчитывает до 0 в режимах «вверх» и «непрерывный». Новые данные переносятся из TBCCRx в TBCLx, когда TBR досчитывает до старого значения TBCL0 или до 0 в режиме «вверх/вниз».
11 Новые данные переносятся из TBCCRx в TBCLx, когда TBR досчитывает до старого значения TBCLx.

Группировка защелок сравнения

Несколько защелок сравнения могут быть сгруппированы вместе для одновременного обновления с помощью битов TBCLGRPx. При использовании групп биты CLLDx самого младшего TBCCRx в группе определяют вариант загрузки для каждой защелки группы, кроме случая, когда TBCLGRP=3, как показано в таблице 12-3. Биты CLLDx, управляющие TBCCRx, не должны устанавливаться в ноль. Когда биты CLLDx управления регистром TBCCRx установлены в ноль, все защелки сравнения немедленно обновляются при выполнении записи в их соответствующие регистры TBCCRx – группировки защелок сравнения не происходит.

При загрузке сгруппированных защелок сравнения необходимо соблюдать два условия. Во-первых, все регистры группы должны быть обновлены, даже когда новые данные TBCCRx равны старым данным TBCCRx. Во-вторых, должно произойти событие загрузки.

Таблица 12-3. Рабочие режимы защелок сравнения

TBCLGRPx Группировка Управление обновлением
00 Нет Индивидуальное
01 TBCL1 + TBCL2
TBCL3 + TBCL4
TBCL5 + TBCL6
TBCCR1
TBCCR3
TBCCR5
10 TBCL1 + TBCL2 + TBCL3
TBCL4 + TBCL5 + TBCL6
TBCCR1
TBCCR4
11 TBCL0 + TBCL1 + TBCL2 + TBCL3 + TBCL4 + TBCL5 + TBCL6 TBCCR1

12.2.5 Модуль вывода

Каждый блок захвата/сравнения содержит модуль вывода. Модуль вывода используется для генерации выходных сигналов, таких как ШИМ-сигналы. Каждый модуль вывода имеет восемь рабочих режимов, которые генерируют сигналы, основываясь на сигналах EQU0 и EQUx. Функция ножки TBoutH может использоваться для установки всех выходов таймера В в «третье» (высокоимпедансное) состояние. Когда для ножки выбрана функция TBoutH и на вывод подан высокий лог. уровень, все выходы таймера В находятся в «третьем» состоянии.

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

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

Таблица 12-4. Режимы вывода.

OUTMODx Режим Описание
000 Вывод Выходной сигнал OUTx определяется битом OUTx. Сигнал OUTx изменяется немедленно при изменении OUTx.
001 Установка Выход устанавливается, когда таймер досчитывает до значения в TBCLx. Он остается установленным до сброса таймера или до выбора другого режима вывода и воздействия на выход.
010 Переключение/сброс Выход переключается, когда таймер досчитывает до значения TBCLx. Он сбрасывается, когда таймер досчитывает до значения TBCL0.
011 Установка/сброс Выход устанавливается, когда таймер досчитывает до значения TBCLx. Он сбрасывается, когда таймер досчитывает до значения TBCL0.
100 Переключение Выход переключается, когда таймер досчитывает до значения TBCLx. Период выходного сигнала равен удвоенному периоду таймера.
101 Сброс Выход сбрасывается, когда таймер досчитывает до значения TBCLx. Он остается сброшенным до выбора другого режима вывода и воздействия на выход.
110 Переключение/установка Выход переключается, когда таймер досчитывает до значения TBCLx. Он устанавливается, когда таймер досчитывает до значения TBCL0.
111 Сброс/установка Выход сбрасывается, когда таймер досчитывает до значения TBCLx. Он устанавливается, когда таймер досчитывает до значения TBCL0.

Пример вывода – таймер в режиме «вверх»

Сигнал OUTx изменяется, когда таймер досчитывает вверх до значения TBCLx и обратно от TBCL0 к нулю, в зависимости от режима вывода. Пример с использованием TBCL0 и TBCL1 показан на рис.12-12.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-12 Пример вывода – таймер в режиме «вверх»
Рис.12-12 Пример вывода – таймер в режиме «вверх»

Пример вывода – таймер в непрерывном режиме

Сигнал OUTx изменяется, когда таймер достигает значений TBCLx и TBCL0, в зависимости от режима вывода. Пример с использованием TBCL0 и TBCL1 показан на рис.12-13.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-13 Пример вывода – таймер в «непрерывном» режиме
Рис.12-13 Пример вывода – таймер в «непрерывном» режиме

Пример вывода – таймер в режиме «вверх/вниз»

Сигнал OUTx изменяется, когда таймер равен TBCLx при любом направлении счета, либо когда таймер равен TBCL0, в зависимости от режима вывода. Пример с использованием TBCL0 и TBCL3 показан на рис.12-14.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-14 Пример вывода – таймер в режиме «вверх/вниз»
Рис.12-14 Пример вывода – таймер в режиме «вверх/вниз»

Примечание: Переключение между режимами вывода
При переключении между режимами вывода один из битов OUTMODx должен оставаться установленным во время перехода между режимами, кроме переключения в режим 0. В противном случае может произойти сбой, поскольку режим вывода 0 декодирует элемент NOR (НЕ-ИЛИ). Безопасный метод переключения между режимами вывода заключается в использовании режима вывода 7 как переходного состояния:
    BIS #OUTMOD_7,&TBCCTLx      ; Установка режима вывода =7
    BIC #OUTMODx,&TBCCTLx       ; Очистка ненужных битов
    

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

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

  • Вектор прерывания TBCCR0 для TBCCR0 CCIFG
  • Вектор прерывания TBIV для всех других флагов CCIFG и TBIFG

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

Вектор прерывания TBCCR0

Флаг TBCCR0 CCIFG обладает наивысшим приоритетом прерывания Таймера B и имеет специализированный вектор прерывания, как показано на рис.12-15. Флаг TBCCR0 CCIFG автоматически сбрасывается, когда обслуживается запрос на прерывание TBCCR0.

msp430 Микроконтроллеры семейства MSP430 фирмы Texas Instruments Рис.12-15 Флаг прерывания TBCCR0 захвата/сравнения
Рис.12-15 Флаг прерывания TBCCR0 захвата/сравнения

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

Флаг TBIFG и флаги TBCCRx CCIFG (кроме TBCCR0 CCIFG) распределены по приоритетам и объединены в источник одного вектора прерывания. Регистр вектора прерывания TBIV используется для определения, какой флаг запросил прерывание.

Разрешенное прерывание с наивысшим приоритетом (кроме TBCCR0 CCIFG) генерирует число в регистре TBIV (см. описание регистра). Можно оценить это число или добавить его к программному счетчику для автоматического входа в соответствующую процедуру программы. Запрещенные прерывания таймера В не воздействуют на значение TBIV.

Любой тип доступа: чтение или запись регистра TBIV автоматически сбрасывает флаг наивысшего ожидающего прерывания. Если установлен другой флаг прерывания, будет немедленно сгенерировано другое прерывание после обработки изначального прерывания. К примеру, если флаги TBCCR1 и TBCCR2 CCIFG установлены, когда процедура обработки прерывания обращается к регистру TBIV, флаг TBCCR1 CCIFG автоматически сбрасывается. После выполнения команды процедуры обработки прерывания RETI, флаг TBCCR2 CCIFG генерирует другое прерывание.

Пример программного обеспечения, использующего TBIV

Приведенный далее пример программного обеспечения показывает рекомендуемое использование TBIV и величину издержек времени на управление. Значение TBIV добавляется к программному счетчику РС для автоматического перехода к соответствующей программной процедуре.

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

    Блок захвата/сравнения CCR0 11 циклов
    Блоки захвата/сравнения с CCR1 по CCR6 16 циклов
    Переполнение таймера TBIFG 14 циклов

Следующий пример программного обеспечения показывает рекомендуемое использование TBIV для таймера В3:

    ;     Обработчик прерывания для TBCCR0 CCIFG.                      Циклы
    СCIFG_0_HND
    ... ; Начало времени задержки обработчика прерывания                 6
    RETI                                                                 5
    ; Обработчик прерывания для TBIFG, TBCCR1 и TBCCR2 CCIFG.
    TB_HND $            ; Задержка прерывания                            6
    ADD &TBIV,PC        ; Добавление смещения к таблице переходов        3
    RETI                ; Вектор 0: Нет прерывания                       5
    JMP CCIFG_1_HND     ; Вектор 2: Модуль 1                             2
    JMP CCIFG_2_HND     ; Вектор 4: Модуль 2                             2
    RETI                ; Вектор 6
    RETI                ; Вектор 8
    RETI                ; Вектор 10
    RETI                ; Вектор 12
    TBIFG_HND           ; Вектор 14: Флаг TIMOV
    ...                 ; Задача стартует здесь
    RETI                                                                 5
    CCIFG_2_HND         ; Вектор 4: Модуль 2
    ...                 ; Задача стартует здесь
    RETI                ; Назад к главной программе                      5
    ; Модуль 1 обработчика позволяет узнать, что ожидается
    ; любое другое прерывание: на это тратится 5 циклов, но
    ; 9 циклов можно сэкономить, если ожидается другое прерывание
    CCIFG_1_HND         ; Вектор 6: Модуль 3
    ...                 ; Задача стартует здесь
    JMP TB_HND          ; Просмотр ожидающих прерываний                  2
    

12.3 Регистры таймера В

Перечень регистров таймера В приведен в таблице 12-5.

Таблица 12-5. Регистры Таймера В.

Регистр Краткое
обозначение
Тип
регистра
Адрес Исходное
состояние
Управление Таймером В TBCTL Чтение/запись 0180h Сброс с POR
Счетчик Таймера В TBR Чтение/запись 0190h Сброс с POR
Регистр 0 управления захватом/сравнением таймера В TBCCTL0 Чтение/запись 0182h Сброс с POR
Регистр 0 захвата/сравнения таймера В TBCCR0 Чтение/запись 0192h Сброс с POR
Регистр 1 управления захватом/сравнением таймера В TBCCTL1 Чтение/запись 0184h Сброс с POR
Регистр 1 захвата/сравнения таймера В TBCCR1 Чтение/запись 0194h Сброс с POR
Регистр 2 управления захватом/сравнением таймера В TBCCTL2 Чтение/запись 0186h Сброс с POR
Регистр 2 захвата/сравнения таймера В TBCCR2 Чтение/запись 0196h Сброс с POR
Регистр 3 управления захватом/сравнением таймера В TBCCTL3 Чтение/запись 0188h Сброс с POR
Регистр 3 захвата/сравнения таймера В TBCCR3 Чтение/запись 0198h Сброс с POR
Регистр 4 управления захватом/сравнением таймера В TBCCTL4 Чтение/запись 018Ah Сброс с POR
Регистр 4 захвата/сравнения таймера В TBCCR4 Чтение/запись 019Ah Сброс с POR
Регистр 5 управления захватом/сравнением таймера В TBCCTL5 Чтение/запись 018Ch Сброс с POR
Регистр 5 захвата/сравнения таймера В TBCCR5 Чтение/запись 019Ch Сброс с POR
Регистр 6 управления захватом/сравнением таймера В TBCCTL6 Чтение/запись 018Eh Сброс с POR
Регистр 6 захвата/сравнения таймера В TBCCR6 Чтение/запись 019Eh Сброс с POR
Вектор прерывания Таймера В TBIV Только чтение 011Eh Сброс с POR

TBCTL, регистр управления таймером В

15 14 13 12 11 10 9 8
Не исполь
зуется
TBCLGRPx CNTLx Не исполь
зуется
TBSSELx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)


 
7 6 5 4 3 2 1 0
IDx MCx Не исполь
зуется
TBCLR TBIE TBIFG
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) w-(0) rw-(0) rw-(0)


 
Не исполь
зуется
Бит 15 Не используется
TBCLGRP Биты
14-13
Группировка TBCLx
 
    00 Каждая защелка TBCLx загружается независимо
    01 TBCL1+TBCL2 (биты TBCCR1 CLLDx управляют обновлением)
    TBCL3+TBCL4 (биты TBCCR3 CLLDx управляют обновлением)
    TBCL5+TBCL6 (биты TBCCR5 CLLDx управляют обновлением)
    TBCL0 независим
    10 TBCL1+TBCL2+TBCL3 (биты TBCCR1 CLLDx управляют обновлнием)
    TBCL4+TBCL5+TBCL6 (биты TBCCR4 CLLDx управляют обновлением)
    TBCL0 независим
    11 TBCL0+TBCL1+TBCL2+TBCL3+TBCL4+TBCL5+TBCL6
    (биты TBCCR1 CLLDx управляют обновлением)
CNTLx Биты
12-11
Длина счетчика
    00  16-разрядный, TBR(max) = 0FFFFh
    01  12-разрядный, TBR(max) = 0FFFh
    10  10-разрядный, TBR(max) = 03FFh
    11  8-разрядный, TBR(max) = 0FFh
    
Не исполь
зуется
Бит 10 Не используется
TBSSELx Биты
9-8
Выбор источника тактирования таймера В
    00  TBCLK
    01  ACLK
    10  SMCLK
    11  INCLK
    
IDx Биты
7-6
Входной делитель. Эти биты позволяют выбрать коэффициент деления для входной тактовой частоты.
    00  /1
    01  /2
    10  /4
    11  /8
    
MCx Биты
5-4
Выбор режима. Установка MCx=00h, когда таймер В не используется, позволяет уменьшить потребляемую мощность.
 
    00 Режим «останов»: таймер остановлен
    01 Режим «вверх»: таймер считает вверх к TBCL0
    10 Непрерывный режим: таймер считает вверх к значению, установленному TBCNTLx
    11 Режим «вверх/вниз»: таймер считает вверх к TBCL0, затем вниз к 0000h
Не используется Бит 3 Не используется
TBCLR Бит 2 Очистка таймера В. Установка этого бита сбрасывает TBR, IDx и выбранное направление счета. Бит TBCLR автоматически сбрасывается и всегда читается как нуль.
TBIE Бит 1 Разрешение прерывания от таймера В. Этот бит разрешает запрос прерывания TBIFG.
    0  Прерывание запрещено
    1  Прерывание разрешено
    
TBIFG Бит 0 Флаг прерывания таймера В
    0  Прерывание не ожидается
    1  Ожидается прерывание
    

TBR, регистр таймера В

15 14 13 12 11 10 9 8
TBRx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)


 
7 6 5 4 3 2 1 0
TBRx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)


 
TBRx Биты 15-0 Регистр таймера В. Регистр TBR является счетчиком таймера В.

TBCCTLx, регистр управления захватом/сравнением

15 14 13 12 11 10 9 8
CMx CCISx SCS CLLDx CAP
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) r-(0) rw-(0)


 
7 6 5 4 3 2 1 0
OUTMODx CCIE CCI OUT COV CCIFG
rw-(0) rw-(0) rw-(0) rw-(0) r rw-(0) rw-(0) rw-(0)


 
CMx Биты
15-14
Режим захвата
    00  Нет захвата
    01  Захват по нарастающему (переднему) фронту
    10  Захват по заднему фронту
    11  Захват как по переднему, так и по заднему фронтам
    
CCISx Биты
13-12
Выбор входа захвата/сравнения. Этими битами выбирается входной сигнал TBCCRx. См. справочное руководство конкретного устройства для выяснения подробностей подключения сигналов.
    00  CCIxA
    01  CCIxB
    10  GND
    11  VCC
    
SCS Бит 11 Синхронизация источника захвата. Этот бит используется для синхронизации входного сигнала захвата с тактовым сигналом.
    0  Асинхронный захват
    1  Синхронный захват
    
CLLDx Бит 10-9 Загрузка защелки сравнения. Эти биты определяют, какое событие вызовет загрузку защелки сравнения.
    00  TBCLx загружается при записи в TBCCRx
    01  TBCLx загружается, когда TBR досчитывает к нулю
    10  TBCLx загружается, когда TBR досчитывает к нулю 
              (непрерывный режим или режим «вверх»)
    11  TBCLx загружается, когда TBR досчитывает к TBCLx
    
CAP Бит 8 Режим захвата.
    0  Режим сравнения
    1  Режим захвата
    
OUTMODx Биты
7-5
Режим вывода. Режимы 2, 3, 6 и 7 не используются для TBCL0, поскольку EQUx=EQU0.
    000  Значение бита OUT
    001  Установка
    010  Переключение/сброс
    011  Установка/сброс
    100  Переключение
    101  Сброс
    110  Переключение/установка
    111  Сброс/установка
    
CCIE Бит 4 Разрешение прерывания по захвату/сравнению. Этот бит разрешает запрос прерывания от соответствующего флага CCIFG.
    0  Прерывание запрещено
    1  Прерывание разрешено
    
CCI Бит 3 Вход захвата/сравнения. Выбранный входной сигнал может быть прочитан этим битом.
OUT Бит 2 Выход. Этот бит указывает состояние вывода. Если выбран режима вывода 0, этот бит напрямую управляет состоянием выхода.
    0  Низкий уровень выхода
    1  Высокий уровень выхода
    
COV Бит 1 Переполнение захвата. Этот бит указывает, что произошло переполнение захвата. Бит COV должен быть сброшен программно.
    0  Переполнения захвата не произошло
    1  Произошло переполнение захвата
    
CCIFG Бит 0 Флаг прерывания захвата/сравнения
    0  Прерывание не ожидается
    1  Ожидается прерывание
    

TBIV, регистр вектора прерывания таймера В

15 14 13 12 11 10 9 8
0 0 0 0 0 0 0 0
r0 r0 r0 r0 r0 r0 r0 r0


 
7 6 5 4 3 2 1 0
0 0 0 0 TBIVx 0
r0 r0 r0 r0 r-(0) r-(0) r-(0) r0


 
TBIVx Биты
15-0
Значение вектора прерывания таймера В


 
Содержимое TBIV Источник прерывания Флаг прерывания Приоритет прерывания
00h Прерывание не ожидается -  
02h Захват/сравнение 1 TBCCR1 CCIFG Высший
04h Захват/сравнение 2 TBCCR2 CCIFG  
06h Захват/сравнение 3* TBCCR3 CCIFG  
08h Захват/сравнение 4* TBCCR4 CCIFG  
0Ah Захват/сравнение 5* TBCCR5 CCIFG  
0Ch Захват/сравнение 6* TBCCR6 CCIFG  
0Eh Переполнение таймера TBIFG Низший

* Только в устройствах MSP430x14x, MSP430x16x.
 

 

 

 

 

 

 

 

 

содержание      ..     1      2      3      4      ..