Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч-Пособие-HC08.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.23 Mб
Скачать

13. Таймерные модули

Микроконтроллеры MC68HC908GP32 содержат два таймерных модуля TIM08-1 и TIM08-2, которые которые выполняют широкий набор таймерных функций, включая фиксацию времени поступления входных сигналов (режим «захвата»), выдачу выходных сигналов в заданный момент времени (режим «совпадения»), формирование широтно-импульсных (ШИМ) сигналов. В состав микроконтроллеров дополнительно введен модуль базового таймера TBM08, который обеспечивает периодическое формирование запросов прерывания процессора. В данном разделе рассматривается функционирование этих вариантов таймерных модулей.

Таймерный модуль TIM08 (Timer Interface Module – 08) содержит блок таймера-счетчика, структура которых показана на рис. 24. Каждый из модулей имеет два таймерных каналов, выводы которых служат для приема внешних сигналов, время поступления которых фиксируется, или для выдачи выходных сигналов в заданные моменты времени.

Рис.24. Структура блока таймера-счетчика (а) и таймерного канала (б) в таймерном модуле TIM08

Каждый блок счетчика-таймера содержит 16-разрядный счетчик TxCNT, 16-разрядный регистр модуля счета TxMOD и 8-разрядный регистр управления-состояния TxSC, где символ x принимает значение 1 или 2 (для серии GP), Каждый таймерный канал содержит 16-разрядный регистр данных TxCHi и 8-разрядный регистр управления-состояния канала TxSCi, где в качестве символа i указывается номер соответствующего канала: i = 0, 1, 2, 3, 4, 5 или 6.

Входы-выходы таймерных каналов TxCHi совмещены с выводами параллельных портов, реализуя при работе модулей TIM08 альтернативные функции. В табл. 20 указано, какие выводы портов используются соответствующими таймерными каналами в различных сериях микроконтроллеров.

Таблица 20. Альтернативные функции выводов порта D

при работе таймерных каналов модуля TIM08

Выводы таймерных модулей

Выводы

порта D

T(A)CH0 (T1CH0)

PTD4

T(A)CH1 (T1CH1)

PTD5

T(A)CH2

-

T(A)CH3

-

T(A)CLK

-

TBCH0 (T2CH0)

PTD6

TBCH1 (T2CH1)

PTD7

TBCLK

-

Регистры таймерных модулей имеют свои адреса, которые приведены в табл. 21. Запись-считывание содержимого 16-разрядных регистров производится как обращение к двум 8-разрядным регистрам, один из которых содержит старший байт и отмечается суффиксом h, а второй содержит младший байт и отмечается суффиксом l, например TxMODh-TxMODl.

Tаблица 21. Адреса регистров таймерных модулей

Модуль TIM08-1

Модуль TIM08-2

Блок таймера

Регистр

Адрес

Блок таймера

Регистр

Адрес

Блок

Счетчика-таймера

T1SC

$0020

Блок

счетчика-таймера

T2SC

$002B

T1MODh-l

$0021-22

T2MODh-l

$002C-2D

T1CNTh-l

$0023-24

T2CNTh-l

$002E-2F

Таймерный канал 0

T1SC0

$0025

Таймерный канал 0

T2SC0

$0030

T1CH0h-l

$0026-27

T2CH0h-l

$0031-32

Таймерный канал 1

T1SC0

$0028

Таймерный канал 1

T1SC0

$0033

T1CH0h-l

$0029-2A

T2CH0h-l

$0034-35

Функционирование счетчика-таймера в модуле TIM08 определяется содержимым регистра TxSC, биты которого имеют следующее назначение (рис.25,а):

TOF – признак переполнения таймера (доступен только для чтения), принимает значение TOF=1, если содержимое счетчика TxCNT достигает максимального значения, заданного содержимым регистра TxMOD;

TOIE – разрешает при значении TOIE=1 формирование запроса прерывания при переполнении счетчика (признак TOF=1);

TSTOP – вызывает остановку переключения счетчика TxCNT при установке значения бита TSTOP=1;

TRST – вызывает при установке значения TRST=1 сброс содержимого счетчика TxCNT в состояние $0000 и установку значения битов PS2-0=000 (доступен только для записи, устанавливается в 0 после сброса TxCNT в нулевое состояние);

PS2-0 – определяют коэффициент деления частоты Kd при формировании сигналов, переключающих счетчик TxCNT (см. табл.22).

7

6

5

4

3

2

1

0

TOF

TOIE

TSTOP

TRST

-

PS2

PS1

PS0

а) TxSC

7

6

5

4

3

2

1

0

CHiF

CHiIE

0

MSiA

ELSiB

ELSiA

TOVi

CHiMAX

б) TxSCi

