Интерфейсы периферийных устройств Определения • Периферийные устройства (ПУ) - это устройства ЭВМ, не входящие в состав центральной части ВС и предназначенные для взаимодействия ВС с объектами внешнего мира. Под объектами внешнего мира будем подразумевать пользователей, другие ЭВМ(ВС), объекты управления, коммуникационные среды вычислительных сетей и носители информации устройств внешней памяти. • Интерфейс - совокупность унифицированных технических и программных средств, используемых для сопряжения устройств в вычислительной системе или сопряжения между системами Интерфейс • Функциональная совместимость – общность управляющих сигналов, генерируемых обменивающимися модулями. Управляющие сигналы должны иметь заданное смысловое значение и определенные временные параметры. • Электрическая совместимость модулей обеспечивается заданными уровнями вырабатываемых ими сигналов, их нагрузочными способностями, мощностью и т.п. • Механическая совместимость предполагает применение определенных типов и размеров плат, кабелей, соединителей и т.д. Интерфейс • Протокол обмена - совокупность правил и соглашений, определяющих работу функциональных устройств и процедур в процессе взаимодействия • Аппаратная часть • Программное обеспечение Классификация • По назначению (универсальные, специализированные); • По характеру передаваемых данных (параллельные, последовательные); • По режиму передачи данных (дуплексные, полудуплексные, симплексные); • По способу обмена (асинхронные, синхронные); • По области применения (внешние, внутренние). Способы передачи данных Интерфейсы бывают: • Последовательные • Параллельные (параллельно-последовательные) • Параллельно-параллельные • Последовательно-параллельные Способы обработки данных • Программный несовмещенный ввод-вывод • Программный ввод-вывод с прерываниями программы • Ввод-вывод через канал прямого доступа в память Программный несовмещенный вводвывод • Обращение к ПУ осуществляется в моменты времени, определенные программой ЦП; • Все действия по управлению реализуются командами прикладной программы; • Синхронизация ЦП и ПУ достигается организацией программного ожидания момента готовности ПУ. Пример void send_sym(int sym){ RW=0; RS=1; E=1; D=sym; E=0; delay(); } … Пример void uart_send() { TI=0; SBUF = ‘S’; While(!TI); TI=0; SBUF = ‘O’; While(!TI); TI=0; SBUF = ‘S’; While(!TI); } char uart_recive () { while(!RI); RI=0; return SBUF; } Прерывания Прерывание - процесс переключения ЦП с одной программы на другую по внешнему сигналу с сохранением информации для последующего возобновления прерванной программы. Этапы: • ПУ формирует запрос прерывания. • Запросы могут поступать асинхронно. • Запросы сохраняются в специальном регистре. • Состояние регистра анализируется программно или аппаратно. • Либо информация о месте возникновения запроса передаётся в виде адреса ячейки памяти (векторная система прерываний). • Вызывается программа-обработчик прерывания. Прерывания Таблица векторов прерываний ADuC842 Идентификация прерываний в Keil C51 Пример void int0 (void) interrupt 0 // адрес обработчика - 0x00B { P0=0; } int main(){ EA=1; //разрешаем прерывания EX0=1; //разрешаем внешнее прерывание 0 while (1) { P0=i; t1(); i*=2; if (i == 16) i = 1; } } Пример void int_uart (void) interrupt 4 // адрес обработчика - 0x023 { P0=0x15; } int main(){ EA=1; //разрешаем прерывания ES=1; //разрешаем прерывание от UART’а … while (1) { P0=i; t1(); i*=2; if (i == 16) i = 1; } } Прерывания • Порядок действий процессора Синхронизация Передача может быть: • Синхронная • Асинхронная Синхронная передача Асинхронная передача, стробирование Асинхронная передача, старт-стоп биты Асинхронная передача, запрос-ответ Самосинхронизирующееся кодирование Интерфейс 1-Wire Основные характеристики: • Асинхронный (запрос-ответ) • Однопроводный • Полудуплексный • На линии может быть только одно мастер-устройство • Мастер-устройство не имеет адреса Организация питания Запись одного бита Передача логического «0» Передача логической «1» Адресация • Каждое устройство имеет уникальный адрес Команды Команды для определения адресов устройств: • Поиск • Чтение • Сравнение • Пропуск Специфические команды: • Конвертирование температуры • Чтение температуры Импульс сброса int onewire_reset(){ Q=0; delay(640); Q=1; delay(2); pr = Q; delay(60); return(pr); } Отправка бита void onewire_send_bit(int bit) { Q = 0; if (bit){ delay(5); Q = 1; delay(90); }else{ delay(90); Q = 1; delay(5); } } Чтение бита int onewire_read_bit(){ Q = 0; delay(2); Q = 1; delay(8); return (Q); } Обмен с датчиком onewire_start(){ onewire_reset(); onewire_send_byte(0xCC); onewire_send_byte(0x44); } onewire_read_temperature(){ onewire_reset(); onewire_send_byte(0xCC); onewire_send_byte(0xBE); for (t=0;t<9;t++){ temp[t]=onewire_read_byte(); } }