Каковы этапы разработки многомодульной программы на языке ассемблера?
Опишите структуру модуля на языке ассемблера.
Перечислите параметры и назначение директивы SEGMENT.
Программирование микропроцессорных устройств 10. Программирование системного таймера
Управление периферийными устройствами требует от микропроцессорной системы точного задания временных интервалов между управляющими сигналами. Сделать это программно зачастую невозможно из-за сложного временного расписания обмена данными внутри системы. Поэтому такие задачи поручают программируемым таймерам-счетчикам. С помощью таймера можно формировать временные интервалы произвольной длительности, производить синхронизацию внешних устройств, организовывать счетчики событий, вести счет текущего времени.
Таймеры-счетчики на основе микросхем Intel 8253 и 8254 широко распространены, и их различные модификации можно встретить во многих цифровых устройствах. Например, любой IBM PC совместимый компьютер содержит такой таймер. Отечественными аналогами таймеров являются микросхемы К1810ВИ53 и К1810ВИ54.
10.1. Описание таймера-счетчика 8254
Структурная схема таймера приведена на рис. 30. Он состоит из трех независимых программируемых канала. На схеме показан только первый канал, остальные два являются идентичными. Блок логики чтения-записи управляет обменом данными между тремя счетчиками и шиной данных.
Рис. 30. Структурная схема таймера-счетчика 8253(4).
Назначение выводов микросхемы приведено в табл. 77.
Табл. 77. Назначение выводов.
Вывод
|
Описание
|
D0…D7
|
Двунаправленная шина данных.
|
/WR
|
Write (запись). По низкому уровню на входе микропроцессор записывает данные в таймер
|
/RD
|
Read (чтение). Низкий уровень на входе информирует таймер, что процессор запрашивает чтение состояния счетчика.
|
/CS
|
Chip Select (выбор микросхемы). Низкий уровень инициирует обмен между процессором и таймером. Не оказывает воздействия на работу счетчиков таймера
|
A0, A1
|
Адресные входы. Позволяют выбрать один из трех счетчиков для операции чтения/записи состояния счетчиков.
|
CLK0...CLK2
|
Тактовые входы каждого из трех счетчиков.
|
GATE0…GATE2
|
Входы разрешения счетчиков.
Уровень "1" - разрешение счета.
|
OUT0…OUT2
|
Выходы счетчиков.
|
Каждый канал включает схемы управления, синхронизации и регистры:
регистр счетчика, работающий на вычитание (16 разрядов);
регистр делителя (16 разрядов).
буферный регистр (16 разрядов);
регистр состояния канала (8 разрядов);
управляющий регистр (8 разрядов);
Каналы подключаются к внешним устройствам при помощи трех линий:
управляющего входа GATE;
входа тактовой частоты CLK;
выхода таймера OUT.
В управляющий регистр записывается слово, определяющее режим работы канала. Схема управления синхронизирует работу отдельных схем в соответствии с запрограммированным режимом работы. Схема синхронизации формирует серию внутренних импульсов с длительностью, определяемой внутренними времязадающими цепями, и периодом, равным периоду внешних тактовых импульсов.
Загрузка регистра счетчика выполняется путем помещения значения делителя в регистр делителя. Делитель помещается в два этапа: сначала записывается младший байт данных (Least Significant Byte, LSB), а затем старший байт данных (Most Significant Byte, MSB). В начале цикла работы канала константа счета из регистра хранения переписывается в счетчик, и затем по тактовым импульсам на входе CLK происходит декремент содержимого счетчика.
Буферный регистр (регистр задвижки) позволяет получить текущее значение регистра счетчика в любой момент времени. Низкий логический уровень сигнала на входе GATE отключает канал от входных импульсов CLK, а высокий – вновь подключает. Поэтому управляющий вход GATE можно использовать для синхронизации момента начала отсчета.
В микропроцессорных системах, построенных на основе архитектуре IBM PC, микросхема таймера принимает импульсы от генератора с опорной частотой 1.19 МГц. Программируемый коэффициент деления таймера может изменяться от 2 до 65535. Следовательно, диапазон возможных выходных частот находится в пределах от 18.2 Гц до 600 кГц.
Назначение каналов следующее:
канал 0 используется счетчиком времени суток;
канал 1 управляет обновлением памяти: выходная линия канала связана с микросхемой прямого доступа к памяти, и ее импульс заставляет контроллер DMA обновить содержимое памяти;
канал 2 связан с динамиком; он производит прямоугольные импульсы для генерации звука.
Выход первого из делителей используется для отсчета времени (канал 0), причем его выход, в свою очередь, связан с контроллером прерываний. Прерывание по таймеру возникает, когда внутренний двухбайтовый счетчик таймера обнулится. Первоначально он содержит значение 65535, т.е. установлен максимально возможный коэффициент делителя. При получении очередного импульса его значение уменьшается на 1. Поэтому период следования импульсов составляет 0,055 сек., а частота равна 18.2 Гц.
Для накопления количества импульсов таймера используется переменная BIOS (базовая система ввода-вывода), расположенная по адресу 0000:046Ch. Она представляет 4-байтный счетчик импульсов. Каждый импульс инициирует прерывание таймера BIOS номер 8, которое увеличивает на единицу значение переменной (рис. 31). Прерывание является аппаратным, поэтому оно обрабатывается всегда независимо от загруженности процессора.
Рис. 31. Изменение счетчика времени суток BIOS.
Do'stlaringiz bilan baham: |