Руководство пользователя MSP430 (1041606), страница 20
Текст из файла (страница 20)
Рис.11-12 Пример вывода – таймер в режиме «вверх»
Пример вывода – таймер в непрерывном режиме
Сигнал OUTx изменяется, когда таймер достигает значений TACCRx и TACCR0, в зависимости от режима вывода. Пример с использованием TACCR0 и TACCR1 показан на рис.11-13.
Рис.11-13 Пример вывода – таймер в непрерывном режиме
Пример вывода – таймер в режиме «вверх/вниз»
Сигнал OUTx изменяется, когда таймер становится равным TACCRx в каждом направлении счета, а также когда таймер равен TACCR0, в зависимости от режима вывода. Пример с использованием TACCR0 и TACCR2 показан на рис.11-14.
Рис.11-14 Пример вывода – таймер в режиме «вверх/вниз»
Примечание: Переключение между режимами вывода |
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.
Рис.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) |
Не используются | Биты | Не используются |
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 | Биты | Регистр Таймера А. Регистр 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 | Биты | Режим захвата 00 Нет захвата 01 Захват по нарастающему (переднему) фронту 10 Захват по заднему фронту 11 Захват как по переднему, так и по заднему фронтам |
CCISx | Биты | Выбор входа захвата/сравнения. Этими битами выбирается входной сигнал 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 | Биты | Значение вектора прерывания таймера А |
Содержимое TAIV | Источник прерывания | Флаг | Приоритет |
00h | Прерывание не ожидается | - |
|
02h | Захват/сравнение 1 | TACCR1 CCIFG | Высший |
04h | Захват/сравнение 2 | TACCR2 CCIFG |
|
06h | Зарезервировано | - |
|
08h | Зарезервировано | - |
|
0Ah | Переполнение таймера | TAIFG |
|
0Ch | Зарезервировано | - |
|
0Eh | Зарезервировано | - | Низший |
Раздел 12 Таймер В
Таймер В - это 16-разрядный таймер/счетчик со несколькими регистрами захвата/сравнения. В этом разделе описывается работа таймера В. Таймер В3 (с тремя регистрами захвата/сравнения) реализован в устройствах MSP430x13x и MSP430x15x. Таймер В7 (с семью регистрами захвата/сравнения) реализован в устройствах MSP430x14x и MSP430x16x.