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

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


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

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


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

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

Предыдущая страница Следующая страница
1 ... 117 118 119 120 121 122 123  124 125 126 127 128 129 130 ... 198
         основан на Intel 8259 UART (универсальный асинхронный приемопере-
         датчик), имеет порт RS-232C для подключения к модему и, как адап-
         тер дисплея,  программируется посредством набора регистров.  Мик-
         ропроцессор  имеет  доступ  к  регистрам через ранее определенные
         адреса порта ввода/вывода.
             Универсальный асинхронный  приемопередатчик Intel 8250 управ-
         ляется посредством записи в набор восьмибитовых регистров и  чте-
         ния из них.  Эти регистры доступны программисту через адреса пор-
         та.  Адреса портов задаются последовательно,  поэтому  достаточно
         знать  адрес  первого порта.  Он также известен как базовый адрес
         последовательного адаптера. В персональном компьютере IBM PC двум
         последовательным портам COM1 и COM2 присвоены базовые адреса пор-
         та 3F8h и 2F8h соответственно. Так, для последовательного адапте-
         ра COM1 первый регистр имеет адрес 3F8h, следующий 3F9h и так да-
         лее.
             В 8250  имеется семь физических регистров и они описываются в
         порядке возрастания начального номера, начиная с базового адреса.
         Как показано на  рисунке 8-4,  базовый адрес порта имеет один ре-
         гистр,  который делится на два,  как приемный буферный регистр  и
         регистр хранения передачи (THR),  который используется для хране-
         ния одного передаваемого или принимаемого символа.  Затем следует
         регистр разрешения прерываний,  который используется для разреше-
         ния или блокировки генерации прерываний последовательным  адапте-
         ром.  Третий регистр, называемый регистром идентификации прерыва-
         ний,    содержит    сообщение     универсального     асинхронного
         приемопередатчика  об идентичности прерывания.  Затем следует ре-
         гистр управления линией,  используемый для установления различных
         связных  параметров,  таких как длина слова,  количество стоповых
         битов,  четность и скорость передачи в бодах. Пятый регистр - это
         регистр управления модемом, который используется для передачи мо-
         дему сигналов,  таких как DTR (терминал готов) и RTS  (запрос  на
         передачу). Наконец, два последних регистра, регистр состояния ли-
         нии и регистр состояния модема, показывают соответственно состоя-
         ние линии и модема.
             Первые два регистра применяются также для установки  скорости
         передачи  в  бодах.  Скорость  передачи  в бодах определяется как
         16-битовый делитель тактовой частоты, используемой для последова-
         тельного адаптера (1.8432 МГц в большинстве систем MS -DOS). Зна-
         чение делителя вычисляется по формуле

                                 1,843,200
             делитель= ------------------------------
                       16 Х скорость передачи в бодах

             Чтобы установить скорость передачи в бодах,  Вы должны проде-
         лать следующее:
             1. Установить в 1 наиболее значимый бит  регистра  управления
                линией  (он  называется битом защелки доступа делителя или
                DLAB).
             2. Загрузить младший и старший байты делителя соответственно в
                приемный буфер и регистр разрешения прерываний.
             3. Установить DLAB в 0 для обеспечения нормальной работы уни-
                версального асинхронного приемопередатчика.


                                      - 8-7 -
          A     Приемный буфер/регистр хранения передачи
          B     ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
       (COM1-3F8¦ 1.¦   ¦   ¦   ¦   ¦   ¦   ¦ 2.¦
       COM2-2F8)АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ

                Регистр разрешения прерывания
          B+1   ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
                ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 3.¦ 4.¦ 5.¦ 6.¦
                АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
                Установить бит в 1 для разрешения

                Регистр идентификации прерывания
          B+2   ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
                ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦   ¦   ¦ 7.¦
                АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
                                    АДД3-битовый идентификатор прерывания
                                     110 = состояние линии
                                     100 = приемные данные
                                     010 = буфер передачи свободен
                                     000 = состояние модема
                Регистр управления линией
          B+3   ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
                ¦ 8.¦   ¦    9.     ¦10.¦  11.  ¦
                АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
                      АДBREAK: 1 устанавливает линию в SPACE
                Регистр управления модемом
          B+4   ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬  a. - OUT2
                ¦ 0 ¦ 0 ¦ 0 ¦12.¦ a.¦ b.¦ c.¦ d.¦  b. - OUT1
                АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ  c. - RTS
                                  АДД 13.          d. - DTR
                Регистр состояния линии
          B+5   ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
                ¦ 0 ¦14.¦15.¦16.¦17.¦18.¦19.¦20.¦
                АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ

                Регистр состояния модема           a. - RLSD
          B+6   ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬  b. - Delta RLST
                ¦ a.¦ RI¦DSR¦CTS¦ b.¦ c.¦ d.¦ e.¦  c. - Delta RI
                АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ  d. - Delta DSR
             Рис.8-4. Регистры в 8250 UART.        e. - Delta CTS

             A - адрес порта или регистр
             B - базовый адрес; 1. - бит 7 данных;  2. - бит 0 данных;
             3. - состояние модема; 4. - состояние линии приема;
         5. - регистр хранения передачи свободен; 6. - прием данных
         разрешен; 7. - 0 означает, что прерывание ждет;
         8. - бит доступа к защелке; 9. - четность:  000=нет,
         001=нечетность, 011=четность; 10. - число стоповых битов;
         11. - длина слова: 10-7, 11-8; 12. - проверка обратного цикла;
         13. - должен быть 1 для  прерывания ввода/вывода персонального
         компьютера; 14. - передача свободна; 15. - регистр хранения пере-
         дачи свободен; 16. - обнаружен BREAK; 17. - ошибка кадровой
         синхронизации; 18. - ошибка четности;  19. - ошибка выхода за
         границы; 20. - данные для приема готовы;

             Применяя этот подход Вы можете установить любое значение ско-
         рости передачи в бодах.  Обратите внимание, что максимально  воз-

                                      - 8-8 -
         можной скоростью передачи является  1/16  тактовой  частоты,  или
         115,200  бод (для этой скорости передачи делитель равен 1).  Этот
         предел вытекает из того, что делитель не может быть меньше едини-
         цы.  Для  установки скорости передачи в бодах Вы можете также ис-
         пользовать прерывание BIOS 14h. Мы рассмотрим применение BIOS да-
         лее в этой главе.

               Управляемый прерываниями последовательный ввод/вывод

             Существует два общих метода ввода/вывода в любой вычислитель-
         ной системе:  упорядоченный и управляемый прерываниями.  Упорядо-
         ченность относится к повторяющейся  проверке  состояния  регистра
         устройства ввода/вывода для инициализации требуемой транзакции. В
         упорядоченном вводе/выводе программа, запрашивающая символ ввода,
         многократно считывает состояние регистра в устройстве ввода/выво-
         да до тех пор, пока оно не покажет, что символ доступен для ввода
         (или  до  тех пор,  пока программа не решит,  что "время закончи-
         лось"). Когда состояние указывает, что имеется готовый для работы
         символ, программа считывает его из соответствующего регистра уст-
         ройства ввода/вывода.  Сходная последовательность "ждать,  до тех
         пор пока не готов,  затем писать" используется при выведении сим-
         волов на устройство ввода/ вывода.  Таким образом, дальнейшее вы-
         полнение  программы  приостанавливается  до завершения выполнения
         операции ввода/вывода.
             Большой проблемой  для упорядоченного ввода/вывода через ком-
         муникационный порт является то,  что при скорости  передачи  выше
         300  бод  программе трудно что-либо сделать с получаемым символом
         кроме как отображать его на экране.  Рассмотрим следующий пример.
         Предположим,  что  мы читаем символы со скоростью 300 бод и имеем
         следующие связные параметры:  длина слова 7 бит, проверка на чет-
         ность и один стоповый бит, который вместе со стартовым битом, до-
         бавляет до 10 бит на символ. Вы ожидаете получать около 30 симво-
         лов  каждую секунду. После чтения  символа  программа имеет около
         1/30 секунды для выполнения других операций. Если  Вы не  желаете
         потерять какие-либо символы,то в это время Вы должны снова начать
         упорядочение порта.  Что произойдет,  когда скорость возрастет до
         9600 бод?  Временной интервал между символами слишком мал для вы-
         ведения символа на экран дисплея,  не позволяет  интерпретировать
         специальные символы и эмулировать терминал.
             В подходе,  основанном на управлении прерываниями,  программа
         предоставляет  возможность  прерываниям  устройства  ввода/вывода
         поступать непосредственно на центральный процессор,  который про-
         должает выполнять свою работу, не связываясь с устройством. Когда
         устройство готово к вводу/выводу, оно сигнализирует об этом цент-
         ральному процессору посредством аппаратуры.  Получив этот сигнал,
         центральный процессор сохраняет свое текущее состояние и вызывает
         подпрограмму  обслуживания  прерываний,  адрес которой хранится в
         таблице векторов прерываний.  Эта подпрограмма выполняет операцию
         ввода/вывода,  затем восстанавливает состояние машины и возвраща-
         ется в прерванную программу.  Учитывайте регистр символов, посту-
         пающих в коммуникационный порт персонального компьютера.  Органи-
         зовав где-нибудь  некоторые  ячейки  памяти  (буфер),  Вы  можете
         использовать  простую подпрограмму обработки прерываний,  которая
         быстро считывает символ из коммуникационного  порта  и  сохраняет
         его в следующей доступной ячейке памяти в буфере.  Символы не бу-
         дут утеряны в процессе считывания и сохранения  символа драйвером
         прерываний  перед поступлением следующего символа.  Эта несложная

                                      - 8-9 -
         задача достаточно проста для выполнения в короткие временные  ин-
         тервалы   между   поступающими  символами  при  скорости передачи
         9600 бод.  Прелесть этого метода заключается в том, что время об-
         работки главной программой символов, хранящихся в буфере, не име-
         ет значения. Конечно, существует риск переполнения буфера, но эта
         проблема  может быть решена простым увеличением его размера. Если
         этот способ не очень хорош,  то для избежания переполнения буфера
         можно использовать управление потоком с помощью XON/XOFF.
             Из наших рассуждений должно стать очевидным,  что управляемая
         прерываниями буферная связь с использованием управления потоком с
         помощью XON/XOFF, предпочтительнее упорядоченной связи.

                       Прерывания последовательного адаптера

             Последовательный адаптер  персонального компьютера может быть
         запрограммирован для прерывания  работы  центрального  процессора
         всякий  раз как только происходит одно из четырех событий (смотри
         рисунок 8-5). Универсальный асинхронный приемопередатчик присваи-
Предыдущая страница Следующая страница
1 ... 117 118 119 120 121 122 123  124 125 126 127 128 129 130 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама