Процесс передачи сообщения 1 страница

1. Первичная станция. При передаче информационного l-кадра указывает в поле Ns его порядковый номер: Ns = Vs. Запускает таймер ожидания ответа Т1 и увеличивает значение счетчика переданных кадров Vs := Vs+1.

2. Вторичная станция. При получении кадра из сети запускает таймер выдачи ответа Т2, который измеряет максимальное время от получения пакета до выдачи ответа. Полу­чив адресованный ей информационный l-кадр, станция сравнивает значение в поле Ns-кадра со значением счетчика ожидаемых кадров Vr. Если значения совпали, то кадр пе­редается в буфер, а значение счетчика увеличивается Vr := Vr+1. Если буфер перепол­
нен, то пакет сбрасывается, станция переходит в режим «занято» и посылает первичной
станции уведомление в виде S-кадра типа RNR со значением поля Mr = Vr. Станция-
передатчик, получив такой кадр, останавливает передачу новых l-кадров и повторную
передачу неподтвержденных l-кадров, пока не получит S-кадр типа RR или REJ, либо же
не истечет интервал ожидания ответа, контролируемый таймером Т1.

Получив без ошибок кадр от первичной станции, вторичная станция должна передать подтверждение приема кадра. Если у станции есть данные для передачи, то подтверж­дение посылается в l-кадре, установив значение поля Nr := Vr. Если данных для переда­чи нет, то посылается управляющий S-кадр типа RR со значением поля Nr = Vr.

Если же вторичная станция приняла без ошибок кадр с порядковым номером Ns <> Vr, то станция переходит в режим «прием неупорядоченного l-кадра», не учитывает информа­цию из принятого кадра и посылает S-кадр переспроса типа REJ с номером Nr = Vr. После передачи этого кадра станция игнорирует все l-кадры, пока не будет принят без ошибок I-кадр с номером Ns = Vr.

Если у станции истекает интервал, ограниченный таймером Т2, то первичной стан­ции уведомление не пересылается, так как значения таймеров Т1 и Т2 подобраны так, что если станция-приемник не выдаст подтверждение до окончания счета Т2, то кадр не успеет дойти по станции-передатчика до окончания счета Т1.

3. Первичная станция. Ожидает пока не придет или подтверждение в виде информа­
ционного l-кадра, или S-кадр (типа RNR или REJ). После получения этих кадров станция
останавливает таймер ожидания ответа Т1 и переходит к передаче следующего кадра
данных. Получив подтверждение приема Nr-1-го кадра в пакете REJ, станция прерывает
передачу новых Ι-кадров и повторно передает Ι-кадры с номерами от Nr до Ns. Если станция передавала S-кадры или U-кадры, то она заканчивает их передачу и только по­том начинает повторную передачу 1-кадров. Если истек интервал ожидания ответа, то станция передает управляющий S-кадр типа RR, RNR или REJ с установленным битом опроса Р = 1 и снова запускает таймер Т1. Эти действия производятся для определения изменения статуса станции приемника.

4. Вторичная станция. В ответ на прием S-кадра определения статуса с установлен­
ным битом опроса F = 1 станция передает S-кадр типа RNR, установив бит F := 1, указы­
вая, что она продолжает оставаться в состоянии «занято», или S-кадр типа RR, или REJ
с битом F = 1, если состояние «занято» снято. Состояние «занято» заканчивается, если
станция снова может принимать информационные Ι-кадры.

5. Первичная станция. Если истек таймер ожидания ответа Т1, а ответ о статусе
станции не пришел, то снова посылается кадр запроса о статусе. Число повторных попы­-
ток посылки это кадра ограничено конкретной реализацией протокола.

 

