MSP430_Final
.pdf13.2. Функционирование Таймера B 341
того, любой флаг CCIFG можно установить или сбросить программно. При уста новке флага CCIFG, если установлен соответствующий бит CCIE и бит общего разрешения прерываний GIE, генерируется запрос прерывания.
Прерывание TBCCR0
Флаг прерывания CCIFG для регистра TBCCR0 соответствует прерыванию Таймера B с наивысшим приоритетом и имеет отдельный вектор прерывания, как показано на Рис. 13.15. Флаг CCIFG для регистра TBCCR0 автоматически сбра сывается при обслуживании запроса прерывания TBCCR0.
Захват |
|
|
|
|
EQU0 |
Установка |
CCIE |
IRQ, Запрос прерывания |
|
D |
Q |
|
||
CAP |
|
|
||
|
|
|
|
|
Тактовый сигнал |
|
Сброс |
|
IRACC, Запрос прерывания принят |
таймера |
|
|
POR |
Рис. 13.15. Флаг прерывания захвата/сравнения TACCR0.
Генератор вектора прерывания TBIV
Флаги CCIFG для регистров TBCCR1…TBCCR6 и флаг TBIFG имеют раз личные приоритеты и служат источником единственного вектора прерывания. Для определения, какой из флагов вызвал генерацию прерывания, используется регистр вектора прерывания TBIV.
Разрешённое прерывание с наивысшим приоритетом формирует в регистре TBIV число (см. описание регистра). Это число можно оценить или же просто прибавить к счётчику команд для автоматического перехода к соответствующей секции программы. Запрещённые прерывания таймера не влияют на содержимое регистра TBIV.
При любом обращении к регистру TBIV как для чтения, так и для записи флаг прерывания с наивысшим приоритетом, ожидающего обработки, автоматически сбрасывается. Если имеется ещё один установленный флаг, то сразу же после за вершения обработки текущего прерывания будет сгенерировано новое прерыва ние. Например, если на момент обращения к регистру TBIV в процедуре обработ ки прерывания были установлены флаги CCIFG для регистров TBCCR1 и TBCCR2, то будет автоматически сброшен флаг CCIFG для регистра TBCCR1. После выполнения команды RETI процедуры обработки прерывания флаг CCIFG для регистра TBCCR2 вызовет генерацию нового прерывания.
Пример процедуры обработки прерывания TBIV
Вследующем примере показано рекомендуемое использование регистра TBIV
иприведена информация о накладных расходах на обработку прерывания. Со держимое регистра TBIV прибавляется к счётчику команд для автоматического перехода к соответствующей процедуре.
342 Глава 13. Таймер B
Значения, расположенные по правому краю, показывают число тактов ЦПУ, требуемое для выполнения каждой команды. Накладные расходы на обработку различных источников прерывания включают в себя задержку обслуживания прерывания и время, требуемое для возврата из прерывания, но не время, необхо димое для выполнения собственно задачи. Задержки обработки прерывания име
ют следующие значения: |
|
|
|
Блок захвата/сравнения CCR0 |
11 тактов |
|
Блоки захвата/сравнения с CCR1 по CCR6 |
16 тактов |
|
Переполнение таймера TBIFG |
14 тактов |
; Обработчик прерывания для TBCCR0 CCIFG. |
Тактов |
|||
CCIFG_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: Флаг TBIFG |
|
|
... |
|
; Здесь начало задачи |
|
|
RETI |
|
|
5 |
CCIFG_2_HND |
|
; Вектор 4: Модуль 2 |
|
|
|
... |
|
; Здесь начало задачи |
|
|
RETI |
|
; Возвращаемся в основную программу |
5 |
;В обработчике 1$го модуля используется программное решение,
;позволяющее определить, нет ли других прерываний, ожидающих
;обработки. На это тратится 5 тактов, однако при наличии
;такого прерывания данное решение позволяет сэкономить 9 тактов
CCIFG_1_HND |
|
; Вектор 2: Модуль 1 |
|
||
... |
|
; |
Здесь начало |
задачи |
|
JMP |
TB_HND |
; |
Возвращаемся |
в основную программу |
5 |
13.3. Регистры Таймера B 343
13.3. Регистры Таймера B
Список регистров Таймера B приведён в Табл. 13.5.
Таблица 13.5. Регистры Таймера B
Регистр |
Обозначение |
Тип регистра |
Адрес |
Исходное состояние |
|
|
|
|
|
Регистр управления Таймера B |
TBCTL |
Чтение/запись |
0180h |
Сбрасывается после POR |
|
|
|
|
|
Регистр счётчика Таймера B |
TBR |
Чтение/запись |
0190h |
Сбрасывается после POR |
|
|
|
|
|
Регистр управления блоком |
TBCCTL0 |
Чтение/запись |
0182h |
Сбрасывается после POR |
захвата/сравнения 0 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 0 |
TBCCR0 |
Чтение/запись |
0192h |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр управления блоком |
TBCCTL1 |
Чтение/запись |
0184h |
Сбрасывается после POR |
захвата/сравнения 1 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 1 |
TBCCR1 |
Чтение/запись |
0194h |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр управления блоком |
TBCCTL2 |
Чтение/запись |
0186h |
Сбрасывается после POR |
захвата/сравнения 2 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 2 |
TBCCR2 |
Чтение/запись |
0196h |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр управления блоком |
TBCCTL3 |
Чтение/запись |
0188h |
Сбрасывается после POR |
захвата/сравнения 3 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 3 |
TBCCR3 |
Чтение/запись |
0198h |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр управления блоком |
TBCCTL4 |
Чтение/запись |
018Ah |
Сбрасывается после POR |
захвата/сравнения 4 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 4 |
TBCCR4 |
Чтение/запись |
019Ah |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр управления блоком |
TBCCTL5 |
Чтение/запись |
018Ch |
Сбрасывается после POR |
захвата/сравнения 5 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 5 |
TBCCR5 |
Чтение/запись |
019Ch |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр управления блоком |
TBCCTL6 |
Чтение/запись |
018Eh |
Сбрасывается после POR |
захвата/сравнения 6 Таймера B |
|
|
|
|
|
|
|
|
|
Регистр захвата/сравнения 6 |
TBCCR6 |
Чтение/запись |
019Eh |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
Регистр вектора прерывания |
TBIV |
Только чтение |
011Eh |
Сбрасывается после POR |
Таймера B |
|
|
|
|
|
|
|
|
|
TBCTL, регистр управления Таймера B
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
||
Unused |
|
TBCLGRPx |
|
CNTLx |
Unused |
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 |
Unused |
TBCLR |
TBIE |
TBIFG |
||
|
|
|
|
|
|
|
|
|
|
rw–(0) |
|
rw–(0) |
rw–(0) |
|
rw–(0) |
rw–(0) |
w–(0) |
rw–(0) |
rw–(0) |
13.3. Регистры Таймера B 345
TBR, регистр счётчика Таймера B
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 Биты Регистр счётчика Таймера B. В этом регистре содержится текущее 15…0 значение Таймера B.
TBCCRx, регистр захвата/сравнения x Таймера B
15 |
14 |
13 |
|
12 |
11 |
10 |
9 |
8 |
|
|
|
|
|
|
TBССRx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rw–(0) |
rw–(0) |
|
rw–(0) |
rw–(0) |
rw–(0) |
rw–(0) |
rw–(0) |
rw–(0) |
|
7 |
6 |
5 |
|
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TBССRx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rw–(0) |
rw–(0) |
|
rw–(0) |
rw–(0) |
rw–(0) |
rw–(0) |
rw–(0) |
rw–(0) |
|
TBССRx |
Биты |
Регистр захвата/сравнения Таймера B. |
|
|
|||||
|
15…0 |
Режим сравнения: Число для сравнения загружается в регистр |
|||||||
|
|
TBCCRx и автоматически пересылается в защёлку TBCLx. В защёлке |
|||||||
|
|
TBCLx содержится число, которое сравнивается с содержимым ре |
|||||||
|
|
гистра счётчика TBR. |
|
|
|
|
|||
|
|
Режим захвата: Содержимое регистра TBR копируется в регистр |
|||||||
|
|
TBCCRx в момент выполнения операции захвата. |
|
||||||
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) |
rw–(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Захват по обоим фронтам
13.3. Регистры Таймера B 347
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 |
|
Переполнение таймера |
|
TAIFG |
|
|
Низший |
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
* Реализовано не во всех моделях |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14.1. Введение 349 |
|
USII2C = 0 |
|
|
|
USIGE |
|
|
|
USIOE |
USIPE6 |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D |
Q |
|
SDO |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
G |
|
|
|
|
|
USI16B |
USILSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USIPE7 |
|
|
8/16 битный сдвиговый регистр |
|
|
|
|
SDI |
||
|
|
EN |
USISR |
|
|
|
|
|
|
|
|
USICNTx |
USIIFGCC |
|
|
|
|
|
|
|
|
Счётчик битов |
Установка USIIFG |
|
|
||||
USISWRST |
|
EN |
|
|
|
||||
|
|
|
|
|
|
|
|
||
|
|
USICKPH |
|
|
|
|
|
|
|
|
|
USICKPL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USIPE5 |
|
Тактовый сигнал |
1 |
|
|
|
|
|
SCLK |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USISSELx |
|
|
|
|
|
|
|
|
SCLK |
000 |
USIDIVx |
|
|
|
|
USIMST |
|
|
|
|
|
|
|
|
|
|||
ACLK |
001 |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
SMCLK |
010 |
Делитель тактового |
|
1 |
USICLK |
|
|||
|
|
|
|
|
|||||
SMCLK |
011 |
сигнала |
|
0 |
|
|
|
|
|
|
|
на 1/2/4/8... /128 |
|
|
|
|
|
||
USISWCLK |
100 |
|
|
|
|
|
|
||
HOLD |
|
|
|
|
|
|
|
||
TA0 |
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
TA1 |
110 |
|
|
|
|
|
|
|
|
TA2 |
111 |
|
|
|
|
|
|
|
|
|
|
USIIFG |
|
|
|
|
|
|
|
|
|
Рис. 14.1. Блок схема модуля USI: режим SPI. |
|
|
350 Глава 14. Универсальный последовательный интерфейс |
|
|
|
||||
|
USII2C = 1 |
USIOE |
|
|
|
|
Установка |
|
USICKPL = 1 |
|
|
|
D |
Q |
USIAL, |
|
USICKPH = 0 |
|
|
|
Сброс |
||
|
|
|
|
|
|
||
|
USILSB = 0 |
|
|
|
|
|
USIOE |
|
USI16B = 0 |
|
|
|
|
|
|
|
USIGE |
|
|
|
|
|
|
|
|
|
D |
Q |
|
|
|
|
|
|
G |
|
|
|
|
|
|
|
|
|
|
|
USIPE7 |
|
|
MSB |
|
LSB |
|
|
SDA |
|
|
8 битный сдвиговый регистр |
|
|
|||
|
|
|
|
|
|||
|
|
EN |
USISRL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USICNTx |
USIIFGCC |
|
|
|
|
|
|
Счётчик битов |
Установка |
Детектор |
|
Установка |
|
|
|
EN |
|
состояния |
|
USISTTIFG |
|
|
|
|
USIIFG |
|
|||
|
|
|
СТАРТ |
|
|||
USISWRST |
|
|
|
|
|||
|
|
|
|
|
|
||
|
|
|
|
|
Детектор |
|
Установка |
|
|
|
|
|
состояния |
|
|
|
|
|
|
|
|
USISTP |
|
|
USICKPH |
|
|
СТОП |
|
||
|
|
|
|
|
|||
|
USICKPL |
|
|
|
|
|
|
|
|
|
|
|
|
|
USIPE6 |
|
Тактовый сигнал |
|
1 |
|
|
SCL |
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
USISTTIFG |
|
|
|
|
|
|
|
USIIFG |
|
Удержание SCL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USISSELx |
USISCLREL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USIMST |
|
|
|
SCLK |
000 |
USIDIVx |
|
|
|
|
|
ACLK |
001 |
|
|
|
|
||
|
|
|
|
|
|
||
SMCLK |
010 |
HOLD |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
SMCLK |
011 |
Делитель тактового |
USICLK |
|
|
||
|
|
сигнала |
0 |
|
|
||
|
|
|
|
|
|||
SWCLK |
100 |
|
|
|
|
||
на 1/2/4/8... /128 |
|
|
|
|
|||
TA0 |
101 |
|
|
|
|
||
|
|
|
|
|
|
||
TA1 |
110 |
|
|
|
|
|
|
TA2 |
111 |
|
|
|
|
|
|
|
|
Рис. 14.2. Блок схема модуля USI: режим I2C. |
|
|