Рис. 25. Форматы содержимого таймерных регистров TxSC, TxSCi

При запуске микроконтроллера счетчик TxCNT устанавливаеся в начальное состояние $0000, после чего производится его переключение сигналами с частотой Fc = Ft/Kd, где коэффициент деления Kd определяется значением битов PS2-0 в регистре TxSC (см. табл. 22). Остановка и последующий запуск счетчика производится путем установки соответствующего значения бита TSTOP в регистре TxSC. Счетчик сбрасывается в состояние $0000 при установке значения бита TRST=1. Модуль счета Mc задается содержимым регистра TxMOD и может иметь значение от 0 до 65535. При запуске микроконтроллера все биты в регистре TxMOD принимают значение 1. Когда содержимое счетчика TxCNT достигает значения, записанного в TxMOD, счетчик сбрасывается в нулевое состояние. При этом устанавливается значение признака переполнения TOF=1, что вызывает прерывание процессора, если в регистре TxSC значение бита TOIE=1. Вектора прерываний по переполнению таймеров размещаются в соответствующих позициях таблицы векторов (см. табл.10 в разделе 5).

Текущее содержимое TxCNT доступно только для чтения. При этом следует сначала считать значение старшего бита (регистр TxCNTh), а затем значение младшего бита (регистр TxCNTl). При чтении старшего бита значение младшего автоматически фиксируется в регистре TxCNTl, поэтому после его считывания будет получено фактическое содержимое TxCNT на момент обращения к регистру TxCNTh.

Таблица 22. Коэффициенты деления частоты Kd

для таймерных модулей

TIM08

TBM08

PS2-0

Kd

TBR2-0

Kd

000

1

000

32768

001

2

001

8192

010

4

010

2048

011

8

011

128

100

16

100

64

101

32

101

32

110

64

110

16

111

Не используется

111

8

Функционирование i-го таймерного канала определяется содержимым его регистра управления-состояния TxSCi, который имеет следующие биты (рис.25,б):

CHiF – признак срабатывания i-го канала (доступен только для чтения), принимает значение CHiF=1, если канал фиксирует поступление входного сигнала (в режиме захвата) или формирует выходной сигнал (в режиме совпадения);

CHiIE – разрешает при значении CHiIE=1 формирование запроса прерывания при срабатывании i-го канала (установка признака CHiF=1);

MSiB, MSiA – определяют режим работы i-го канала (табл. 23);

ELSiB, ELSiA – определяют вид входного сигнала в режиме захвата или уровень выходного cигнала в режиме совпадения (табл.23);

TOVi – задает вариант изменения сигнала на выходе TCHi канала, работающего в режиме совпадения или формирования ШИМ-сигналов, при переполнении счетчика таймера: сохранение текущего состояния при значении TOVi=0, изменение состояния на противоположное при значении TOVi=1;

CHiMAX – задает выбор коэффициента заполнения Q формируемых ШИМ-сигналов: при значении CHiMAX=0 коэффициент Q определяется содержимым регистра данных i-го канала TxCHi, при CHiMAX=1 коэффициент Q=1.

Для каждого таймерного канала в таблице векторов прерываний (табл.10) содержится отдельный вектор, определяющий выбор соответствующей подпрограммы обработки прерываний (см. раздел 5). Сброс в состояние 0 признака CHiF, вызывающего запрос прерывания при срабатывании i-го канала, производится при выполнении чтения содержимого регистра TxSCi и последующей записи 0 в качестве бита CHiF в этом регистре. Эти операции должны выполняться подпрограммой обработки прерываний данного канала.

Таблица 23. Режимы работы таймерных каналов модуля TIM08

Режим канала

MsiB-A

ELSiB-A

Использование вывода TxCHi

Параллельный

ввод-вывод данных

X 0

0 0

Вывод параллельного порта (начальное состояние – 1)

X 1

0 0

Вывод параллельного порта (начальное состояние – 0)

Режим

захвата

0 0

0 1

Захват при положительном перепаде сигнала TxCHi

0 0

1 0

Захват при отрицательном перепаде сигнала TxCHi

0 0

1 1

Захват при любом перепаде сигнала TxCHi

Режим совпадения или

выдачи ШИМ-сигнала

(без буферизации)

0 1

0 1

Изменение уровня на выводе TxCHi при совпадении

0 1

1 0

Установка 0 на выводе TxCHi при совпадении

0 1

1 1

Установка 1 на выводе TxCHi при совпадении

Режим совпадения или выдачи ШИМ-сигнала

(с буферизацией)

1 X

0 1

Изменение уровня на выводе TxCHi при совпадении

1 X

1 0

Установка 0 на выводе TxCHi при совпадении

1 X

1 1

Установка 1 на выводе TxCHi при совпадении

