Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Управление таймером через порты ввода-вывода
Для своих нужд программы могут использовать канал 2 (если им не нужен динамик) и канал 4 (если присутствует второй таймер). При необходимости можно перепрограммировать и канал 0, но затем надо будет вернуть его в исходное состояние, чтобы BIOS и DOS могли продолжать работу.
В пространстве портов ввода-вывода для таймера выделена область от 40h до 5Fh: порт 40h — канал 0 (генерирует IRQ0) порт 41h — канал 1 (поддерживает обновление памяти) порт 42h — канал 2 (управляет динамиком) порт 43h — управляющий регистр первого таймера порты 44h – 47h — второй таймер компьютеров с шиной MicroChannel порты 48h – 4Bh — второй таймер компьютеров с шиной EISA Управление таймером осуществляется путем вывода байта в управляющий порт(43h для первого таймера).
Назначение бит в этом байте:
Для того чтобы запрограммировать таймер в режиме 3, в котором работают каналы 0 и 2 по умолчанию и который чаще всего применяют в программах, требуется выполнить следующие действия: 1. Вывести в регистр 43h команду (для канала 2) 10110110h, то есть установить режим 3 для канала 2, и при чтении/записи будет пересылаться сначала младшее слово, а потом старшее. 2. Послать младший байт начального значения счетчика в порт выбранного канала (42h для канала 2). 3. Послать старший байт начального значения счетчика в этот же порт.
Например:
mov al, 0B6h ; B6h = 10110110b (10 11 011 0 – канал 2, запись 2 байт, режим 3, двоичное число) out 43h, al ; Вывести команду в порт 43h mov al, 0FFh ; Задать в al значение FFh (впрочем, можно задать любое другое) out 42h, al ; Вывести в порт 42h (канал 2) младший байт, равный FFh out 42h, al ; Вывести в порт 42h (канал 2) старший байт, равный FFh (итого FFFFh)
После этого таймер немедленно начнет уменьшать введенное число от начального значения к нулю со скоростью 1 193 180 раз в секунду (четверть скорости процессора 8088). Каждый раз, когда это число достигает нуля, оно снова возвращается к начальному значению. Кроме того, при достижении счетчиком нуля канал 0 вызывает прерывание IRQO, а канал 2, если включен динамик, посылает ему начало следующей прямоугольной волны, заставляя его работать на установленной частоте. Начальное значение счетчика для канала 0 по умолчанию составляет 0FFFFh (65 535), то есть максимально возможное. Поэтому точная частота вызова прерывания IRQ0 равна 1 193 180/65 536 = 18,20648 раза в секунду.
Если биты 7 – 6 равны 11, считается, что байт, посылаемый в порт 43h, — команда чтения счетчиков. Её формат отличается от команды программирования канала:
Если этой командой запрашивается состояние каналов, новые команды будут игнорироваться, пока не прочтется состояние из всех каналов, которые были заказаны битами 3 – 1. Состояние и значение счетчика данного канала получают чтением из порта, соответствующего требуемому каналу.
Формат байта состояния имеет следующий вид: бит 7: состояние входа OUTx на момент выполнения команды чтения счетчиков. Так как в режиме 3 счетчик уменьшается на 2 за каждый цикл, состояние этого бита, замороженное командой фиксации текущего значения счетчика, укажет, в каком полуцикле находился таймер бит 6: 1/0 — состояние счетчика не загружено/загружено (используется в режимах 1 и 5, а также после команды фиксации текущего значения) биты 5 – 0: совпадают с битами 5 – 0 последней команды, посланной в порт 43h
Чтобы прочитать текущее значение счетчика, надо: 1. Послать в порт 43h команду фиксации значения счетчика для выбранного канала (биты 5 – 4 равны 00h). 2. Послать в порт 43h команду перепрограммирования канала без изменения режима его работы, если нужно изменить способ чтения/записи (обычно не требуется). 3. Прочитать из порта, соответствующего выбранному каналу, младший байт фиксированного значения счетчика. 4. Прочитать из того же порта старший байт.
Дата добавления: 2015-07-26; просмотров: 182; Нарушение авторских прав Мы поможем в написании ваших работ! |