VI. БЛОК БЫСТРОГО ВВОДА/ВЫВОДА МК 8ХC196КС/КD

Краткая характеристика блока HSIO

В состав блока быстрого ввода/вывода МК 8XC196KC/КD входят регистры специальных функций TIMER1, TIMER2, T2CAPT и два модуля - HSI и HSO (см. рис. 6.1).

Рис. 6.1. Схема блока быстрого ввода/вывода

Для управления работой блока HSIO используются регистры управления IOC0, IOC1, IOC2, IOC3, а для отображения состояния - регистры состояния IOS0, IOS1, IOS2.

Прием входных событий осуществляется через выводы МК HSI0 и HSI1, выдача выходных событий - через выводы HSOx (где х=0,1,2,3). Выводы HSI2/HSO4 и HSI3/HSO5 могут использоваться как для приема событий (при IOC1.4=0 и IOC1.6=0 соответственно), так и для выдачи событий (при IOC1.4=1 и IOC1.6=1 соответственно). Прием единичных событий производится через вывод P2.7/T2CAPT.

Выводы P2.3/T2CLK, P2.4/T2RST и P2.6/T2UPDN предназначены для приема внешних управляющих сигналов.

Краткая характеристика счетчиков

Первый счетчик - стандартный автономный 16-разрядный счетчик циклического типа, его значение инкрементируется каждые восемь временных состояний. (Напомним, что при частоте тактового генератора 8 МГц одно временное состояние составляет 250 нс). Он не имеет цепи сброса. При переполнении счетчика формируется высокий уровень сигнала на выходе T1OV и устанавливается единичное значение разряда регистра состояния IOS1.5. Первый счетчик всегда используется как временная основа модуля быстрого ввода (High-Speed Input, HSI) и также может выбираться как датчик времени для модуля быстрого вывода (High-Speed Output, HSO). Два байта регистра TIMER1 содержат значения счетчика 1. Вы можете инициализировать первый счетчик значением, отличным от нуля, записывая его в регистр TIMER1 в HWindow 15. Если Вы изменяете значение TIMER1 после инициализации HSI модуля, Вы можете нарушить относительные времена между HSI событиями. Кроме того, изменение значения TIMER1 после инициализации HSO модуля с первым счетчиком в качестве датчика времени может вызвать пропуск команд HSO.

Второй программируемый 16-разрядный счетчик может вести счет как на сложение (+1) так и на вычитание (-1), при этом ведется счет положительных и отрицательных перепадов сигнала на счетном входе, поэтому частота счета в два раза больше частоты сигнала, поступающего на его счетный вход. Он используется как временная основа блока быстрого вывода.

Счетчик 2 может синхронизироваться как внутренним сигналом с частотой F/4 или F/32, так и внешним, поступающим на входы T2CLK или HSI.1 (программируется в регистрах управления IOC0, IOC2 и IOC3).

Аббревиатура - TIMER1

Размер - 2 байта

Находится по адресу 0B/0AH

Использовать для записи в окне HWindow 15

Использовать для чтения в окне HWindow 0

Максимальная скорость счета второго счетчика - каждое временное состояние (быстрый режим приращения) или каждые восемь временных состояний (нормальный режим).

Два байта регистра TIMER2 содержат значение счетчика 2. Вы можете инициализировать счетчик 2 значением, отличным от нуля, записывая его в регистр TIMER2 в HWindow 0. При использовании второго счетчика как датчика времени для HSO изменение значения TIMER2 после инициализации HSO модуля может заставить HSO пропускать команды.

Аббревиатура - TIMER2

Размер - 2 байта

Находится по адресу 0D/0CH

Использовать для записи/чтения в окне HWindow 0

Программирование счетчика 2

Служебные регистры

В таблице 6.1 приведены регистры, программирование которых воздействует на работу и функции счетчика 2.

TIMER2Регистр счетчика 2. Содержит значение счетчика 2.
T2CAPTUREРегистр захвата счетчика 2. При изменении уровня сигнала на входе P2.7 с низкого на высокий и сохранении высокого уровня в течение одного временного состояния (единичное событие) значение счетчика 2 записывается в этот регистр и генерируется прерывание счетчика - Capture Interrupt (INT11).
INT_MASK1Регистр маскирования прерываний. Устанавливая соответствующий бит в регистре, программист разрешает или, записывая нуль, запрещает прерывания счетчика 2.
IOC0Регистр управления 0. Задает внешние источники синхронизации и сброса для счетчика 2.
IOC1Регистр управления 1. Выбирает источник генерирования прерывания для прерывания "Переполнение счетчика" - Timer Overflow Interrupt (INT07).
IOC2Регистр управления 2. Разрешает или запрещает режим быстрого инкремента (приращения), суммирующую/вычитающую функцию счетчика и границу переполнения для генерирования прерывания счетчика 2 - Overflow Interrupt (INT12).
IOC3Регистр управления 3. Выбирает внутренний или внешний источник синхронизации счетчика 2.

