Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - Готовые шпоры.doc
Скачиваний:
145
Добавлен:
15.09.2014
Размер:
1.75 Mб
Скачать

15. Назначение и состав системы ввода-вывода.

Если требуется обеспечить взаимодействие процессора с периферийным устройством, то регистры этого устройства могут быть отображены на ячейки обычной оперативной памяти процессора (memory-mapped I/O) либо на ячейки специального адресного пространства, называемого пространством портов ввода-вывода.

Ввод-вывод с отображением в память обслуживается обычными командами доступа к памяти (MOV, MOVS и т.п.) При этом используются обычные механизмы защиты на уровне сегментов и на уровне страниц. Для обслуживания устройств через пространство портов ввода-вывода используются специальные команды и особый механизм защиты. Особенностью обмена через пространство ввода-вывода является то, что процессор обеспечивает синхронизацию выполнения инструкций ввода-вывода, тогда как при обмене через отображаемую память надо дополнительно позаботиться о предотвращении кэширования и изменения порядка выполнения инструкций (P6+).

Пространство портов ввода-вывода состоит из 65536 индивидуально адресуемых 8-битных ячеек (портов), пронумерованных от 0 до FFFF. Порты с адресами 0F8h...0FFh зарезервированы фирмой Intel. Два соседних 8-битных порта могут использоваться как 16-битный порт. Четыре соседних 8-битных порта могут использоваться как 32-битный порт. Рекомендуется выравнивать 16-битные порты по четным адресам, а 32-битные - по адресам, кратным четырем.

В защищенном режиме выполнение инструкций обращения к портам ввода-вывода (IN, INS, OUT, OUTS) регулируется следующими механизмами защиты:

  • уровень привилегий ввода-вывода (I/O Privilege Level - IOPL);

  • битовая карта разрешения ввода-вывода (I/O Permission Bit Map);

Процессор разрешает выполнение инструкций ввода-вывода, если текущий процесс обладает достаточными привилегиями: CPL<=IOPL. В противном случае включается второй механизм контроля. Обычно операционная система устанавливает уровень привилегий ввода-вывода таким, чтобы операции ввода-вывода могли выполняться только специальным программным обеспечением (драйверами или самой ОС, IOPL=1 или IOPL=0), тогда как попытки прикладной программы (CPL=3) выполнить эти инструкции будут приводить к нарушению общей защиты.

16. Параллельный порт(LPT) - в основном используется для подключения к компьютеру принтера, сканера и других внешних устройств, название «LPT» образовано от наименования стандартного устройства принтера «LPT1» (Line Printer Terminal или Line PrinTer) в операционных системах семейства MS-DOS. Порт на стороне управляющего устройства (компьютера) имеет 25-контактный 2-рядный разъём DB-25-female.

Стандарт позволяет использовать интерфейс в нескольких режимах:

SPP (Standart Paralell Port) — однонаправленный порт, полностью совместим с интерфейсом Centronics.

Nibble Mode — позволяет организовать двунаправленный обмен данными в режиме SPP путём использования управляющих линий (4 бит) для передачи данных от периферийного устройства к контроллеру. Исторически это был единственный способ использовать Centronics для двустороннего обмена данными.

Byte Mode — редко используемый режим двустороннего обмена данными. Использовался в некоторых старых контроллерах до принятия стандарта IEEE 1284.

EPP (Enhanced Parallel Port) — разработан компаниями Intel, Xircom и Zenith Data Systems — двунаправленный порт, со скоростью передачи данных до 2Мб/сек.(1991)

ЕСР (Extended Capabilities Port) — разработан компаниями Hewlett-Packard и Microsoft — в дополнение появились такие возможности, как наличие аппаратного сжатия данных, наличие буфера и возможность работы в режиме DMA.

Для печати на принтере через этот порт используются операции, выполняющиеся через DOS INT 2IH и INT 17H. Для печати через DOS используется прерывание INT 2IH:

MOV АН, 05 ; запрос функции печати

MOV DL, char ; распечатываемый символ

INT 2IH ; вызов DOS

Для печати через BIOS используется прерывание INT 17H:

MOV АН, 00 ; запрос функции печати

MOV AL, CHAR ; символ, выводимый на печать

MOV DX, 00 ; выбор принтера о

INT 17H ; вызов BIOS

17. После́довательный порт (англ. Serial port), COM-порт — двунаправленный последовательный интерфейс, предназначенный для обмена байтовой информацией. Последовательным данный порт называется потому, что информация через него передаётся по одному биту, бит за битом. Назначение : Наиболее часто для последовательного порта персональных компьютеров используется стандарт RS-232C. Ранее последовательный порт использовался для подключения терминала, позже для модема или мыши. Сейчас он используется для соединения с источниками бесперебойного питания, для связи с аппаратными средствами разработки встраиваемых вычислительных систем. С помощью COM-порта можно соединить два компьютера, используя так называемый «нуль-модемный кабель». Программный доступ к СОМ-порту: COM-порты в операционной системе Windows — это именованные каналы для передачи данных, называемые обычно COM1, COM2 и т. д. по порядку обнаружения драйверов соответствующих устройств. Например, для обмена информации через Bluetooth многие драйверы представляются операционной системе как COM-порт, и резервируют похожее имя. Следует также отметить, что организация взаимодействия по последовательному порту с точки зрения программирования реализуется значительно легче, чем другие способы.

18.Организация обмена данными через последовательные порты: Для инициализации COM порта используем структуру DCB, полями которой являются параметрами порта. Вначале получаем идентификатор соответствующего COM порта, который можно использовать как дескриптор простого файла. Создаётся два экземпляра исполняемого файла для COM1 и COM2 соответственно. Используя структуру COMSTAT осуществляем асинхронную передачу данных между портами.

Пример:

HANDLE SetupComPort()

{

HANDLE hComm;

DCB dcb; //device control block

hComm = CreateFile(TEXT("COM[i]"),GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,NULL);

if(hComm == INVALID_HANDLE_VALUE){

puts("Error opening port");

_getch();

abort();

}

if (!GetCommState(hComm, &dcb)) //получили существующую структуру DCB

{puts("Error! Couldn't create the DCB.");

_getch();

abort();} //установили в ней свои параметры

dcb.BaudRate = CBR_57600; //Скорость передачи данных.

dcb.ByteSize = 8;//Определяет число информационных бит в передаваемых и принимаемых байтах.

dcb.Parity = NOPARITY;//Бит четности отсутствует

dcb.StopBits = ONESTOPBIT;//Один стоповый бит

dcb.fRtsControl = RTS_CONTROL_TOGGLE;//Задает, что сигнал RTS установлен, когда есть данные для передачи. Когда все символы из передающего буфера переданы, сигнал сбрасывается. установили новую структуру

return 0;

}

void WriteToCom(HANDLE hComm,char ch)

{

DWORD writeNumByte = 0;

if(!WriteFile(hComm, &ch, 1, &writeNumByte, NULL)){

if(GetLastError() != ERROR_IO_PENDING){

puts("Write File failed");

}

}

}

int ReadFromCom(HANDLE hComm, char &ch)

{

DWORD dwRead;

ReadFile(hComm, &ch, 1,&dwRead,0);

return dwRead;

}