Разделы
Публикации
Популярные
Новые
Главная » Системы передачи данных

1 2 3 4 5 6 ... 38

Принципиальный недостаток как поразрядного, так и побайтового алгоритмов - большое число сдвигов, объединений по исключающему ИЛИ и условных переходов, которые должны выполняться для каждого бита в блоке сообщения. Анализируя ЦИК-алгоритм можно, однако, выделить эффекты этих многократных операций и свести их к одной величине.

При использовании этого метода восемь старших ргьзрядов аккумулятора объединяются по исключающему ИЛИ с байтом данных. В результате получается промежуточная величина, которую часто называют объединяющей величиной (combining value). Далее рассчитывается ЦИК для этой объединяющей величины, который затем объединяется с младшими разрядами аккумулятора для получения нового ЦИК.

На первый взгляд может показаться, что этот алгоритм не дает каких-либо преимуществ. Заметим, однако, что расчет ЦИК выполняется только для промежуточной величины и что имеется только 256 возможных промежуточных величин. Благодаря этому расчет полного ЦИК можно свести к алгоритму с табличным управлением. Табличный вариант расчета 16-разрядного ЦИК представлен в виде программ на ассемблере (листинг 2.5) и Си (листинг 2.6). Заметим, что в этих примерах перед выполнением ЦИК-вычислений должна быть вызвана отдельная подпрограмма для генерации таблицы. Возможен и альтернативный бестабличный алгоритм - с использованием кодирования объединяющих величин как данных.

Листинг 2.5. Программа расчета 16-разрядного ЦИК на ассемблере (табличный алгоритм)

GEI CRC16 TABI.E

Генерирует ЦИК-таблицу для 256 возиошшх сбъединяпии величин. Используется СКС16 ВУГЕ-продедура для генерацкк ЦИК.

Алтернативно, эти величины могут кодироваться как данные.

ВХ = порождавший многочлен

Изиененна: АХ DX SI DI

CRC16 TBL DW 256 DUP (О)

CRC16 TBL EID EQU $-2

GE1I CRC16 TABLE PROC lEAR

GEI:1:

Ошибки, их обнаружение и коррекция ASSUHE CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG

nOV SI,256 ;Число

;обрабатываемых ;байтов

DI,OFFSET CRC16 TBL EID ;Конец таблицы

;Послать обратно

HOV STD

DEC HOV

AX, SI

SUB DX.DX CALL СКС16 ВУТЕ

AX.DX

SI,SI

;Поместить эту ;величину в AL ;для ЦИК

;Сброскть ЦИК

;Получить ЦИК ;байта

;Записать ;в таблицу

HOV STOSU

OR JIZ

CLD RET

GEI CRC16 TABLE EIDP CRC16 TABLE

Преобразует байт в 16-разрядм1Й ЦНК табличным методом. Таблица должна быть сгенерирована до вызова процедуры.

AL = байт данных

DX = ЦИК-аккумулятор (О при первом вызове) DS:BX -> ЦИК-таблица Выход:

DX = обновленный аккумулятор

Изменения: АХ DX DI

CRC16 TABLE PROC lEAR

ASSUHE CS:CSEO, DS:CSEG. ES:CSEG, SS:CSEG

SUB AH.AH XOR AL.DH

HOV DI.AX

;Очнстнть ah ;06ъеднняяцвя ;величина

;Сделать DI



DI.DI

;b индекс-регистра

DH.DL

;SHL DX,8

DL.DL

DX.[BX][DI]

;XOR H3 таблицы

CRC16 TABLE EIDP

Листинг 2.6. Программа расчета 16-разрядного ЦИК на языке Си (табличный алгоритм)

int CRC16 TBL[256] ;/ ЦИК сбъедннявлцис величин /

void CRCl6 Gen Table(void)

Эта функция генерирует ЦИК-таблнцу для 256 возкожиих

объединянщих величин.

Используется CRCie.Byte-JyKKWM для генерации ЦИК.

Альтернативно, эти величины могут кодироваться как данные.