Использование режима повторной передачи. Режим повторной передачи может быть начат первичной станцией и без использования специального REJ-пакета с помощью меха­низма P/F-битов. Согласно требованиям протокола, на каждый кадр, передаваемый с битом Р = 1, должен прийти кадр ответа с битом F = 1. Передача новых кадров с битом Р = 1 не начинается, пока не будет получен ответный кадр с битом F = 1. Таким образом, если на переданный кадр с установленным битом Р = 1 не пришел ответ и истек интервал ожидания ответа, контролируемый таймером Т1, то первичная станция, не ожидая получения REJ-кадра, может произвести повторную передачу.

Если текущая версия протокола поддерживает S-кадры типа SREJ, то вторичная стан­ция может запросить повторную передачу только одного искаженного кадра, запомнив при этом все принятые неупорядоченные l-кадры. Кадр SREJ передается станцией полу­чателем, если она не получила l-кадр с номером Ns-1 = Vr, при этом в кадре указывается номер кадра Mr = Vr, который станции передатчику необходимо повторно передать. Это кадр также служит подтверждением приема l-кадров с номерами Ns < Nr.

Передав SREJ кадр, станция-приемник не может больше передавать новые SREJ-кадры, связанные с новыми ошибками, пока не придет правильный повторный 1-кадр с номером, указанным в первом SREJ-кадре. Так как передача нового SREJ-кадра может привести к подтверждению приема Ι-кадра, запрос на повторную передачу которого пе­редан в первом SREJ-кадре и который может быть еще не получен станцией приемни­ком. Для повышения эффективности передачи SREJ-кадров было принято соглашение, что все SREJ-кадры запрашивают повторную передачу Ι-кадра с номером Nr, но только кадры с установленными битами P/F = 1 подтверждают прием информационных кадров с номерами Ns < Mr, a SREJ-кадры с битами P/F = 0 не используются для подтверждений приема информационных кадров.

