Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 119 120 121 122 123 124 125  126 127 128 129 130 131 132 ... 198
         ропроцессором  80х86.  Таким образом,  важно выяснить сначала то,
         как мы можем программировать 8259A.
             Как  вся  аппаратура  персонального  компьютера,  контроллер
         8259A программируется посредством двух имен  команд  (регистров).
         Они  расположены в адресах 20h и 21h порта ввода/вывода соответс-
         твенно (рисунок 8-6). Регистр с адресом 21h используется исключи-
         тельно для маскирования прерываний.  Прерывание маскируется (т.е.
         не принимается) в том случае,  если бит,  соответствующий  своему
         IRQ  (считая справа налево,  причем самому правому биту присвоено
         значение IRQ0),  установлен в логическую единицу.  Порт по адресу
         20h  используется  для направления команды прерывания контроллеру
         8259A.  Как мы отметили ранее, в системах MS-DOS это делается за-
         писью 20h в этот порт.
                                      Прерывание к CPU ДДД¬
                                                          ¦
         Ъ Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д ДБД Д Д Д Д Д ¬
                        ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬ конец
         ¦    Порт 20h  ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦ прерывания   ¦
                        АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ EOI=20h
         ¦                             АДДДД 20h                       ¦
            8259A                                          IRQ
         ¦               ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬ 1=a.        ¦
                         ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 3.¦ 4.¦ 5.¦ 6.¦ 0=b.
         ¦               АДДДБДДДБДДДБДВДБДВДБДДДБДДДБДДДЩ             ¦
           Программируемый контроллер прерываний
         А Д Д Д Д Д Д Д Д Д Д Д Д Д Д † Д † Д Д Д Д Д Д Д Д Д Д Д Д Д Щ
                                       ¦   ¦         ¬ Последовательные
                                       ¦   АДДД COM2:¦ порты
                                       АДДДДДДД COM1:¦ персонального
                                                     Щ компьютера
               Рис.8-6. Программируемый контроллер прерываний 8259A

         a. - замаскировать прерывание; b. - разрешить прерывание;

                                      - 8-13 -

             В системах  MS-DOS  первому  последовательному  порту  (COM1)
         присвоен номер IRQ4 (прерывание номер 12),  в то время как второй
         (COM2) имеет IRQ3 (прерывание 11).  Как указывалось ранее,  порты
         COM3 и COM4 могут обрабатываться таким же  образом,  предполагая,
         что  известны номера IRQ,  присвоенные этим портам во время уста-
         новки (только порты COM1 и COM2 имеют заранее  присвоенные номера
         IRQ).  Поэтому,  контроллер 8259A может быть запрограммирован для
         получения прерываний от порта COM1 чтением с порта 21h и обратной
         записью содержания, логически умноженного на EFh. Прерывания пор-
         та COM1 могут быть замаскированы не только повторением предыдущих
         действий, но логическим сложением с 10h, вместо логического умно-
         жения.  Таким образом, контроллер 8259A может быть запрограммиро-
         ван  для  разрешения  прерываний  порта COM1 с помощью следующего
         фрагмента программы

         IN     AL,21H       ;получить текущую  маску прерывания
         AND    AL,EFH       ;разрешить IRQ4
         OUT    21H,AL       ;снова записать его обратно

             Когда прерывания  порта  COM1 снова выключаются,  8259A может
         быть запрограммирован следующим образом

         IN     AL,21H       ;получить текущую маску прерывания
         OR     AL,10H       ;запретить IRQ4
         OUT    21H,AL       ;снова записать его обратно

             Подобное программирование устройств,  выполняемое считыванием
         содержание регистра с последующей записью его обратно с соотвест-
         вующе измененным битом, рекомендуется ввиду того, что мы не нару-
         шаем предварительной установки битов.
             Кроме разрешения  и запрещения приема прерываний,  контроллер
         8259A должен быть проинформирован о завершении обработки обычного
         прерывания.  Как указывалось ранее,  это выполняется направлением
         20h в адрес 20h порта ввода/вывода следующим образом:

         MOV      AL,20H    ;код конца прерывания
         OUT      20H,AL    ;в порт 20Н контроллера 8259A


                 Использование средств MS-DOS для программирования
                              последовательного порта

             Если Вы  знаете назначение каждого регистра последовательного
         адаптера, программирование последовательного порта включает в се-
         бя правильную установку регистров,  разрешение прерываний и уста-
         новку программы обработки прерываний.  Мы уже рассказали  о  том,
         как  программировать  контроллер  прерываний.  Теперь мы готовы к
         рассмотрению остальных деталей программирования последовательного
         адаптера.

                       Драйвер, TSR или автономная программа

             Существует несколько способов получения доступа к  последова-
         тельному адаптеру в системе MS-DOS.  Вы можете управлять последо-
         вательным портом через устанавливаемый драйвер устройства, выпол-
         няющий  ввод/вывод через этот порт.  В главе 6   "Устанавливаемые

                                      - 8-14 -
         драйверы устройств"   рассматриваются  детали  разработки  такого
         драйвера.  Главным  недостатком такого подхода являются издержки,
         связанные с доступом к драйверу через DOS, а достоинством то, что
         любая  программа,  которая знает о Вашем драйвере,  может его ис-
         пользовать.  Если Вы выбрали этот способ,  то можете обеспечить в
         драйвере возможности IOCTL таким образом,  что связные параметры,
         такие как скорость передачи в бодах и длина слова, могут быть ус-
         тановлены вызовами DOS IOCTL (номер функции DOS 44h).
             Вторым подходом является установка программы TSR (завершенная
         и оставленная резидентно),  которая используется с помощью преры-
         вания BIOS RS-232C (14h) и расширяет свою функциональность  обес-
         печением управляемого прерываниями ввода/вывода. Этот метод также
         дает любой программе доступ к последовательному порту посредством
         Вашего  драйвера  TSR в то время как Вы подтверждаете необходимые
         установки регистра при использовании новых коммуникационных функ-
         ций TSR.  Механизм доступа будет таким же, как вызов функции BIOS
         RS-232C, который мы вскоре опишем.
             Третий метод  заключается  в разработке автономной программы,
         которая включает в себя служебную подпрограмму обработки прерыва-
         ний  последовательного  порта.  В  этом случае,  при запуске этой
         прикладной программы,  Вы можете установить обработчик прерываний
         последовательного  порта  и сбросить его после прекращения работы
         программы. Этот способ создает возможности организации высокоско-
         ростного (9600 бод) последовательного ввода/вывода ввиду наличия
         в нем меньшего количества недостатков по сравнению с двумя други-
         ми методами.
             Независимо  от того,  какой подход  Вы  выберите,  управление
         последовательным портом останется таким же.  Далее мы уделим осо-
         бое внимание деталям.

                   Использование BIOS для последовательной связи

             Вы, вероятно, спросите, можно ли реализовать эффективный ввод
         /вывод через BIOS. К сожалению, нет. BIOS не предоставляет эффек-
         тивной возможности  управления  последовательным  адаптером.  Для
         программирования  последовательного  адаптера  BIOS имеет функцию
         RS-232C, доступную через прерывание 14h. К сожаления, эта функция
         поддерживает  только упорядоченный ввод/вывод,   который не очень
         эффективен ввиду недостатков, изложенных ранее. Тем не менее, эта
         функция идеальна для установки таких параметров коммуникационного
         порта, как скорость передачи в бодах, длина слова и стоповый бит,
         использующий прерывание 14h BIOS.

            Установка коммуникационных параметров с использованием BIOS

             Даже при использовании в последовательном  вводе/выводе  BIOS
         не  столь эффективна как управляемый прерываниями подход. Полезно
         посмотреть,  как коммуникационные параметры (скорость передачи  в
         бодах, длина слова, четность и стоповые биты) могут быть установ-
         лены с использованием функций BIOS RS-232C, доступных по прерыва-
         нию 14h.
             Прерывание 14h с нулем в АН устанавливает параметры  последо-
         вательного порта.  Номер порта должен находиться в DX.  Нуль в DX
         указывает на порт COM1,  в то время,  как  единица  указывает  на
         COM2. Выбранные коммуникационные параметры направляются в регистр
         AL в упакованном формате, показанном на рисунке 8-7. Скорость пе-
         редачи  определяется  3-битовым  значением,  четность - 2-битовым

                                      - 8-15 -
         значением,  число стоповых битов - одним битом и  длина  слова  -
         2-битовым значением. В таблице 8-2 показаны кодированные значения
         каждого коммуникационного параметра. Учтите, что скорость переда-
         чи  драйверов  через  порт  COM в системе DOS 3.3 может достигать
         19200 бод,  в то время,  как ROM-BIOS ограничивается 9600 бодами.
         Для достижения скорости передачи,  не указанной в таблице 8-2, Вы
         можете использовать возможность программирования скорости переда-
         чи  универсального асинхронного приемопередатчика,  рассмотренную
         ранее.
                   Скорость                Длина
                 Ъпередачи в ВЧет-стьВ a.В слова ¬
                 ¦  бодах    ¦       ¦   ¦       ¦
                 ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
                 ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
                 АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
                     Боды      Четность   Стоп-биты  Длина слова
                 ЪДДДДДВДДДДД¬  ЪДДВДД¬   ЪДДВДД¬    ЪДДДДВДДДД¬
                 ¦ 000 ¦ 110 ¦  ¦00¦  ¦   ¦0 ¦ 1¦    ¦ 10 ¦ 7  ¦
                 ГДДДДД†ДДДДДґ  ГДДґb.¦   ГДД†ДДґ    ГДДДД†ДДДДґ
                 ¦ 001 ¦ 150 ¦  ¦10¦  ¦   ¦1 ¦ 2¦    ¦ 11 ¦ 8  ¦
                 ГДДДДД†ДДДДДґ  ГДД†ДДґ   АДДБДДЩ    АДДДДБДДДДЩ
                 ¦ 010 ¦ 300 ¦  ¦01¦c.¦
                 ГДДДДД†ДДДДДґ  ГДД†ДДґ
                 ¦ 011 ¦ 600 ¦  ¦11¦d.¦
                 ГДДДДД†ДДДДДґ  АДДБДДЩ
                 ¦ 100 ¦1200 ¦
                 ГДДДДД†ДДДДДґ
                 ¦ 101 ¦2400 ¦
                 ГДДДДД†ДДДДДґ
                 ¦ 110 ¦9600 ¦
                 ГДДДДД†ДДДДДґ
                 ¦ 111 ¦     ¦
                 АДДДДДБДДДДДЩ
           Рис.8-7. Коммуникационные параметры,  упакованные в одиночный
                  байт в формате, требуемом прерыванием 14h BIOS

            a.- стоповые биты; b. - нет; c. - нечетность; d. - четность


                                                         Таблица 8-2
                      Кодированные значения коммуникационных
                          параметров для прерывания 14h
         ДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДД
         Имя параметра ¦ Фактическое значение ¦ Кодированное  значение
         ДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДД
         Скорость пе-  ¦          110         ¦           0
         редачи в бодах¦          150         ¦           1
                       ¦          300         ¦           2
                       ¦          600         ¦           3
                       ¦         1200         ¦           4
Предыдущая страница Следующая страница
1 ... 119 120 121 122 123 124 125  126 127 128 129 130 131 132 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама