MОДУЛЬ БЫСТРОГО ВЫВОДА

Модуль быстрого вывода (HSO) формирует и выдает выходные события в определенное время с использованием счетчика 1 или 2 как базового. На рисунке 6.3 показана блок-схема модуля HSO.

Рис. 6.3. Структурная схема модуля HSO

В состав модуля HSO входят регистры специальных функций HSO_COMMAND, HSO_TIME, IOS0, IOS2, разряды 6 и 7 регистра IOC2 и разряды 0-3 регистра IOS1, мультиплексор (K), компаратор, контроллер и ассоциативное запоминающее устройство (CONTENT_ADDRESSABLE MEMORY - CAM), содержащее 8 24-разрядных ячеек, и входной регистр (Holding Registr).

Файл CAM - основной компонент модуля HSO. Этот файл сохраняет до 8 команд. Каждая строка в файле САМ содержит 24 бита. 16 битов, определяющих время формирования события, загружаются из регистра HSO_TIME, и 8 битов - из регистра HSO_COMMAND, в котором заданы тип события, генерируется ли прерывание и какой из счетчиков, 1-й или 2-й, является базовым.

Все ячейки CAM последовательно, с периодом 16Tcr переводятся в активное состояние на время 2Tcr. HSO сравнивает с помощью компаратора все восемь записей в файле САМ со значением базового счетчика, выбранного мультиплексором. Когда значение базового счетчика совпадает с запрограммированным значением времени, контроллер модуля HSO выполняет заданное в строке действие.

Внешние события выдаются на выводы HSO0-HSO5. Внутренние выходные события представляют собой сигналы запуска АЦП (ADC Start), сброса счетчика 2 (T2RST) и сигналы срабатывания до 4 программных временных задержек (SWT0-SWT3). Все эти события устанавливают флаги, которые могут генерировать определенные прерывания. Внешние события вырабатывают прерывание High Speed Output (INT03); внутренние - прерывание Software Timer (INT05).

Четыре программных счетчика имеют возможность вырабатывать прерывания в заранее заданное время, при этом модуль HSO устанавливает флаги SWTF0-SWTF3 в 0-3 разряды регистра IOS1. В общем случае программные счетчики используются для вызова подпрограмм обслуживания прерывания, которые должны повторяться с определенными интервалами. Если больше одного программного счетчика срабатывает в пределах одного временного фрагмента, устанавливается несколько разрядов в регистре состояния. Подпрограмма обслуживания прерывания может проверить регистр IOS1, чтобы определить, какой программный счетчик (или счетчики) вызвал прерывание.

Программирование модуля

Таблица 6.6 показывает регистры, которые влияют на работу и на функции мо-дуля HSO.

Таблица 6.6

Мнемоника регистраИмя регистраОписание
123
HSO_COMMANDHSO CommandОпределяет тип события или событий, которые произойдут в модуле HSO в определенное время
HSO_TIMEHSO TimeОпределяет время, в которое HSO команда будет выполнена.
IOC1IOC1 Input/Output Control Register 1Разрешает или запрещает функции выводов HSO.4 и HSO.5.
IOC2IOC2 Input/Output Control Register 2Разрешает и запрещает команды чтения файла HSO CAM, может также очистить HSO CAM.
IOS0IOS0 Input/Output Status Register 0Показывает текущее состояние выводов HSO, входного регистра и файла САМ; запись в биты может устанавливать или очищать соответствующие выводы HSO.
IOS1IOS 1 Input/Output Status Register 1Содержит флаги, которые показывают, какие внутренние события вызваны прерыванием.
IOS2IOS 2 Input/Output Status Register 2Содержит флаги, которые показывают, какие внешние события HSO имели место.

Содержимое регистров HSO_TIME и HSO_COMMAND вместе описывают каждое событие HSO. Регистр HSO_TIME определяет время выполнения команды HSO.

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

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