Каждый канал таймера может работать в режиме захвата, совпадения или формирования ШИМ-сигналов в зависимости от значения битов MSiB-A и ELSiB-A в регистре TxSCi (табл.23).

При значении битов ELSiB-A=00 соответствующий вывод используется для обмена данными через параллельный порт, то-есть данный таймерный канал не подключен к внешнему выводу. При этом исходный уровень сигнала на этом выводе определяется значением бита MSiA (см. табл.23).

В режиме захвата (значения битов MSiB-A=00) приход сигнала на вход TxCHi таймерного канала вызывает запись текущего содержимого счетчика TxCNT в регистр данных канала TxCHi, фиксируя таким образом время поступления сигнала. При этом в регистре TxCSi устанавливается значение признака CHiF=1, которое вызывает формирование запроса прерывания, если значение бита разрешения прерывания CHiIE=1. Вид сигнала, фиксируемого в режиме захвата, определяется значением битов ELSiB-A (см. табл.23) – положительный или отрицательный перепад потенциала на входе TxCHi, либо любое изменение состояния этого входа. Последующее считывание содержимого регистра TxCHi позволяет определить время поступления сигнала на вход TxCHi.

В режиме совпадения (значения битов MSiB-A=01) в регистр данных TxCHi соответствующего канала предварительно записывается код Kc, задающий время срабатывания. Когда содержимое счетчика TxCNT становится равным этому коду, на выход TxCHi соответствующего канала выдается сигнал совпадения, и в регистре TxSCi устанавливается значение признака CHiF=1. Вид выходного сигнала, выдаваемого в режиме совпадения, определяется значением битов ELSiB-A (см. табл.23) – установка уровня 0 или 1 на выходе TxCHi, либо изменение состояния этого выхода на противоположное. Установка признака CHiF=1 вызывает формирование запроса прерывания таймера, если значение бита разрешения прерывания CHiIE =1.

При работе канала в режиме совпадения возможен пропуск момента совпадения, когда происходит изменение (перезагрузка) содержимого регистра TxCHi, определяющего момент формирования выходного сигнала. Если загружаемый в TxCHi код Kc оказывается меньше, чем текущее содержимое счетчика TxCNT в момент загрузки, то совпадение будет зафиксировано только в следующем цикле работы счетчика (после переполнения и сброса в нулевое состояние). Таким образом в течении текущего цикла работы счетчика на выход TxCHi не будет выдан сигнал совпадения.

В режиме совпадения таймерный модуль обеспечивает формирование сигналов с широтно-импульсной модуляцией (ШИМ) на выходе TxCHi, если при переполнении счетчика TxCNT реализовать изменение состояния этого выхода на противоположное с помощью соответствующей подпрограммы обработки прерывания. В этом случае на выходе TxCHi будут формироваться импульсы длительностью Tp = Kc/Fc с периодом Tc = Mc/Fc. Таким образом для формируемых ШИМ-сигналов обеспечивается коэффициент заполнения

Q = Tp/Tc = Kc/Mc,

где Kc и Mc – содержимое регистров TxCHi и TxMOD. При изменении коэффициента заполнения ШИМ-сигналов путем загрузки в регистр TxCHi нового значения Kc возможен пропуск одного импульса, если загрузка производится в момент, когда содержимое счетчика TxCNT больше, чем загружаемое значение Kc.

Таким образом при изменении значения Kc в режиме совпадения возможен пропуск пропуск момента совпадения или потеря импульса при формировании ШИМ-сигналов. Исключить такие ошибки можно путем реализации режима совпадения с буферизацией.

Режим совпадения с буферизацией обеспечивается при установке в регистре TxSCi значения бита MSiB=1 (табл.23). Для реализации этого режима используются регистры данных двух таймерных каналов, поэтому каналы 0-1 попарно объединяются. Канал с номером 0 работает в режиме совпадения с буферизацией, используя регистр данных канала с нечетным номером в качестве буфера для загрузки нового кода Kc. Регистр TxSC0 канала с номером 0 задает режим его работы. Для выдачи сигналов совпадения или ШИМ-сигналов в этом режиме используется выход TxCH0. Канал с номером 1 переводится в нерабочее состояние путем установки в его регистре TxCH1 значения битов ELSiB-A=00 (соответствующий вывод может использоваться параллельным портом).

При работе канала в этом режиме значения кода совпадения Kc могут быть записаны в любой из регистров TxCHi данной пары. В начале каждого цикла работы счетчика (после его сброса в 0) выбирается тот из регистров данной пары, в который производилась более поздняя запись, и его содержимое используется в качестве значения кода совпадения в текущем цикле. Для последующей смены значения Kc соответствующий код должен быть записан в другой регистр TxCHi данной пары. Тогда в следующем цикле работы счетчика TxCNT из этого регистра будет выбрано новое значение кода сравнения Kc. Таким образом путем поочередной записи новых значений Kc в один или другой регистр TxCHi данной пары можно производить изменения времени выдачи сигнала совпадения на выход четного канала. Эти сигналы будут формироваться в каждом цикле работы счетчика, то-есть исключается воможность пропуска момента совпадения, которая имелась при работе канала в обычном режиме совпадения (без буферизации).

