![]() |
|
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.
Выбор источника синхронизации счетчика 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), пользователь задает направление счета:
Если первый бит IOC2.1 очищен, счетчик 2 всегда функционирует как счетчик прямого действия. Если бит IOC2.1 установлен и на управляющем выводе T2UP_DN низкий уровень сигнала, счетчик 2 запрограммирован в прямом направлении счета. Если бит IOC2.1 установлен, а уровень сигнала на выводе T2UP_DN высокий, то счетчик 2 работает как счетчик обратного действия (вычитающий). Когда счетчик 2 запрограммирован как датчик времени для HSO модуля, не изменяйте направление счета, поскольку HSO события могут произойти в неправильном порядке! Выбор способа сброса счетчика 2Счетчик 2 имеет цепь сброса. Сброс может быть аппаратный и программный. В качестве сигнала сброса счетчика 2 могут использоваться:
Модуль HSO может сбрасывать этот счетчик, выполняя команду сброса счетчика 2 (CMD_TAG=0EH). Этот способ сброса особенно полезен при использовании HSO модуля для генерации широтно-импульсных выходных сигналов. Прерывания счетчиковСо счетчиками 1 и 2 связаны три вектора прерывания:
Регистр состояния 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
Предосторожности при работе со счетчикамиПри использовании счетчиков как датчиков времени для модулей 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еполнения счетчика (тестирование бита) ******************************************************************** |