Лекции - Кафедра вычислительных систем

advertisement
Интерфейсы
периферийных устройств
Определения
• Периферийные устройства (ПУ) - это устройства ЭВМ, не входящие
в состав центральной части ВС и предназначенные для
взаимодействия ВС с объектами внешнего мира. Под объектами
внешнего мира будем подразумевать пользователей, другие
ЭВМ(ВС), объекты управления, коммуникационные среды
вычислительных сетей и носители информации устройств внешней
памяти.
• Интерфейс - совокупность унифицированных технических и
программных средств, используемых для сопряжения устройств в
вычислительной системе или сопряжения между системами
Интерфейс
• Функциональная совместимость – общность управляющих
сигналов, генерируемых обменивающимися модулями.
Управляющие сигналы должны иметь заданное смысловое
значение и определенные временные параметры.
• Электрическая совместимость модулей обеспечивается
заданными уровнями вырабатываемых ими сигналов, их
нагрузочными способностями, мощностью и т.п.
• Механическая совместимость предполагает применение
определенных типов и размеров плат, кабелей,
соединителей и т.д.
Интерфейс
• Протокол обмена - совокупность правил и соглашений,
определяющих работу функциональных устройств и
процедур в процессе взаимодействия
• Аппаратная часть
• Программное обеспечение
Классификация
• По назначению (универсальные, специализированные);
• По характеру передаваемых данных (параллельные,
последовательные);
• По режиму передачи данных (дуплексные,
полудуплексные, симплексные);
• По способу обмена (асинхронные, синхронные);
• По области применения (внешние, внутренние).
Способы передачи данных
Интерфейсы бывают:
• Последовательные
• Параллельные (параллельно-последовательные)
• Параллельно-параллельные
• Последовательно-параллельные
Способы обработки данных
• Программный несовмещенный ввод-вывод
• Программный ввод-вывод с прерываниями программы
• Ввод-вывод через канал прямого доступа в память
Программный несовмещенный вводвывод
• Обращение к ПУ осуществляется в
моменты времени, определенные
программой ЦП;
• Все действия по управлению
реализуются командами прикладной
программы;
• Синхронизация ЦП и ПУ достигается
организацией программного
ожидания момента готовности ПУ.
Пример
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();
}
}
Download