3c05a905

Порты ввода/вывода


Системы реального времени должны иметь возможность читать и писать данные в устройства. RTX-интерфейсы портов ввода/вывода позволяют осуществлять это без необходимости переключения в режим ядра. Отпадает необходимость написания драйвера для каждого устройства, к которому необходимо получить доступ. Кроме того, устраняются задержки, связанные с запросом обслуживания драйвером при каждом обращении к устройству.

Порт ввода/вывода предоставляет альтернативный метод прямого общения с аппаратурой. В адресном пространстве ввода/вывода у процессоров Intel каждый адрес представляет собой 8-ми битный “порт”, который обычно соответствует 8-ми битному управляющему регистру устройства. Хотя последовательные адреса могут представлять байты в многобайтовом порту, разработчики обычно используют подход, при котором существует однобайтовый порт, а многобайтовые величины обычно вводятся, как последовательные однобайтовые записи в порт.  

Перед любым вводом/выводом из портов необходимо разрешить доступ к портам. Это осуществляется посредством функции RtEnablePortIo, параметром которой является диапазон портов ввода/вывода, к которым надо получить доступ. После этого для передачи данных можно использовать функции RtWrite* и RtRead*.

API управления портами ввода/вывода

Следующие функции служат для управления портами ввода/вывода:

RtEnablePortIo - разрешает прямой доступ к портам ввода/вывода для указанного диапазона адресов

RtDisablePortIo - запрещает прямой доступ к портам ввода/вывода для указанного диапазона адресов

API передачи данных

Следующие функции служат для передачи данных из/в портов ввода/вывода:

RtReadPortUchar,RtReadPortUshort,RtReadPortUlong - напрямую читают одно-, двух-, четырехбайтовые данные из указанного порта

RtWritePortUchar,RtWritePortUshort,RtWritePortUlong - напрямую пишут одно-, двух-, четырехбайтовые данные в указанный порт

RtReadPortBufferUchar,RtReadPortBufferUshort,RtReadPortBufferUlong -

копируют одно-, двух-, четырехбайтовые данные из указанного порта ввода/вывода в буфер

RtWritePortBufferUchar,RtWritePortBufferUshort,RtWritePortBufferUlong - копируют одно-, двух-, четырехбайтовые данные из буфера в указанный порт ввода/вывода

Общие замечания по программированию

Интерфейсы RTX написаны на ассемблере и используют вызов _ _stdcall. Это означает, что подпрограмма ответственна за очистку стека. Вы не должны использовать другие другие соглашения о вызове (это может вызвать проблемы с компилятором).



Содержание раздела