Материал: ППЭВС. 4 семестр. Лекция 7

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лекция 7.

Устройства ввода-вывода. Режимы обмена. Структура обмена.

Ввод-вывод представлен обширной группой устройств. Если рассматривать этот блок и процессорный блок с точки зрения времени захвата системной шины, то устройства ввода-вывода, безусловно, занимают первое место. Они обеспечивают постоянное пополнение физической памяти информацией, необходимой для работы процессорного блока, позволяют совершать обмен информацией между процессорной системой и внешними устройствами, а также передачу информации между внутренними блоками процессорной системы.

Различают два вида обмена межда процессорной системой и внешними устройствами: обмен по готовности и обмен по прерываниям.

Обмен по готовности может быть безусловным, если внешнее устройство простое и всегда может выполнять только одну функцию (ввода или вывода), при этом оно постоянно готово к обмену. В случае если устройство может принимать информацию (или выдавать ее) только при готовности его основных блоков, используется программно определяемая готовность. Рассмотрим принцип обмена данными по готовности. Считаем пока, что данные поступают из некоторого регистра процессора в регистр данных порта. Передача совершается внутри системы параллельным способом. В зависимости от типа процессорной системы такая передача может совершаться с помощью команды OUT прямо по адресу регистра внутри устройства ввода-вывода, или копироваться в отведенную область памяти по команде STR (store reg to mem). На рисунке изображен последний вариант. Сигнал разрешения записи во внешний регистр следует из команды процессора. А вот сигнал разрешения считывания поступит только тогда, когда внешнее устройство будет готово эту информацию принять. При готовности к приему, внешнее устройство устанавливает бит готовности в регистр состояния. Процессор читает этот бит и начинает выдачу информации, регламентируя обмен в регистре управления. Если передача совершается с помощью команды OUT, процессор совершает эту команду с адресом регистра данных только после прочтения бита готовности в регистре состояния. При приеме информации внешнее устройство должно установить в регистре состояния бит готовности к выдаче информации. Наличие установленного бита позволит произвести ввод во внешний регистр, а процессор, после прочтения готовности, сможет считать информацию во внутренний регистр. Это также, в зависимости от типа системы, может быть

произведено или с помощью команды IN, или с помощью команды LDR (load reg from mem). Очевидно, что, в случае обмена по программно определяемой готовности, процессор теряет много времени на предварительное обращение по адресу регистра состояния. Поэтому такой режим в настоящее время используется крайне редко. Он заменен на обмен по прерываниям. Но важно понимать что весь механизм прерывания изначально запускается появлением бита запроса на обмен (готовности) с регистре состояния. То есть любой обмен инициируется внешним устройством.

При вводе-выводе через копирование в область памяти, используемой является область устройств. В различных разделах этой области размещаются различные по функциям устройства: часть отводится под FIFO, где формируется очередь под дальнейшую сериализацию для выдачи в линию, или прошедшая десериализацию информация; часть занимают простые параллельные порты, способные хранить информацию до востребования, освобождая внутренние регистры процессора.

Рассмотрим устройство, которое уже в течение более полувека используется для последовательной передачи информации.

UART

Последовательный порт, функционирующий с небольшими изменениями более 50 лет. С 1962 года он работал по физическому протоколу RS232. В настоящее время существуют как варианты отдельных микросхем, так и встроенные в микроконтроллеры.

Передача данных в UART осуществляется по одному биту в равные промежутки времени. Этот временной промежуток определяется заданной скоростью UART и для конкретного соединения указывается в бодах (битах в секунду). Существует общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 бод.

Основные регистры данных последовательные регистр приема и регистр передачи.

Кроме регистров приема и передачи имеет два адресуемых делителя частоты (старший и младший байты адресуются отдельно), регистр управления линией, регистр состояния линии, регистр разрешения прерываний и регистр идентификатора прерываний.

Делители служат для хранения констант, изменяющих коэффициент деления тактовой частоты, чтобы обеспечить определенную скорость передачи.