В режиме совпадения с буферизацией можно обеспечить формирование ШИМ-сигналов на выходе канала с номером 0, реализуя изменение состояния выхода на противоположное при очередном переполнении счетчика (как и обычном режиме совпадения). При этом регистры TxCHi пары каналов используются для записи кода Kc, определяющего коэффициент заполнения ШИМ-сигналов, формируемых на выходе канала 0 данной пары. В каждом цикле работы счетчика TxCNT канал 0 выбирает значение Kc из того регистра TxCHi пары, в который производилась последняя запись. При этом другой регистр пары может использоваться для загрузки нового значения Kc, которое будет определять коэффициент заполнения в следующем цикле работы счетчика. Таким образом при формировании ШИМ-сигналов с буферизацией на выходе канала TxCH0 будет формироваться импульс в каждом цикле работы счетчика, то-есть исключается возможность пропуска выходного импульса при изменении коэффициента заполнения путем загрузки нового значения Kc.

Отметим, что при формировании ШИМ-сигналов (с буферизацией или без нее) можно обеспечить выдачу на выход канала сигнала с максимальным коэффицентом заполнения Q=1, если установить в регистре TxSCi данного канала значение бита CHiMAX=1 (см. рис.25,б). Формирование сигнала на выходе TxCHi для этого случая показано на рис. 26. При установке бита CHiMAX=1 выход TxCHi устанавливается в 1 в следующем цикле работы счетчика (после его сброса в 0 при переполнении) и сохраняет это значение, пока в каком либо из последующих циклов в регистр TxSCi не будет записано значение CHiMAX=0. После этого, начиная со следющего цикла работы счетчика, будет продолжено формирование ШИМ-сигналов с заданным значением коффициента Q на выходе TxCHi.

Рис. 26. Формирование ШИМ-сигналов с максимальным коэффициентом заполнения Q=1 при установке значения бита CHiMAX=1

Модуль базового таймера TBM08, который входит в состав микроконтроллеров серии GP, выполняет периодическое формирование запросов прерывания. Модуль TBM08 содержит 15-разрядный базовый счетчик, который переключается с частотой Fq, задаваемой кварцевым резонатором. Таймер работает под управлением регистра TBCR (адрес $001C), биты которого имеют следующее назначение (рис. 27):

TBIF – признак переполнения базового счетчика (доступен только для чтения), принимает значение TBIF=1, если содержимое счетчика достигает максимального значения, задаваемого битами TBR2-0;

TBR2-0 – задают коэффициент деления частоты Kd, определяющий момент переполнения базового счетчика (см. табл. 22);

TASK – подтверждает получение процессором запроса на прерывание при переполнении базового счетчика (доступен только для записи), при записи значения TASK=1 производится сброс признака переполнения в состояние TBIF=0;

TBIE – разрешает при значении TBOIE=1 формирование запроса прерывания при переполнении счетчика (признак TBIF=1);

TBON – разрешает при установке значения TBON=1 работу базового таймера; при установке значения TBON=0 таймер выключается, и базовый счетчик сбрасывается в нулевое состояние.

При запуске микроконтроллера все биты в регистре TBCR принимают значение 0.

7

6

5

4

3

2

1

0

TBIF

TBR2

TBR1

TBR0

TASK

TBIE

TBON

0

Рис.27. Формат содержимого регистра управления-состояния TBCR модуля TBM08

Модуль TBM08 формирует запросы прерывания при переполнении базового счетчика (установке признак TBIF=1), если в регистре TBCR установлено значение бита TBIE=1. Таким образом реализуются прерывания с периодом Ti = Kd/Fq, при которых обеспечивается обращение к вектору прерывания, расположенному по адресу $FFDC-DD (см. табл.10). Обработчик прерывания должен подтвердить обслуживание очередного запроса путем установки в регистре TBCR значения бита TASK=1. При этом производится сброс в 0 значения признака TBIF.

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

В режиме останова этот модуль также продолжает функционировать, если разрешена работа генератора CGM08 путем установки значения бита OSCSTOPENB=1 в регистре конфигурации CONFIG2 (см. рис.17,б в разделе 8). Таким образом при переполнении базового счетчика будет формироваться запрос прерывания, который обеспечит переход микроконтроллера в рабочий режим, если в регистре TBCR установлено значение бита TBIE=1.