Выбор источника синхронизации счетчика 2

Источник синхронизации счетчика 2 выбирается при программировании регистра управления IOC3 (см. Приложение). Записывая "1" в нулевой разряд регистра IOC3, программист включает внутренний источник синхронизации, "0" - внешний.

Если для счетчика выбран источник внешней синхронизации, то, программируя 7-й бит (T2CLK_SRC) в регистре управления IOC0 (см. Приложение), программист задает вывод, который будет использоваться в качестве внешнего источника синхронизации: при IOC0.7=0 счетный вход T2CLK (P2.3), а при IOC0.7=1 - HSI.1.

И в том, и в другом случае, программируя регистр IOC2 (см. Приложение), можно задать максимальную частоту счета. Когда нулевой бит (FAST_T2_ENA) IOC2 установлен (быстрый режим приращения, частота внутренней синхронизации F/4), значение счетчика инкрементируется каждое временное состояние.

Когда бит FAST_T2_ENA очищен (нормальный режим, частота внутренней синхронизации F/32), значение счетчика 2 увеличивается на единицу каждые восемь временных состояний.

Если счетчик 2 выбран как временная основа для HSO модуля, используют нормальный режим, т.е. в качестве сигнала, поступающего на счетный вход, должен использоваться сигнал с частотой F/32 и направление счета должно сохраняться неизменным. Все ячейки ассоциативного запоминающего устройства (CAM) модуля HSO последовательно, с периодом 16Тosc, переводятся в активное состояние на время, равное 2Тosc (производится сканирование всех CAM записей). Если счетчик 2 используется в быстром режиме приращения, HSO события могут быть пропущены.

Установка направления счета

Программируя первый бит регистра управления IOC2 (см. Приложение) (T2UD_ENA), пользователь задает направление счета:
- прямое (на инкремент);
- или прямое (на инкремент), или обратное (на декремент) в зависимости от логического уровня сигнала на выводе T2UP-DN(P2.6).

Если первый бит IOC2.1 очищен, счетчик 2 всегда функционирует как счетчик прямого действия. Если бит IOC2.1 установлен и на управляющем выводе T2UP_DN низкий уровень сигнала, счетчик 2 запрограммирован в прямом направлении счета. Если бит IOC2.1 установлен, а уровень сигнала на выводе T2UP_DN высокий, то счетчик 2 работает как счетчик обратного действия (вычитающий).

Когда счетчик 2 запрограммирован как датчик времени для HSO модуля, не изменяйте направление счета, поскольку HSO события могут произойти в неправильном порядке!

Выбор способа сброса счетчика 2

Счетчик 2 имеет цепь сброса. Сброс может быть аппаратный и программный. В качестве сигнала сброса счетчика 2 могут использоваться:
- внешний сигнал (положительный перепад), поступающий на вход T2RST(P2.4) (при нулевом значении бита IOCO.5);
- внешний сигнал (положительный перепад), поступающий на вход HSI.1 (при единичном значении бита IOCO.5), при этом должен быть установлен третий бит (T2RST_ENA) регистра управления IOC0, задающий внешний источник сброса;
- внутренний сигнал, формируемый при установке единичного значения первого бита (SW_T2RST) регистра управления IOC0;
- внутренний сигнал (внутреннее выходное событие), формируемое в модуле HSO.

Модуль HSO может сбрасывать этот счетчик, выполняя команду сброса счетчика 2 (CMD_TAG=0EH). Этот способ сброса особенно полезен при использовании HSO модуля для генерации широтно-импульсных выходных сигналов.

Прерывания счетчиков

Со счетчиками 1 и 2 связаны три вектора прерывания:
- прерывание переполнения счетчика - Timer Overflow Interrupt (INT00, 8000H);
- прерывание переполнения счетчика 2 - Timer2 Overflow Interrupt (INT12, 8038H);
- прерывание захвата счетчика 2 - Timer 2 Capture Interrupt (INT11, 8036H).

Регистр состояния IOS1 (см. Приложение) содержит флаги, которые указывают, какое событие вызвало прерывание. Чтение регистра IOS1 очищает биты 0-5. По этой причине рекомендуется копировать содержимое регистра IOS1 в промежуточный регистр и затем выполнять команды проверки разрядов типа JBC или JBS на промежуточном регистре.

Прерывание переполнения счетчиков

И счетчик 1, и счетчик 2 могут вызвать прерывание переполнения счетчика (INT00). Чтобы разрешить это прерывание, нужно установить нулевой бит в регистре маскирования прерываний INT_MASK (см. Приложение). А чтобы задать источник прерывания, надо установить или второй бит в регистре управления IOC1 (счетчик 1), или третий - IOC1.3 (счетчик 2). При переполнении счетчика аппаратно устанавливается флаг в соответствующем разряде регистра состояния IOS1. Переполнение счетчика 1 устанавливает пятый бит в регистре IOS1, а переполнение счетчика 2 устанавливает бит IOS1.4.

Прерывание переполнения счетчика 2