Перед началом работы необходимо записать управляющее слово по адресу регистра управления линией. В формате управляющего слова определяется:

1)- доступ к регистрам приема/передачи или к регистрам выбора скорости;

2)- нормальная передача символов или старт (рассоединение);

3)– наличие контроля и тип контроля (паритет, непаритет);

4)- количество стоповых бит;

5)- количество разрядов в символе.

1.Первое управляющее слово всегда имеет в старшем разряде «1», что дает обращение к регистрам-делителям. После установки необходимой скорости записывается управляющее слово, имеющее в старшем разряде «0». Оно и будет определять регламент работы приема и передачи.

2.В следующем разряде записывается «1 » при рассоединении и ожидании старта (постоянная передача 0). В штатном режиме записывается «0».

3.Далее три разряда (5,4 и 3) служат для определения контроля. Если в р3 записан «0», то контроль отсутствует, и состояние остальных разрядов не имеет смысла. Если в р3 записана «1», то значение р5 и р4 будут обозначать следующее:

Р5

Р4

Тип контроля

 

 

 

0

0

Дополнение до чета

 

 

 

0

1

Дополнение до нечета

 

 

 

1

0

Контроль четности

 

 

 

1

1

Контроль нечетности

 

 

 

Многие реализации UART имеют возможность автоматически контролировать целостность данных методом контроля битовой чѐтности. Когда эта функция включена, последний бит данных в минимальной посылке («бит чѐтности») контролируется логикой UART и содержит информацию о чѐтности количества единичных бит в этой минимальной посылке. Различают контроль на четность

( Even parity), когда сумма количества единичных бит в посылке является четным числом, и контроль на нечетность ( Odd parity), когда эта сумма нечетна. При приеме такой посылки UART может автоматически контролировать бит четности и выставлять соответствующие признаки правильного или ошибочного приема. Бит четности получают через побитовый XOR информационных бит в посылке.

4. Следующий разряд содержит информацию о количестве стоповых бит. Чаще всего стоповый бит один, т.е. р2 устанавливается в «0».

Помимо собственно информационного потока, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приѐме эти лишние биты удаляются из потока. Обычно стартовый и стоповый биты обрамляют один байт информации (8 бит), однако встречаются реализации UART, которые позволяют передавать по 5, 6, 7, 8 или 9 бит. Обрамленные стартом и стопом, биты являются минимальной посылкой. Некоторые реализации UART позволяют вставлять два стоповых бита при передаче для уменьшения вероятности рассинхронизации приѐмника и передатчика при плотном трафике. Приѐмник игнорирует второй стоповый бит, воспринимая его как короткую паузу на линии.

Принято соглашение, что пассивным (в отсутствие потока данных) состоянием входа и выхода UART является логическая 1. Стартовый бит всегда логический 0, поэтому приѐмник UART ждѐт перепада из 1 в 0 и отсчитывает от него временной промежуток в половину длительности бита (середина передачи стартового бита). Если в этот момент на входе всѐ ещѐ 0, то запускается процесс приѐма минимальной посылки. Для этого приѐмник отсчитывает 9 битовых длительностей подряд (для 8-битных данных) и в каждый момент фиксирует состояние входа. Первые 8 значений являются принятыми данными, последнее значение проверочное, если предполагается проверка на четность, и стоп-бит. Значение стоп-бита всегда 1, если реально принятое значение иное, UART фиксирует ошибку.

5.Разряды 0 и 1 определяют количество разрядов в символе (от 5 до 8).

Для формирования временных интервалов передающий и приѐмный UART имеют источник точного времени (тактирования). Точность этого источника должна быть такой, чтобы сумма погрешностей (приѐмника и передатчика)

установки временного интервала от начала стартового импульса до середины стопового импульса не превышала половины (а лучше хотя бы четверти) битового интервала.

Источник: https://studfile.net/preview/13392424/