Находится по адресу 05/04H

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

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

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

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

Находится по адресу 06H

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

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

Биты 0-3 регистра HSO_COMMAND содержат команду, которая определяет, какое событие (или события) HSO будет вызвано в определенное время. Таблица 6.7 описывает коды команд HSO.

Бит 4 (HSOINT_ENA) определяет, будет ли событие вызывать прерывание: 0 - нет прерывания.

Бит 5 (PIN_CMD) определяет, выполняет ли команда CMD_TAG установку или очистку соответствующего вывода (выводов):
1- установить единичное значение сигнала;
0- очистить.

Бит 6 (TIMER_SEL) выбирает базовый счетчик для команд HSO:
1 - выбран счетчик 2;
0 - выбран счетчик 1.

Бит 7, когда разряд IOC2.6 установлен, управляет сохранением команд в САМ или удалением после выполнения:
1 - сохранить команду в CAM;
0 - очистить команду из CAM после выполнения.

Записывая "1" в разряд IOC2.7, удаляем все строки в CAM, как при сбросе МК.

Таблица 6.7

CMD_TAG (в h-кодировке)Мнемоника командОписание
00HSO 0Включить High-Speed Output 0.
01HSO 1Включить High-Speed Output 1.
02HSO 2Включить High-Speed Output 2.
03HSO 3Включить High-Speed Output 3.
04HSO 4Включить High-Speed Output 4.
05HSO 5Включить High-Speed Output 5.
06HSO 01Включить High-Speed Output 0 и 1.
07HSO 23Включить High-Speed Output 2 и 3.
08SWT 0Программирование программного таймера 0.
09SWT 1Программирование программного таймера 1.
0ASWT 2Программирование программного таймера 2.
0BSWT 3Программирование программного таймера 3.
0CHSOALL*Включение High-Speed Output 0,1,2,3,4,5.
0D-Резерв; не используется.
0ET2RSTСброс счетчика 2.
0FA_DЗапуск АЦП

* В этой конфигурации два (или более) вывода устанавливаются или очищаются одновременно.

Примечания: 1. Перед программированием регистров HSO_COMMAND и HSO_TIME необходимо прочитать или IOS0.7, или IOS0.6, чтобы убедиться, что входной регистр HSO пустой. Если IOS0.7 очищен, то входной регистр пуст. Если IOS0.6 очищен, то входной регистр пуст и, по крайней мере, один регистр САМ пуст. Запись в HSO_TIME, когда входной регистр не пустой, вызывает потерю предыдущего значения входного регистра.

Для того, чтобы ввести команду в файл САМ, первым записывается регистр HSO_COMMAND, чтобы описать событие, и затем записывается регистр HSO_TIME, чтобы определить время, когда произойдет событие. При записи в регистр HSO_TIME загружается значение входного регистра HSO. Команда сохраняется во входном регистре до тех пор, пока невозможна запись в файл САМ, при освобождении строки CAM команда переписывается в файл. Может потребоваться 8 временных состояний для перемещения команды из входного регистра в файл САМ. Таким образом, всегда необходимо иметь по крайней мере 8 временных состояний между последовательными записями в регистры HSO_COMMAND и HSO_TIME. В противном случае команда во входном регистре может быть потеряна.

2. Команда во входном регистре не будет выполняться, даже если ee время подошло. Команды для их выполнения должны находиться в файле САМ.

Слово в HSO_TIME может быть или заданным значением счетчика, или величиной смещения относительно текущего значения счетчика. Используйте стандартные команды загрузки, чтобы запрограммировать определенное время, и трехоперандную команду АDD, чтобы определить значение, которое является смещением относительно текущего значения счетчика.

LDB HSO_COMMAND, #what_to_do ; Пересылает команду

ADD HSO_TIME,TIMER1, #when_to_do_it ; Добавляет ADD_3op