HDLC-контроллер. Основные режимы работы. HDLC - один из наиболее извест­ных протоколов канального уровня управления 7-уровневой модели OSI. Решения, при­меняемые в протоколе для контроля за процессом передачи, оказались настолько удач­ными, что многие другие протоколы (SDLC, SS#7, LAPD, LAPB) базируются на основе HDLC-протокола и используют его алгоритмы обработки кадров данных. Формат HDLC-кадра показан на рис. 5.112.


Для синхронизации приемника и передатчика, а также для выделения кадра данных из потока битов на физическом уровне OSI применяется механизм ограничения кадра открывающим флагом в начале и закрывающим флагом в конце. Флаги имеют уникаль­ный формат 01111110 (0х7Е), который не может встречаться внутри области, ограничен­ной флагами. Для этого при передаче данных применяется процедура bit-stuffing, кото­рая производит при передаче вставку нулевого бита после каждых пяти следующих под­ряд единичных битов и удаление этого нулевого бита при приеме кадра.

Введение в формат кадра поля адреса позволяет протоколу работать с групповыми адресами и в многоточечных соединениях. Размер адресного поля зависит от конкрет­ной реализации протокола. Обычно HDLC-протокол использует или 8- или 16-битное поле адреса.

Поле контроля (8- или 16-битное) предназначено для указания типа передаваемого кадра (информационный l-кадр, управляющий S-кадр, служебный U-кадр) и для нумера­ции пакетов при выполнении контроля за передачей и контроля правильности последо­вательности принимаемых пакетов.

В поле данных передается информация 3-го (сетевого) уровня модели OSI. Размер поля данных ограничивается только типом конкретной реализации протокола. Если па­кет, содержащий данные сетевого уровня управления, невозможно передать внутри од­ного кадра данных HDLC-протокола, то длинные кадры при передаче разбиваются на части и каждая часть пакета нумеруется по модулю 8 или 128. Номер пакета передается в поле контроля.

Для контроля за правильностью передаваемой информации используются или 16-разрядные, или 32-разрядные циклические коды. Результат контроля записывается в 16-битное поле контрольной суммы CRC. При передаче байта данных первым передается младший значащий бит LSB, но при передаче байта CRC поля первым передается стар­ший значащий бит MSB. Такой порядок передачи позволяет начинать проверку конт­рольной суммы поступающей информации сразу же после приема первого бита данных.

Настройка SCC-контроллера на работу с HDLC-протоколом выполняется в регистре GSMR при программировании битов MODE. Настройка режимов работы HDLC-контроллера выполняется в регистре PSMR (рис. 5.113). HDLC-контроллер может работать с любым ISDN-интерфейсом (IDL, GCI или РСМ) и выдавать информацию в В-канал или в D-канал, или может работать с внешними контактами соответствующего SCC-контрол­лера при работе в NMSI-режиме. Обычно из-за большого количества хорошо продуман­ных управляющих функций HDLC-протокол используют для управления передачей ком­муникационного контроллера и передач данных по D-каналу ISDN-интерфейса.

Для работы в кольцевых структурах в контроллере МРС860 реализован дополнитель­ный режим работы контроллера HDLC bus. Биты BUS в регистре конфигурации PSMR (рис. 5.113) определяют режим работы HDLC-контроллера (0 - нормальный HDLC-кон­троллер, 1 - контроллер HDLC bus).

Для управления передачей HDLC-контроллера, работающего в режиме HDLC bus, в регистре режима введен бит BRM. Если BRM = 0, то сигнал работает нормально, он выставляется = 0 при начале передачи первого бита и сбрасывается = 1 по окончании передачи, или если обнаружена коллизия во время передачи. Режим с уста­новленным битом BRM = 1 используется при передаче в протяженных сетях. В этом режиме вначале выставляются данные, а затем, с задержкой на 1 бит, вырабатывается активный сигнал о начале


передачи = 0, который используется для резервирова­ния канала передачи и буферов в контроллере приемнике. Такой способ обмена часто применяется в сетях, где первый бит кадра данных служит для обнаружения коллизий, и реальные данные начинаются только со второго бита.

HDLC-контроллер имеет полностью независимую приемную и передающую части. Только если контроллер работает в мультиплексируемом режиме, его приемник и пере­датчик должны иметь одинаковую тактовую частоту, поступающую от внешнего источни­ка. При работе в NMSI-режиме приемник и передатчик могут иметь различные тактовые частоты, которые могут поступать или от внутреннего генератора BRG, или от внешнего источника. HDLC-контроллер поддерживает и синхронный, и асинхронный режимы рабо­ты SCC-каналов.

Приемник и передатчик каждого HDLC-контроллера имеют полностью независимые таблицы буферных дескрипторов BD для работы с буферами данных. Контроллер поддер­живает мультибуферную структуру, когда длинный кадр данных может быть расположен в нескольких буферах данных. Для указания первого буфера кадра в слове состояния BD используется бит F = 1 (First), а для указания последнего буфера кадра - бит L = 1 (Last). При работе с мультибуферной структурой пользователь может подготавливать следую­щие буферы данных постепенно, по мере обработки уже подготовленных буферов. Только в этом случае возможно возникновение ошибки переполнения (overrun) при приеме дан­ных и ошибки незаполнения (underrun) при передаче, если центральный процессор не ус­пеет вовремя подготовить новые буферы данных к тому моменту, когда будет завершена обработка старых.

Пользователь может управлять работой передатчика HDLC-контроллера с помощью команд STOP TRANSMIT, GRACEFUL STOP TRANSMIT, RESTART TRANSMIT, INIT TX PARAMETERS и работой приемника с помощью команд ENTER HUNT MODE, INIT RX PARAMETERS.

В СРМ добавлена возможность выключить работу приемника при передаче данных передатчиком этого же канала контроллера. Данный режим выбирается при программи­ровании значения бита DRT := 1. При этом приемник будет находиться в выключенном состоянии, пока выставлен сигнал передачи RTS = 0. Такой режим работы полезен, когда линии данных приемника и передатчика объединены в одну шину (режим multidrop), и пользователь не желает принимать данные, которые он сам передает в текущий момент времени.

Распределение памяти параметров в микроконтроллере МРС860 приведено в табл. 5.77.

 

 


Таблица 5.77

Память параметров HDLC-протокола в микроконтроллере МРС860

 

Адрес Название Размер, бит Описание
SCC base+30 - Зарезервировано
SCC base+34 C_MASK Константа CRC
SCC base+38 C_PRES Начальные значения CRC
SCC base+3C DISFC Счетчик непринятых кадров
SCC base+3E CRCEC Счетчик ошибок контрольной суммы CRC
SCC base+40 ABTSC Счетчик принятых ABORT-последовательностей
SCC base+42 NMARC Счетчик несовпадений адресов при приеме
SCC base+44 RETRC Счетчик переданных кадров
SCC base+46 MFLR Максимальная длина кадра
SCC base+48 MAX_cnt Текущая длина кадра
SCC base+4A RFTHR Число принятых кадров до прерывания
SCC base+4C RFCNT Счетчик принятых кадров
SCC base+4E HMASK Регистр маски адресов
SCC base+50 HADDR1 Адрес, заданный пользователем
SCC base+52 HADDR2 Адрес, заданный пользователем
SCC base+54 HADDR3 Адрес, заданный пользователем
SCC base+56 HADDR4 Адрес, заданный пользователем
SCC base+58 ТМР Ячейка временного хранения
SCC base+5A ТМР_ MB Ячейка временного хранения
Примечание. Все переменные в таблице, кроме ячеек MAX_cnt, RFCNT, ТМР и ТМР_МВ,
ТМР_МВ инициализируются пользователем до начала работы с HDLC-контроллером.

Прием данных. При приеме данных HDLC-контроллер в МРС860 может без вмеша­тельства центрального процессора принимать до 196 кадров, удалять открывающие и закрывающие флаги, распознавать, кому адресован пакет, проверять контрольную сум­му и контролировать максимальную длину пакета.

После включения в работу приемник ожидает получение открывающего флага кад­ра. Когда флаг получен, далее контроллер проверяет содержимое поля адреса, чтобы определить, ему адресован пакет или нет. Для операций с адресами в памяти парамет­ров HDLC-контроллера выделены четыре регистра адреса HADDR1-HADDR4 и один регистр маски адреса HMASK. Контроллер проверяет адрес, полученный в пакете, на совпадение с одним из четырех допустимых адресов, при этом учитывается содержи­мое регистра маски. Если некоторый бит регистра маски равен единице, то при сравне­нии адресов в этих битах в регистрах HADDR и в поле адреса принятого пакета должно быть совпадение. Если бит в регистре маски равен нулю, то при сравнении адресов совпадение этих битов необязательно. Например, если необходимо контролировать все 16 разрядов адреса в пакете, то регистр маски HMASK = 0xFFFF, если же достаточ­но контролировать только восемь младших разрядов адреса, то HMASK = 0x00FF. Мас­кирование отдельных разрядов адреса при сравнении часто используется при работе с групповыми адресами. Если пользователь желает установить для работы с контролле­ром только один сетевой адрес, то во все регистры HADDRi необходимо записать одно и то же значение единственного адреса. HDLC-контроллер допускает работу с широко­вещательными адресами, для этого в одной из ячеек HADDRi достаточно записать ши­роковещательный (broadcast) адрес 0xFFFF.

Если пакет принят без ошибки, но совпадения адресов в регистрах и в поле адреса пакета не произошло, то пакет игнорируется и увеличивается счетчик непринятых паке­тов в ячейке NMARC памяти параметров HDLC-контроллера.

Если совпадение адреса в принятом пакете с одним из допустимых адресов про­изошло, то содержимое пакета, начиная с поля адреса, записывается в память. Для это­го HDLC-контроллер проверяет готовность следующего буфера BD для записи в него данных. Если бит незанятости в слове состояния BD E = 1, то контроллер производит запись информации в этот буфер по каналам SDMA. После заполнения текущего буфера контроллер сбрасывает бит Е := 0 и, если установлен бит прерывания в слове состояния текущего BD I = 1, вырабатывает прерывание к центральному процессору, чтобы он мог начать обработку данных из этого буфера. Если же прием текущего кадра еще не закон­чен, то контроллер проверяет, свободен ли следующий буфер BD в таблице дескрипто­ров, чтобы продолжить запись информации в данный буфер. Этот процесс повторяется, пока не будет принят весь кадр данных.

Во время приема данных HDLC-контроллер контролирует длину принимаемого кадра (размер полей кадра в байтах между ограничивающими флагами). Пользователь может в ячейке MFLR памяти параметров задать максимально допустимую длину кадра дан­ных для этой сети. Если длина текущего кадра достигла этого предела, прием кадра в буфер прекращается и в слове состояния последнего BD устанавливается бит приема длинного кадра LG := 1. Далее контроллер, не принимая данные из кадра, дожидается окончания кадра, устанавливает в слове состояния последнего BD соответствующие биты статуса принятого кадра и записывает длину реально принятого кадра в последний бу­фер кадра. В ячейке MAX_CNT памяти параметров вычитающий счетчик ведет подсчет текущей длины принятого кадра. При начале приеме нового кадра в эту ячейку загружа­ется значение максимальной допустимой длины кадра MAX_CNT := MFLR. Для получен­ной и записанной в буфер части длинного кадра также вычисляется контрольная сумма, которая записывается в последний буфер кадра.

По окончании приема кадра нормальной длины заново вычисляется контрольная сум­ма кадра по всем полям внутри ограничивающих флагов, которая сравнивается с содер­жимым поля контрольной суммы. Если произошла ошибка сравнения контрольных сумм, то принятая контрольная сумма записывается в последний буфер кадра, затем буфер закрывается, в слове состояния последнего BD устанавливается бит ошибки проверки контрольной суммы CR := 1 и вырабатывается, если разрешено, RXF-прерывание к цен­тральному процессору через регистр событий канала. При этом увеличивается счетчик CRC ошибок в ячейке CRCEC памяти параметров, и приемник переходит в режим «охо­ты» (режим поиска нового кадра).

Если проверка контрольной суммы закончилась успешно, то контроллер устанавли­вает в слове состояния последнего BD биты состояния кадра, закрывает буфер и сбра­сывает бит свободное™ этого буфера Е := 0. Далее контроллер генерирует, если разре­шено, прерывание к центральному процессору, уведомляя его, что кадр получен и нахо­дится в памяти, и переходит в режим приема нового кадра.

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

Для временного хранения принятой информации каждый HDLC-контроллер имеет внутренние буферы FIFO. Данные из FIFO по SDMA-каналам под управлением RISC-контроллера начинают передаваться в соответствующие буферы памяти, как только бу­дут получены первые 8-32 байта кадра. Если RISC-контроллер не успевает очищать ячейки FIFO для приема новой информации из сети и в момент прихода новой порции данных все ячейки FIFO окажутся занятыми, то возникает ошибка переполнения бусре-ров overrun. При этом контроллер будет вынужден записать новые данные поверх ста­рых, что приведет к потере информации. Далее текущий буфер закрывается, в его слове состояния устанавливается бит ошибки переполнения OV := 1 и через регистр событий генерируется, если оно разрешено, прерывание к центральному процессору. В некото­рых случаях, если размер FIFO минимален и RISC-контроллер работает с максимальной загрузкой, это прерывание может возникнуть при приеме и анализе поля адреса в любом пакете, даже если этот пакет адресован другому контроллеру. В случае возникновения ошибки переполнения контроллер после вышеуказанных действий переходит в режим «охоты» (поиска нового кадра).

Если кадр данных, адресованный данному контроллеру, был принят без ошибок, но RISC-контроллер не нашел свободных буферов для сохранения данных, то информация из кадра сбрасывается и увеличивается счетчик непринятых кадров в ячейке DISFC па­мяти параметров.

Во время приема кадра данных контроллер постоянно проверяет наличие сигнала на линии . Если во время приема этот сигнал будет потерян ( = 1), то контроллер прекращает прием, закрывает текущий буфер, устанавливает в слове состояния текуще­го BD бит потери сигнала (CD := 1) и генерирует, если разрешено, прерывание RXF через регистр событий. Эта ошибка имеет самый высокий приоритет, и после ее обнару­жения другие ошибки не проверяются, а приемник переходит в режим поиска нового кад­ра (hunt-режим).

Длина всех полей в HDLC-кадре всегда кратна 8 битам. Если принят кадр с длиной, не кратной 8, то он сохраняется в буфере, затем буфер закрывается, устанавливается бит ошибки NO := 1 в слове состояния BD и генерируется, если разрешено, RXF-преры-вание центрального процессора через регистр событий контроллера. Результат провер­ки контрольной суммы этого кадра игнорируется.

Если во время приема кадра контроллер получил из канала подряд семь и более единичных бит, то регистрируется ошибка принятия ABORT-последовательности. Теку­щий буфер закрывается, в слове состояния BD устанавливается бит ошибки АВ := 1 и генерируется, если разрешено, прерывание RXF через регистр событий. Контроллер уве­личивает счетчик принятых ABORT-последовательностей в ячейке ABTSC памяти пара­метров, и приемник переходит в режим «охоты». Принятый кадр игнорируется, проверка его контрольной суммы CRC и кратности 8 битам не производятся.

Передача данных. Для синхронизации станций в канале при включении в работу пе­редатчик HDLC-контроллера начинает передавать символы флага (формат 01111110). Если установлен бит FSE = 1 и бит RTSM в регистре GSMR равен единице, то между кадрами передается [NOF+1] флагов. Если же бит RTSM = 0, то между кадрами переда­ются IDLE-символы.

Далее контроллер начинает опрашивать готовность первого буфера BD. Если буфер готов, то данные по SDMA-каналу загружаются в буфер FIFO канала. Передав заданное пользователем число символов флага между кадрами, контроллер начинает передавать данные из FIFO в сеть. Минимальное число символов, передаваемых между соседними кадрами, задается в битах NOF3 – NOF0. Если в этих битах записан код 0000, то откры­вающий флаг одного кадра следует сразу без интервала за закрывающим флагом пре­дыдущего кадра.

Когда переданы все буферы текущего кадра, и контроллер обнаружил в слове состоя­ния последнего буфера BD установленный бит L = 1 (Last), то он передает в канал конт­рольную сумму кадра и закрывающий флаг. Если биты CRC = 00, то контрольная сумма вычисляется с помощью 16-разрядного циклического кода. Если биты CRC = 10, то конт­рольная сумма вычисляется по 32-разрядному циклическому коду. Вид образующего по­линома задается пользователем в ячейках C_MASK памяти параметров, где «1» в i-бите соответствует включению в полином слагаемого X в степени i. Для полинома Х16125+1 в этой ячейке хранится код OxOOOFOB8, а для полинома Х32+ Х262322+ Х1612 + + Х1110в75421+1 - код 0xDEBB20E3. При инициализации параметров HDLC-контроллера в ячейку C_PRES памяти параметров записывается начальное значение счетчика CRC. Для 16-разрядного полинома это код 0x0000FFFF, а для 32-разрядного -0xFFFFFFFF. Пользователю не рекомендуется при работе изменять содержимое ячеек, связанных с настройкой работы счетчика CRC, так как это может привести к неправиль­ному применению теории циклического кодирования.

Формирование контрольной суммы начинается сразу же при начале передачи первого бита кадра данных. Временные промежуточные значения контрольной суммы хранятся в ячейках TCRC памяти параметров при передаче и в ячейке RCRC - при приеме данных.

32-битная контрольная сумма часто используется, если необходимо пересылать па­кеты между сетями HDLC и Ethernet. При согласовании форматов пакетов в узле комму­тации целесообразно использовать одинаковый формат 32-разрядной CRC, чтобы упро­стить и ускорить преобразование форматов, а не тратить дополнительное время на пе­рекодировку 16-разрядной контрольной суммы в 32-разрядную.

Если все данные из текущего буфера переданы в сеть, то RISC-контроллер сбрасы­вает бит готовности буфера R := 0 в слове состояния BD, чтобы центральный процессор мог в этом буфере подготовить новые данные для передачи. Если текущий буфер был еще и последним буфером кадра, то контроллер дополнительно устанавливает биты состояния кадра при передаче в слове состояния последнего буфера BD. Далее кон­троллер переходит к передаче данных из следующего буфера, если, конечно, в нем уста­новлен бит готовности к передаче R = 1.

Если в слове состояния переданного буфера был установлен бит I = 1 (Interrupt), то после окончания передачи буфера будет генерироваться прерывание. Пользователь может гибко устанавливать требования прерывания после передачи каждого буфера, после передачи определенных буферов или после передачи всех буферов кадра.

Пользователь может в любой момент времени остановить передачу и переопреде­лить содержимое буферов, передав контроллеру команду STOP TRANSMIT. Часто эта команда используется, когда надо передать более приоритетные кадры данных из дру­гих буферов, прервав передачу текущих данных, или в случае возникновения ошибки при передаче текущей информации. Для передачи более приоритетных кадров без пре­рывания передачи текущего кадра в СРМ предназначена команда GRACEFUL STOP TRANSMIT. Получив команду остановки передачи STOP TRANSMIT, HDLC-контроллер начинает передавать в канал или символы IDLE, или символы флага и ожидает получе­ния команды RESTART TRANSMIT для возобновления передачи.

Если во время передачи обнаруживается ошибка, то HDLC-контроллер прерывает текущую передачу, закрывает буфер, устанавливает бит соответствующей ошибки в сло­ве состояния BD и генерирует, если разрешено, ТХЕ-прерывание через регистр событий SCC-канала. Получив команду возобновления передачи RESTART TRANSMIT, контрол­лер продолжает дальнейшую передачу.

При передаче регистрируются два типа ошибок. Ошибка незаполнения буфера underrun возникает, если при передаче мультибуферных кадров данных центральный процессор не успел подготовить для передачи новые буферы, содержащие данные теку­щего кадра, а данные из последнего подготовленного буфера уже переданы в сеть. При­знаком этой ошибки будет установка бита UN := 1 в слове состояния текущего BD.

При передаче HDLC-контроллер постоянно контролирует наличие сигнала = 0. Если этот сигнал будет сброшен ( = 1), то генерируется ошибка потери CTS-сигнала (ошибка коллизии). Признаком этой ошибки будет установка бита СТ := 1 в слове состо­яния текущего BD. Бит RTE в регистре конфигурации определяет действия контроллера при восстановлении сигнала = 0 после состояния коллизии. Если сигнал CTS был потерян при передаче двух первых буферов кадра и бит RTE = 1, то HDLC-контроллер просто начинает повторную передачу прерванного кадра данных и увеличивает на единицу счетчик повторных передач в ячейке RETRC памяти параметров контроллера. Если бит RTE = 0, то повторная передача не производится, и контроллер переходит к переда­че следующего кадра. Для того чтобы механизм обнаружения коллизий и повторных передач был успешно применен, размер первых двух буферов данных должен быть
не менее 36 байт для канала SCC1 и 20 байтов - для других SCC-каналов в контрол­
лере МРС860.