Счетчик 2 может генерировать прерывание переполнения счетчика 2 (INT12) вместо стандартного прерывания переполнения счетчика. Это прерывание разрешается записью "1" в четвертом разряде регистра маскирования INT_MASK1 (см. Приложение). При переполнении второго счетчика устанавливается бит IOS1.4. Счетчик 2 может генерировать прерывание переполнения на границе 7FFFH/8000H (вычитающий счет), или на границе 0FFFFH/0000H (суммирующий счет). Переполнение может происходить в любом направлении. Программируя бит IOC2.5, мы выбираем границу переполнения счетчика. Когда бит IOC2.5 установлен, счетчик 2 генерирует прерывание на границе 7FFFH/8000H, иначе - на границе 0FFFFH/0000H.

Прерывание захвата счетчика 2

Положительный переход на счетном входе T2CAPTURE (P2.7) заставляет значение счетчика 2 загружаться в регистр T2CAPTURE. Это событие генерирует прерывание захвата счетчика 2 (INT11), если высокий уровень сигнала на входе сохраняется в течение более двух временных состояний и если установлен бит INT_MASK1.3.

Аббревиатура -T2CAPTURE

Размер - 2 байта

Находится по адресу 0D/0CH

Использовать для записи/чтения в окне HWindow 15

В таблице 6.2 приведены разряды регистров управления, программирование которых задает соответствующие опции счетчика 2. Столбец 2 приводит результат установки единичного значения разряда, столбец 3 - результат записи нуля.

Таблица 6.2
Биты регистраБит = 1Бит = 0
IOC0.1Сброс счетчика 2 при каждой записиНет действия
IOC0.3Разрешает внешний сброс счетчика 2Запрещает внешний сброс счетчика 2
IOC0.5Выбирает в качестве внешнего источника сброса вывод HSI.0.0Выбирает в качестве внешнего источника сброса вывод T2RST (P2.4)
IOC0.7Выбирает в качестве внешнего источника синхронизации счетный вывод HSI.1Выбирает в качестве внешнего источника синхронизации счетный вывод T2CLK (P2.3)
ВключаетОтключает
IOC1.3счетчик 2 как источник генерирования прерывания "Переполнение cчетчика" (INT00)
IOC2.0Включает режим быстрого приращенияОтключает режим быстрого приращения
IOC2.1Включает вычитающий счетТолько суммирующий счет
IOC2.5Прерывание переполнения на границе 7FFFH/8000HПрерывание переполнения на границе 0FFFFH/0000H

Предосторожности при работе со счетчиками

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

Будьте осторожны при записи в регистры счетчиков TIMER1 и TIMER2.

Изменение значения TIMER1 после инициализации HSI модуля может разрушить относительные ссылки между HSI событиями. Кроме того, изменение значений соответствующих регистров таймеров (TIMER1 или TIMER2) после инициализации HSO модуля может заставить HSO пропускать запрограммированные события или выполнять их в неправильном порядке.

Конфигурируйте счетчик 2 для функционирования в нормальном режиме (не в быстром режиме приращения).

Так как для полного сканирования CAM HSO требуется восемь временных состояний, счетчик 2, когда он используется как датчик времени для HSO, должен функционировать в нормальном режиме приращения (не в быстром режиме приращения).

Очистите бит FAST_T2_ENA(IOC2.0) для выбора нормального режима работы счетчика.

Конфигурируйте счетчик 2 для счета только в одном направлении.

Счетчик 2, когда он используется как датчик времени для модуля HSO, должен считать только в одном направлении, поскольку, если счетчик колеблется вокруг отметки времени выполнения команды, блокировка входов может происходить несколько раз.

Очистите бит T2UD_ENA(IOC2.1), чтобы сконфигурировать счетчик 2 как суммирующий счетчик.

Будьте осторожны при сбросе счетчика 2.

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

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

Когда счетчик 2 сконфигурирован, чтобы сбрасываться внешним сигналом на счетном входе (IOC0.3=1), программные события не должны происходить, когда счетчик равен нулю. Если внешние источники - HSI.0 или T2RST (P2.3) сбрасывают счетчик 2, событие может не произойти. Внешние выводы сбрасывают счетчик 2 асинхронно, и счетчик может увеличиться до 1, прежде чем HSO сможет сравнить и распознать CAM запись. Программируйте события так, чтобы они происходили, когда счетчик 2 равен 1; это гарантирует, что HSO будет иметь достаточное время, чтобы распознать команду, записанную в CAM.

Фрагмент программы

;***Исследование пpoгpаммных задеpжек с использованием счетчика 1 ***

ldb WSR,#15 ; Пеpеключиться в HWindow 15

ld TIMER1,#0c000h; Загpузить значение счетчика в регистр TIMER1

ldb WSR,#0 ; Пеpеключиться в HWindow 0

jbc IOS1, 5, $ ; Ожидание пеpеполнения счетчика (тестирование бита)

********************************************************************

<<< Содержание >>>