Для обеспечения правильной синхронизации минимальное время, которое может быть загружено в счетчик, должно быть равно current_time_value+2. Меньшее значение может быть причиной того, что событие осуществится на 65536 тактов позже, чем требуется. Это ограничение касается обоих счетчиков.

Внимательно программируйте регистры HSO_COMMAND и HSO_TIME. Прерывание может осуществляться после записи команд в HSO_COMMAND и перед записью значения времени в HSO_TIME. Если подпрограмма обработки прерывания также использует эти регистры, команда основной программы в файле САМ перекрывается, поэтому команда основной программы никогда не выполнится. Запрещение прерываний перед записью в модуль HSO решает эту проблему.

Разрешение прерываний

Установка бита HSOINT_ENA (HSO_COMMAND.4) разрешает событию HSO генерировать прерывание. Модуль HSO может генерировать два различных прерывания:
- прерывание Нigh-Speed Output (INT03);
- прерывание Software Timer (INT05).

Внешние события вызывают прерывание High-Speed Output, если оно разрешено (INT_MASK.3 установлен). Биты состояний IOS2.0-IOS2.5 связаны с прерыванием High-Speed Output. Биты состояний IOS1.0-IOS1.3 используются с прерыванием Software Timer для команд программных таймеров, а IOS2.6-IOS2.7 - для сброса счетчика 2 и старта A/D преобразователя соответственно.

Когда прерывание произошло, необходимо считать биты в регистрах состояния IOS1 и IOS2, чтобы определить, какое событие вызвало прерывание. Чтение регистра IOS1 очищает биты 0-5; чтение регистра IOS2 очищает все биты. По этой причине рекомендуется копировать содержимое регистров в рабочие регистры и затем выполнять команды тестирования битов, такие как JBC или JBS, с рабочими регистрами.

Сохранение записей в файле CAM

Бит LOCK_ENA в регистре IOC2 (IOC2.6) разрешает или запрещает сохранение строки с командой. Когда этот бит установлен, бит CAM_LOCK (HSO_COMMAND.7) управляет либо сохранением команд в файле CAM (единичное значение), либо их удалением после выполнения (запись "0").

Сохранение команд обеспечивает возможность программирования периодических или повторяющихся событий. Одним из наиболее полезных применений является использование сохранения команд для генерации повторяющихся импульсов с задаваемой длительностью (PWM) с минимумом программных затрат. Сохранение команды A/D преобразования вызывает многократное выполнение A/D преобразования. Когда счетчик 2 используется как базовый в HSO, сохранение команды T2RST может вырабатывать периодические события; события со значением HSO_TIME меньшим, чем значение времени, при котором значение счетчика 2 сбрасывается, осуществляются повторно с каждым новым сбросом счетчика 2. Сохранение команд программного счетчика может организовать повторяющийся вызов программных задач; подпрограммы обслуживания прерывания могут выполнять задачи без использования других команд программного счетчика модуля HSO.

Удаление команды из файла CAM

Три события могут удалить команду из файла CAM:
- равенство значения базового счетчика запрограммированному времени (если не запрограммировано сохранение события);
- сброс модуля HSO;
- установка бита CAM_CLR (IOC2.7).

Чтобы удалить сохраненные события, установите бит CAM_CLR в регистре IOC2 или сбросьте устройство. Любое из этих действий очистит весь файл CAM.

Отмена события

Вы можете отменить внешнее событие, записав противоположное событие с тем же временем в CAM. Например, если команда устанавливает HSO.1, когда TIMER1=1234, то следует записать команду, которая очищает HSO.1, когда TIMER1=1234, тогда HSO.1 не изменится. Однако обе команды остаются в CAM до тех пор, пока или TIMER1 не будет равен 1234 (если сохранение незапрограммировано), или устройство не будет сброшено, или не будет установлен бит CAM_CLR в регистре IOC2.

Вы можете отменить внутреннее событие только установкой бита CAM_CLR (IOC2.7) или сбросом устройства.

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