void CRC16 Gen Table() {

int j ;

for (j=0; j<2S6 ; j++) {

CRC16 TBL[jl=CRC16 Byte(0, t(char)j, 1) ;

/ ===

int CRCl6 Table(int, char*, int) *

Эта фуниция вычисляет 16-разрядныН ЦИК для блока данных

табличный методом.

Первый аргумент - начальное значение ЦИК.

Второй аргумент - указатель блока данных.

Третий аргумент - число байтов в блоке.

Функция возвращает 16-разрядный ЦИК как целув величину.

int CRCl6 Table(erc, msg, neg len)

int crc ;/ исходное значение ЦИК, О при первом вызове */

char nag ;/ укакатвль блока сообщения / int msg.len ;/* число байтов в блоке /

int cval ;

while( sg.len~ > О) <

/* получить объедниявцун величину /

cval = ( (сгс 8) - iiisg++) к OxFF ;

crc = (crc 8) - CRC16 TBL[cval] ; /* новый ЦИК /

return (crc к OxFFFF) ; / возвратить 16 младших разрядов /

Вычисления 32-разрядного ЦИК. Вычисления 32-разрядного ЦИК - это просто более общий случай 16-разрядных вычислений, они могут быть выполнены с использованием поразрядного, побайтового и табличного методов. Некоторые отличия в реализации требуют, однако, пояснения.

Расчет и использование 32-разрядного ЦИК (с порождающим многочленом CCITT-32) описываются в рекомендации V.42 МККТТ. В следующей ниже выдержке из этого документа ЦИК называется контрольной последовательностью блока (frame check sequence, PCS) - весьма причудливое название для контрольной ЦИК-величины.

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

На приемной стороне обычно выполняется следующая последовательность операций: все разряды регистра устройства, вычисляющего остаток, устанмливаются в 1. Тогда при отсутствии ошибок передачи конечный остаток после умножения на а, и де.пения (по модулю 2) на порождающий многочлен ... поступающих в последовательной форме защищаемых разрядов и контрольной последовательности блока должен иметь значение 1100 0111 0000 0100 1101 1101 0111 1011 (коэффициенты при х^,х^°.. .х° соответственно).

Процедуры вычислений 32-разрядного ЦИК представлены в листингах 2.7 и 2.8 (ассемблер и Си соответственно). При внимательном рассмотрении этих примеров может показаться, что эти



процедуры работают задом наперед по сравнению с приведенным выше описанием и предыдущими примерами вычислений 16-разрядного ЦИК. Так, данные сообщения вводятся в младший байт ЦИК-аккумулятора, а не в его старший байт, и данные сдвигаются слева направо, а не справа налево. Начальная установка ЦИК-аккумулятора - логические 1 во всех разрядах, вместо логических 0. И наконец, порождающий многочлен 04CllDB7h (CCITT-32) поразрядно инвертируется и используется как EDB88320h (заметим, что старший единичный разряд порождающего многочлена отбрасывается еще до инверсии).

В определенном смысле расчет 16-разрядного ЦИК с использованием порождающего многочлена CCITT-16 - это программная эмуляция аппаратной реализации ЦИК-вычислений. Напротив, в стандартных реализациях вычислений 32-разрядного ЦИК используется в большей степени программно-ориентированный подход, упрощающий программирование. Многие программные продукты, например популярная программа архивации PKZIP, используют приведенный здесь метод расчета 32-разрядного ЦИК. Заметим, что до тех пор, пока все операции остаются согласованными друг с другом, указанное обращение ЦИК-алгоритма не оказывает никакого влияния на его работу.

GEI.l:

HOV SID

DEC HOV

SUB CALL

STOSD

OR JIZ

CLD RET

;обрабатнваеных ;разрядов

DI,OFFSET CRC32 TBL EHD ;Конец таблицы ;Переслать ;обратно

;Поместить эту ;величину в AL ;для ЦИК

;Сбросить ЦИК

;Получить ЦИК ;байта

;Записать в ;таблицу

EAX.ESI

EDX.EDX CRC32 BYTE

EAX.EDX

SI,SI GEI.l

GEI CRC32 rABLE EIDP

Листинг 2.7. Программа расчета 32-разрядного ЦИК на ассемблере (табличный алгоритм)

GEI CRC32 TABLE

Генерирует ЦИК-таблицу для 256 возможных объедкнямцкх величин. Используется СНС32 В¥ТЕ-лроцедура для геиерацки таблицы.

Альтернативно, зтн величины могут кодироваться как данные.

ЕВХ = порождаиций многочлен

Изменения: ЕАХ EDX ESI DI

CRC32 TBL DD

CRC32 TBL EHD EQU

256 DUP (О) $-4

0EI CRC32 TABLE PROC lEAR

ASSUHE CS:CSEG, DS:CSEG, ES:CSEG. SStCSEG

ESI,256

;Число

CRC32 TABLE

Преобразует байт в 16-разрядный ЦИК табличным методом. Таблица должна быть сгенерирована до вызова процедуры.

------------

AL - байт данных

EDX = ЦИК-аккумулятор

DS:BX -> ЦИК-таблица

EDX = обновленный аккумулятор

Изменения: АХ СХ EDX DI

CRC32 TABLE PROC lEAR

ASSUHE CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG

SUB XOR

AH, AH AL.DL

HOV DI.AX ADD DI.DI ADD DI.DI

;Очистить ah ;0бъеднняв1 ая ; величина

;Сделать DI

;в индекс-регистре



HOV CL,8

SHR EDX.CL

XOR EDX,[BX]CDI]

;XOR HS таблицы

Листинг 2.8. Программа расчета 32-разрядного ЦИК на языке Си (табличный алгоритм)

define CRCPOLY 0xEDB88320L / порождающий кногочлен СС1ТТ-32 / unsigned long CRC32 TBL[256l ; / ЦИК обьединяищих величин /

CRC32.TABLE EIDP

CRC32 BYTE

Преобразует байт в 32-разрядный ЦИК (побайтовый алгоритм)

AL = байт даиных

ЕВХ - порожданишй многочлен CCITT-32

EDX = ЦИК-аккуиулятор

EDX = обновленный аккунулятор

Изменения: АХ СХ EDX

CRC32 BYTE PROC lEAR

ASSUHE CS:CSEG. DS:IOTHIIG, ES:IOTHIIG, SS:IOTHIIG

C l:

CLC RCR JIC

DL.AL

CX,8

EDX.l C 2

C 2:

EDX.EBX LOOP C l

iXOR данных с младшим байтом ;аккумулятора

;Число обрабатываемых разрядов

;Сдвиг ЦИК-аккунулятора ;CY = отброшеный бнт был 1

;Еслн так, то XOR аккунулятора ;с порождаиким многочленом

;Повторить для каждого бита

CRC32 ByTE EIDP

void CRC32 Gen Table(void) *

Эта функция генерирует ЦИК-таблнцу для 256 возиожных

обьединяяших величин.

Используется CRC32 Bytв-фyнкция для генерации ЦИК.

Альтернативно, эти величины ногут кодироваться как данные.

void CRC32 Gen.Table() {

int j ;

for (j=0; j<256 ; j++) {

CRC32 TBL[j]=CRC32 Byte(0L. (char)j, l) ;

unsigned long CRC32 Table(unsigned long, char, int)

Эта функция вычисляет 32-разрядннй ЦИК для блока данных

табличным методой.

Первый аргумент - начальное значение ЦИК.

Эторой аргумент - указатель блока данных.

Третий аргумент - число байтов в блоке.

Функция возвращает 32-разрлдн|( ЦИК как long-велнчину.

unsigned long CRC32 Table(crc, nsg, nsg.len)

unsigned long crc ; /♦ исходное значение ЦИК ♦/ char nsg ; / указатель блока сообкення */

int nsg.len ; / число байтов в блоке /

int cval ; Bhile(nisg len~ > О) {

/ получить объеднняпшун величину /

cval = ( crc msg++) к OxFF ;

crc = (ore 8) - CRC32 TBL[cval] ; / новый ЦИК / }

return (crc) ;



unsigned long CRC32 Byte (unsigned long, char*, int)

Эта функция вычисляет 32-разрядный ЦИК для блока данных

(побайтовый алгоритм).

Первый аргунент - начальное значение ЦИК.

Второй аргунент - указатель блока данных.

Третий аргунент - число байтов в блоке.

Функция возвракает 32-разрядкый ЦИК как long-велнчииу.

unsigned long CRC32 Byte(crc, nsg, nsg.len)

unsigned long crc ; char nsg ; int nsg len ; {

int j ;

/ исходное значение ЦИК / / указатель блока данных / / число байтов в блоке /

while (nsg len~ > О) {

/ XOR байта данннх со старыня байтом аккумулятора */ crc = ( crc * nsg++) к OxFF ;

for(j = 0; j<8; -w-j) { / проверить каждый бит /

if(crc к IL ) / если LSB = 1 /

crc = (crc 1) - CRCPOLY ; / сдвиг и XOR /

else

crc г crc 1 ; /* миаче просто сдвиг /

return (crc) ;

Таким образом, при вычислении 32-разрядного ЦИК для передачи необходимо выполнить следующие стандартные операции.

Инициализировать ЦИК-аккумулятор: его начальная установка FFFFFFFFh (-1).

Пропустить каждый байт сообщения через ЦИК-алгоритм.

Дополнить до 1 содержимое ЦИК-аккумулятора. Это можно сделать или с помощью логической операции НЕ, или объединяя содержимое аккумулятора по исключающему ИЛИ с FFFFFFFFh. Результирующая величина есть контрольная последовательность блока.

Добавить контрольную последовательность блока в конец сообщения.

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

Инициализировать ЦИК-аккумулятор: его начальная установка FFFFFFFFh (-1).

Пропустить каждый байт сообщения через ЦИК-алгоритм.

Пропустить четыре байта контрольной последовательности блока через ЦИК-алгоритм. В результате должна получиться двоичная последовательность DEBB20E3h.

Если при передаче не внесено никаких ошибок, то результат 32-разрядного ЦИК-алгоритма не равен О (в отличие от случая расчета 16-разрядного ЦИК). Вместо этого безошибочный результат должен быть равен DEBB20E3h. Это следствие двух причин: иной инициализации ЦИК-аккумулятора (FFFFFFFFh вместо 0) и использования операции дополнения до 1 исходного ЦИК для получения контрольной последовательности блока. (Заметим, что данный результат есть просто поразрядно инвертированный вариант безошибочной контрольной последовательности блока, описанной в приведенной выше выдержке из МККТТ-протокола.)

Для удобства программирования может быть желательным иметь на приемной стороне ЦИК-алгоритм, дающий в результате О, если не обнаруживается никаких ошибок. Такой алгоритм реализуется с помощью следуюищх операций.

Инициализировать ЦИК-аккумулятор: его начальная установка FFFFFFFFh.

Пропустить каждый байт сообщения через ЦИК-алгоритм.

Дополнить до 1 содержимое ЦИК-аккумулятора.

Пропустить четыре байта контрольной последовательности блока через ЦИК-алгоритм. В результате должен получиться 0.

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



рассчитанной контрольной последовательностью. Если эти две величины совпадают, то ошибки в сообщении отсутствуют.

Исправление ошибок

Три выражения часто встречаются при обсуждении протоколов обработки ошибок: обнаружение ошибок, контроль ошибок и исправление ошибок. Не попадитесь в ловушку равнозначного использования этих терминов, как это часто делается во многих компьютерных публикациях. Эти три термина различаются как по смыслу, так и по связанным с ними действиям.

Термин обнаружение ошибок обычно используется в тех случаях, когда речь идет о методах проверки целостности передаваемых данных. Примерами являются контроль четности, метод контрольной суммы, ЦИК-контроль. Эти методы могут отличаться по своей эффективности, но максимум того, что они могут сделать - это указать на наличие ошибки. Хорошая схема обнаружения ошибок сообщает вам, например, что полученные вами данные искажены.

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

Например, согласно протоколу XMODEM приемник должен проверить данные на наличие ошибок. Если никаких ошибок не обнаружено, приемник посылает передатчику сообщение, указывающее, что данные переданы без искажений. При обнаружении ошибки приемник выдает запрос передатчику на повторную передачу искаженных данных. В предположении, что ошибка была вызвана кратковременным сбоем, этот протокол в конечном счете обеспечивает безошибочную передачу.

Последний термин - исправление ошибок - используется для . обозначения такой формы кодирования данных, которая обеспечивает не только обнаружение ошибок, но также позволяет приемнику исправлять эти ошибки без повторной передачи данных. Эта процедура, известная как исправление ошибок с упреждением {forward error correction, FEC) обычно используется в ситуациях, когда повторная передача данных невозможна или неудобна, а целостность данных должна быть обеспечена.

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

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

Код Хемминга

Код Хемминга - это код с исправлением ошибок, описанный Хем-мингом (R. W. Hamming) в журнале The Bell System Technical Journal (апрель 1950 г.). Код Хемминга обеспечивает обнаружение и исправление всех одноразрядных ошибок в символе. Он наиболее эффективен для символов с небольшим числом разрядов - например, от 4 до 8 разрядов. При увеличении числа разрядов в символе вероятность пропустить многоразрядную ошибку, против которой код Хемминга бессилен, возрастает.

Предположим, например, что мы имеем 4-разрядный символ abed, где а,Ь,си d - двоичные цифры. Три дополнительных разряда кода Хемминга определяются тогда следующим образом:

е = а + Ь + с,

f = a + b + d,

д = a + c + d,

где операция сложения выполняется по модулю 2 и дает в результате одну двоичную цифру. Эти три новых разряда добавляются затем к четырем исходным разрядам и результирующий 7-разрядный символ передается как abcdefg.

На приемном конце значения трех последних разрядов e,f и д перерассчитываются и сравниваются с принятыми значениями этих разрядов. Если принятые и рассчитанные значения этих трех разрядов совпадают, то считается, что данные приняты без искажений.



Таблица 2.2. Интерпретация значений трех дополнительных разрядов кода Хемминга

е

е

Разряд с ошибкой

Ошибок нет

е

с

Ь

а

X - несовпадение полученного и рассчитанного зна^ чевий.

Если же ЭТИ значения не совпадают, то информация, представленная в табл. 2.2, используется для определения разряда, в котором появилась ошибка. Значение этого разряда затем дополняется до 1 для исправления ошибки.

При внимательном рассмотрении табл. 2.2 легко установить число информационных разрядов, которые могут быть защищены от ошибок с помощью заданного числа дополнительных разрядов кода Хемминга. Использование п дополнительных разрядов позволяет сгенерировать 2 различных двоичных комбинаций. Одна комбинация должна быть зарезервирована для безошибочной передачи. По одной комбинации необходимо также зарезервировать для указания возможной ошибки в каждом из дополнительных разрядов. Остальные комбинации можно использовать для указания ошибок в информационных разрядах. Это соотношение можно выразить следующей формулой:

m = 2 - п - 1,

где п - число дополнительных разрядов кода Хемминга и m - число защищаемых информационных разрядов.

Глава 3

Из гл. 1 вы уже знаете, что последовательная связь - это просто последовательная реализация трех процессов: преобрг13ования данных в некоторый сигнал, передачи этого сигнала по каналу связи и последующего обратного преобразования сигнала в данные. Процессор в принципе может выполнить последовательный ввод-вывод, необходимый для обеспечения последовательной связи, хотя это довольно громоздкая процедура. Она заключается в использовании командных циклов для задания синхронизации и переключении значений битов порта ввода-вывода для требуемого изменения выходных уровней. Следует отметить, что некоторые специализированные интерфейсы (например, программы, рг1зработанные для посылки и получения кодов Морзе) до сих пор осуществляются именно по этой схеме.

Для того чтобы не вникать в детали управления работой основного микропроцессора, разрабатываются языки программирования высокого уровня. Неудивительно, что концепция высокоуровневого интерфейса была применена и к последовательной связи. В результате создана специализированная однокристальная микросхема, известная как универсальный асинхронный приемопередатчик, УАПП (UART), выполняющая все необходимые функции управления последовательным вводом-выводом.

УАПП часто представляют как очень сложную и труднопрограм-мируемую микросхему, но это не так. По сути дела, УАПП - это отдельный микропроцессор со своей собственной (исключительно простой) системой команд. И, если вы усвоили основные принципы последовательной связи, у вас не возникнет никаких трудностей с программированием этого устройства.

В данной главе рассматривается внутренняя архитектура микросхем УАПП, которые обычно используются в стандартных персональных компьютерах фирмы IBM. Сначала обсуждается схемотехническая организация УАПП, а затем объясняются принципы работы некоторых его структурных единиц и функциональных узлов. После



этого обсуждается система регистров для каждого из рассматриваемых типов УАПП. В конце главы приведена короткая утилита для определения типа микросхемы УАПП, используемой в системе.

Функции УАПП

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

При передаче символа УАПП должен выполнить следующие операции.

Принять символ (как данные в параллельной форме) от ПК.

Преобразовать символ в последовательность отдельных битов (параллельно-последовательное преобразование).

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

Передать все биты сформированного кадра на интерфейс с требуемой скоростью (в бодах).

Сообщить о готовности к передаче следующего символа.

Работая в режиме приемника, УАПП должен выполнить обратную последовательность операций.

Принять данные в последовательной форме от интерфейса.

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

Осуществить проверку четности (независимо от ее типа); если четность нарушена, выдать сигнал ошибки четности.

Преобрг13овать информационные разряды в символ. Передать символ (как данные в параллельной форме) в ПК.

Сообщить, что символ принят.

Микросхемы УАПП 8250 и 16450

Исходная системная плата IBM PC не содержгша никаких специальных схем для осуществления последовательной связи. Эту функцию обеспечивал расположенный на отдельной плате адаптер, называемый асинхронным коммуникационнъш {связнъш) адаптером (фирмы

IBM). Адаптер был построен на микросхеме INS8250 фирмы National Semiconductor - однокристальном УАПП, изготавливаемом с использованием технологии больших интегральных схем (БИС).

За время, прошедшее с начала выпуска, микросхема INS8250 несколько раз модифицировалась. Нынешний ее вариант - INS8250-B. Недавно фирма National Semiconductor изменила обозначение этой микросхемы: INS8250-B теперь называется РС8250С. Все модификации микросхемы 8250 идентичны по большинству своих функциональных характеристик. Однако некоторые ранние модификации, хотя они и функционируют надлежащим образом в рамках паспортных технических условий, дают сбои при программировании на работу со скоростями передачи, превышающими 38400 бод. Такие микросхемы обычно используются в IBM PC устаревших моделей и на устаревших асинхронных платах расширения. Если микросхема 8250 установлена в панель, простая замена старой микросхемы на одну из ее новых модификаций решает все проблемы быстродействия.

Микросхема РС16450С (бывшая NS16450) - полный функциональный аналог микросхем NS16450 и INS8250A. По сравнению с последними она имеет улучшенные временные характеристики и изготавливается с использованием КМОП-технологии. Эти факты представляют интерес только для разработчиков микросхем. Поскольку с точки зрения программиста эти УАПП совершенно идентичны, то на все микросхемы типа 8250 фирмы National Semiconductor, эквивалентные им УАПП, выпускаемые другими фирмами, и любые другие устройства, эмулирующие эти УАПП, я всюду буду ссылаться просто как на микросхему 8250.

Характеристики и функциональные возможности

По замыслу микросхема 8250 предназначена для обеспечения интерфейса между шиной адреса/данных IBM PC и модемом или другими внешними устройствами. Высокая степень интеграции этой микросхемы позволяет сконструировать на ее основе адаптер последовательной связи с использованием минимального числа внешних компонентов. В данном разделе, однако, рассматривгьется только УАПП (т. е. сама микросхема), а использование УАПП в системе IBM PC обсуждается в гл. 4.

Микросхема 8250 избавляет микропроцессор от большей части забот , связанных с обеспечением последовательной связи. УАПП, например, автоматически добавляет, проверяет и удаляет кадрирую-цдае биты. Аналогично автоматически генерируются во время переда-



чи и проверяются при приеме биты четности. Регистрируются любые ошибки четности, и сообщения о них передаются процессору. Микросхема 8250 вырабатывает набор отдельных указателей для состояний операций передачи и приема, а также указателей, сообщающих о состоянии линии и устройства сопряжения (модема). Эти указатели могут быть считаны процессором или запрограммированы на генерацию прерываний. Наличие встроенных регистров хранения данных и сдвиговых регистров для операций передачи и приема исключает необходимость точной синхронизации работы процессора с потоком последовательных данных.

Микросхема содержит программируемый генератор-контроллер скорости передачи в бодах, обеспечивающий деление частоты внешнего опорного сигнала (не более 8 МГц) на коэффициент, который может изменяться от 1 до 65535. Результирующий сигнал на выходе этого генератора представляет собой 1б-фазную последовательность синхронизирующих импульсов, управляющих работой внутренних логических схем передатчика. Тот же самый 16-фазный синхронизирующий сигнал в принципе можно использовать в качестве опорного сигнала независимых^) часов приемника, для того чтобы гарантировать правильность выборки принимаемых данных.

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

Блок-схема

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

1) От потока принимаемых данных. - Прим. персе.

рой осуществляется обмен, информацией. Это функциональное разделение иллюстрируется на рис. 3.1 в виде упрощенной блок-схемы, представляющей внутреннюю структуру УАПП 8250. Блок-схема показывает взаимосвязи меясду отдельными структурными составляющими и некоторые сигналы, которые обычно передаются в том и другом направлениях.

Описание регистров

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

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

Некоторые программируемые сигналы присутствуют на выходах микросхемы 8250 в комплементарном виде. Другими словами, запрограммированной логической 1 соответствует выходной сигнал с уровнем логического О и наоборот. Для согласования с технической документацией, относящейся к УАПП, и другими справочными руководствами фактические выходные сигналы будут указаны ниже с соответствующими комментариями. Следует, однако, иметь в-виду, что в стандартной реализации последовательного порта эти сигналы инвертируются последующими логическими схемами, на выходах которых они уже соответствуют программируемым логическим уровням. Вообще, программист может не обращать внимания на комплементарный характер сигналов на выхода: УАПП.

Регистр хранения передатчика, РХП (THR). Процесс последовательной передачи данных инициализируется, когда процессор за-



Рис. 3.1. Блок-схема УАПП 8250/16450

Коммуникационный интерфейс

От-Do Данные в

ПК-интерфейс Внутренняя

шина

данных УАПП

Буфер шини данных

Регистр разрешения прерываний

Схема

INTR

управления

прерываниями

регистр ввода^ыводг прерываний

Регистр сверхоперативной памяти

. CSO

CS2 CSOUT

WR.WRC=JS

RD.RD CZp! DDIS---

MR

Схема i6op8 кристалла

Схема выбора регистра

Схемы выбора режима записи/ считывании

Регистр управления модемом

Регистр состояния модема

СЗР делителя скорости передачи

МЗР делителя скорости передачи

Контроллер-генератор

Регистр состояния линии

Регистр хранения передатчика

Генеретор опорного синхросигнала УАПП (8 МГц макс.)

Т

т

Схемы управления модемом


Синхронизация и управление передатчиком

Сдвигающий

регистр передатчика

-DTR -RfS

- DSR

- CTS

- бсс

Буферный регистр приемника

-,-1

Сдвигающий регистр приемника

Регистр управления пинией

Синхронизация

приемником

BAUDOUT

SOUT

писывает один байт данных в регистр хранения передатчика, РХП (THR) микросхемы 8250. По завершении операции записи УАПП немедленно передает этот байт данных непосредственно в свой внутренний сдвиговый регистр передатчика (TSR). Здесь данный байт преобразуется в последовательную форму, к нему добавляются биты четности и кадрирования, и полученная вереница битов направляется на последовательный выход (SOUT) микросхемы.

РХП, который называют также буферным регистром передатчика (TBR), адресуется как УАПП-регистр 0. РХП - регистр только для записи. Практическим следствием данного факта является только то, что байт, записываемый в РХП, в дальнейшем недоступен для считывания. Если нужно сохранить значение этого байта, процессор должен разместить его где-нибудь в памяти.

Формат (структура разрядной сетки) РХП показан на рис. 3.2. Младший значащий разряд символа, предназначенного для передачи, записывается в разряд О - младший значащий разряд регистра. Напомним, что в силу исторических причин младший значащий разряд символа передается первым по линии последовательной передачи. Принимающий УАПП знает об этом, так что программиста не должна волновать данная проблема.

Буферный регистр приемника, БРП (RBR). Данные в последовательной форме, принимаемые на последовательном входе (SIN) микросхемы 8250, освобождаются от кадрирующих битов и битов четности, и информационные разряды направляются в сдвиговый регистр приемника (RSR). В этом регистре из требуемого числа информационных разрядов собирается символ. Сформированный символ затем пересылается в буферный регистр приемника БРП (RBR), откуда он впоследствии может быть считан процессором. Заметим, что сборка символа из требуемого числа разрядов осуществляется в сдви-

Рис. 3.2. Формат регистра хранения передатчика (РХП) и буферного регистра приемника (БРП). Информационный разряд do передается и принимается первым

<1б

-Информационные разряды



1 2 3 4 5 6 ... 38
© 2004-2024 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки.
Яндекс.Метрика