|
|
|
|
Программируемый связной интерфейс или универсальный (синхронно-)асинхронный приемо-передатчик (У(С)АПП или U(S)ART) предназначен для организации обмена данными между МП и удаленными ВУ в последовательном формате. По этой причине УСАПП называют также последовательным интерфейсом (IOS).В качестве передатчика УСАПП преобразует параллельный код в последовательный и отправляет его в линию связи, а в качестве приемника осуществляет обратное преобразование. УСАПП может обмениваться данными с удаленными устройствами в симплексном (движение информации в одном направлении) , полудуплексном (информация передается и принимается в обоих направлениях, но поочередно) и дуплексном режимах (обмен данными в обоих направлениях одновременно).
На рисунке приведено упрощенное условное обозначение УСАПП, схема его включения в микропроцессорную систему и типичная последовательность бит на входе приемника или выходе передатчика в асинхронном режиме работы. Микропроцессор на схеме не показан. Счетчик CT0 таймера (мог быть и другой) обеспечивает требуемую скорость обмена данными.
Назначение некоторых выводов: TxD - выход передатчика, RxD - вход приемника, CLK - вход частоты синхронизации, TxC - вход синхросигнала передатчика, RxC - вход синхросигнала приемника, ~CTS - инверсный вход готовности приемника терминала (удаленного устройства или модема). В простых системах связи вход ~CTS можно жестко связать с "землей", уведомляя передатчик, что приемник "всегда готов", а его действительная готовность к приему - это забота программиста! Если используется стандартный протокол связи, например RS-232C, то вход ~CTS должен быть отсоединен от нулевого провода. C/~D - функциональный вход "управление/данные". Если C/~D = 0 , то МП и УСАПП обмениваются байтом данных, если C/~D = 1, то происходит запись байта управления или чтение байта состояния. Назначение остальных выводов PCI аналогично назначению соответствующих выводов PPI. Приведенных на рисунке выводов достаточно для реализации связи с не очень удаленными объектами, например с компъютером или с другими МП.
Из приведенного рисунка нетрудно вычислить адреса PCI. Для нулевого выхода дешифратора, подключенного к входу таймеру "выбор микросхемы" адреса уже найдены . Активизация инверсного входа ~CS УСАПП производится подачей сигналов A4,A3,A2 = 111(BIN) = 7(DEC) и разрешающих работу дешифратора сигналов A7,A6,A5 = 100(BIN). В таблице приведены два из четырех возможных адресов PCI (A1 = 0).
ЛИНИИ ШИНЫ АДРЕСА | ДАННЫЕ / РЕГИСТР УПРАВЛЕНИЯ (CSR) | АДРЕС (HEX) | |||||||
A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | ||
1 | 0 | 0 | 1 | 1 | 1 | x | 0 | Адрес порта данных | 9С |
1 | 0 | 0 | 1 | 1 | 1 | x | 1 | Адрес порта CSR | 9D |
Одним из наиболее распространенных режимов работы УСАПП является асинхронный режим. В этом режиме каждый передаваемый символ (кадр) содержит следующие поля:
обязательный стартовый бит, на рисунке обозначен ST, всегда равен нулю,
5..8 информационных бит,
необязательный бит контроля четности/нечетности PB,
1..2 стоп-бита SP.
Кадры следуют непрерывно или отделяются паузами. Инфомационные биты передаются начиная со старших разрядов. На рисунке передается/принимается код 01011001, а не 10011010.
УСАПП программируется записью в него байта управления, который может быть двух типов:
инструкция режима,
команда управления.
ФОРМАТ ИНСТРУКЦИИ РЕЖИМА
Инструкция режима задает режим синхронизации, формат данных, скорость обмена, необходимость контроля. Ниже в таблице приведен формат инструкции режима.
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
D7 | D6 | Число стоп-бит | Вид контроля | D5 | D4 | |
0 | 0 | Запрет | Нет контроля | 0 | 0 | |
0 | 1 | 1 стоп-бит | Контроль нечетности | 0 | 1 | |
1 | 0 | "полтора" стоп-бита | Нет контроля | 1 | 0 | |
1 | 1 | 2 стоп-бита | Контроль четности | 1 | 1 |
D3 | D2 | Число информационных бит | Частота синхронизации | D1 | D0 | |
0 | 0 | 5 | fTxC(RxC) / 1 | 0 | 1 | |
0 | 1 | 6 | fTxC(RxC) / 16 | 1 | 0 | |
1 | 0 | 7 | fTxC(RxC) / 64 | 1 | 1 | |
1 | 1 | 8 |
Биты D7,D6 определяют число стоп-бит в каждом кадре, причем "полтора бита" обозначают длительность в полтора тактовых интервала. Обычно для экономии времени используется один стоп-бит.
Длительность тактового интервала (fTxC(RxC)/x)-1сек задают биты D1,D0. Частота fTxC или fRxC - частота сигнала на одноименных входах TxC и RxC приемопередатчика должна быть меньше или равной fCLK/(4.5). Внутри УСАПП может быть дополнительно разделена в 16 или 64 раза. Частота fTxC(RxC)/x определяет скорость передачи в Бодах (baud) или битах в секунду (bps). Для УСАПП обе скорости совпадают. В асинхронном режиме комбинация D1,D0 = 01 недопустима. Максимальную скорость обмена данными нетрудно вычислить. Пусть fCLKmax = 2МГц, тогда fTxC(RxC) = fCLK/4.5 =444444,44Гц. В асинхронном режиме дополнительный коэффициент деления должен быть не менее 16-ти (см. инструкцию режима). Поэтому максимальная скорость обмена равна 444444,44Гц / 16 = 27777 бит в секунду.
Число информационных бит в кадре определяется битами D3,D2 инструкции режима.
Биты D5,D4 задают вид контроля за правильностью передачи. Если производится контроль четности, то УСАПП-передатчик вычисляет "сумму по модулю два" информационных бит и полученный бит суммы вставляет в передаваемый кадр в качестве бита контроля четности. УСАПП-приемник снова вычисляет сумму "сумму по модулю два" информационных бит и если значение принятого и вычисленного бита контроля совпадают - делается вывод об отсутствии искажений при передаче по линии связи. Этот метод позволяет выявлять только нечетное число искажений бит информации и самого бита контроля, поэтому обычно контроль четности/нечетности не применяется и длина кадра уменьшается на один тактовый интервал. В современных устройствах связи применяются более сложные методы контроля за правильностью передачи (CRC-контроль, передача с подтверждением приема и др.).
ФОРМАТ КОМАНДЫ УПРАВЛЕНИЯ
Ниже в таблице приведены некоторые биты команды управления.
Разряд | Обозначение | НАЗНАЧЕНИЕ КОМАНДЫ |
D0 | TxEN | Разрешение работы УСАПП в качестве передатчика, D0=1 |
D2 | RxEN | Разрешение работы УСАПП в качестве приемника, D2=1 |
D4 | ER | Сброс в ''0" флагов ошибок, D4=1 |
D6 | RESET | Программный сброс УСАПП в исходное состояние, D6=1 |
ФОРМАТ БАЙТА СОСТОЯНИЯ
В процессе работы можно осуществлять контроль за работой УСАПП путем чтения байта его состояния. Ниже в таблице приведены некоторые наиболее употребительные в асинхронном режиме биты состояния УСАПП.
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
FE | OE | PE | RxRDY | TxRDY |
Биты D5,D4,D3, называемые также флагами, устанавливаются/сбрасываются приемником УСАПП сигнализируя:
PE=1 (Parity Error), если УСАПП зафиксировал ошибку при контроле четности/нечетности,
OE=1(Overrun Error), если была попытка считать в микропрцессор передаваемый из линии в приемник код, до завершения его полной передачи,
FE=1(Frame Error), если приемник не обнаружил стоп-бит(ы).
Бит RxRDY (Готовность приемника), если RxRDY=0, то приемник еще не преобразовал последовательный код в параллельный и считывать его в микропроцессор бессмысленно.
Бит TxRDY (Готовность передатчика) - если TxRDY=0, то передатчик еще не преобразовал параллельный код в последовательный и загрузка следующего кода из МП в передатчик исказит текущее передаваемое значение.
Ниже приводится фрагмент программы передачи массива байтов, хранящихся в памяти.
Начальный адрес массива символов - 8007(HEX). Передается 8 байтов: fd,87,9c,88,40,55,8a,b8. Адреса таймера 80,83 и УСАПП 9c,9d были получены ранее. Коэффициент деления частоты fCLK(N0=5)>4.5.
;++++ настройка и запуск делителя частоты
mov al,1eh; CT0,1 мл.байт, режим 3, код BIN out 83h,al; вывод байта упр. 1e в порт 83 mov al,5 ; коэфф. деления частоты Fclk N0=5 out 80h,al; и запись его в CT0 по адресу 80
;++++ настройка УСАПП ...........
mov al,40h; программный сброс D6=1 out 9dh,al;
mov al,0cfh;инструкция режима: 2 стоп-бита, out 9dh,al ;нет контроля,8 инф. бит, fTxC(RxC) / 64
mov al,01h;разрешение передачи TxEN =1 out 9dh,al;
;++++ передача массива символов
mov cl, 8; число передаваемых символов
mov bx,8007h; начальный адрес блока
nxt: mov al,[bx]; переслать текущий байт в AL
out 9ch,al; и вывести его в УСАПП
wt: in al,9dh; чтение байта состояния
shr al,1; символ передан в линию? ( TxRDY =1?),
jnc wt; если нет,то подождать,
inc bx; если да, перейти к адресу след. байта
dec cl; переданы все байты?
jnz nxt; если нет,то повторить вывод след. байта
........; если да,то выйти из цикла.