Материал: Системное программирование

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

Разряд ERDAI разрешает прерывание по готовности принимаемых данных. Прерывание возникает при передаче принятого символа из сдвигающего регистра приемника RSR в буферный регистр RBR.

Табл. 112. Формат регистра разрешения прерывания.

Биты

7

6

5

4

3

2

1

0

Значение

0

0

0

0

EMSI

ERLSI

ETHREI

ERDAI

Разряд ETHREI разрешает прерывание по готовности регистра хранения передатчика THR. Прерывание возникает при передаче символа их регистра THR в сдвигающий регистр TSR.

Разряд ERLSI разрешает прерывание по изменению регистра состояния линии LSR. Прерывание возникает при установке флагов (одного или всех сразу) OE, PE, FE или BI в 1. Последующий анализ регистра LSR позволит определить причину прерывания.

Разряд EMSI разрешает прерывание по состоянию модема. Прерывание возникает при установке одного или всех сразу флагов DCTS, DDSR, TERI или DDCD регистра состояния модема MSR в 1. Последующий анализ регистра MSR позволит определить причину прерывания.

Когда происходит одно из перечисленных событий, в контроллере преры­ваний инициируется аппа­ратное прерывание IRQ3 для порта СОМ2 и IRQ4 для порта COM2. Процедура обработки прерываний передает управление подпрограмме, на которую указывает соответствующий вектор прерывания. Пос­кольку прерывание аппаратное, оно может быть маскиро­вано.

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

Табл. 113. Приоритеты прерываний.

Приоритет

Описание

1

Состояние линии приемника.

2

Готовность принимаемых данных.

3

Готовность регистра хранения передатчика.

4

Состояние модема.

Регистр идентификации прерывания IIR (Interrupt Identification Register) хранит информацию о прерывании с наивысшим приоритетом (табл. 114). Разряд INP сообщает об отложенных прерываниях. Если таковых нет, флаг равен 1. При наличии нескольких прерываний, требующих обработки, флаг равен 0 и флаги IID0 и IID1 кодируют прерывание с наивысшим приоритетом. Разряды IID0 и IID1 идентифицируют прерывание.

Табл. 114. Формат регистра идентификации прерывания.

Биты

7

6

5

4

3

2

1

0

Значение

0

0

0

0

0

IID1

IID0

INP

Типы прерываний, их приоритеты и действия для сброса прерывания перечислены в табл. 115. Таким образом, при одновременном появлении нескольких прерываний бит 0 регистра IIR будет установлен в 0. Если такая ситуация имеет место, перед завершением обработки прерывания следует снова прочитать регистр IIR и обработать следующее прерывание. Так следует поступать до тех пор, пока бит 0 регистра IIR не станет равным 1.

Табл. 115. Кодирование типов прерываний.

Регистр IIR

Причина прерывания

Действия для сброса

IID1

IID0

INP

0

0

1

1

1

0

Ошибка OE,PE или FE, сигнал BREAK.

Считать содержимое LSR.

1

0

0

Готовность принимаемых данных.

Считать символ из RBR.

0

1

0

Регистр THR пуст.

Считать данные из IIR или записать данные в THR.

0

0

0

Сигналы CTS,DSR,RI или DCD изменились с момента последнего считывания из MSR.

Считать данные из MSR.

Регистры делителя скорости передачи. Микросхема 8250 использует программируемый генератор скорости передачи, который использует 16-разрядный делитель частоты внешнего опорного сигнала. Типичной тактовой частотой внешнего опорного сигнала является 1.8432 МГц. Формула вычисления делителя скорости передачи данных имеет вид:

,

где – частота внешнего опорного сигнала в герцах.

Делитель скорости записывается в два байта. Формат регистров делителей приведен в табл. 116 и 117. Для передачи делителя в регистры флаг DLAB регистра управления линией LCR должен быть установлен в 1, в противном случае по этим двум адресам значения будут адресо­ваны в регистры THR и IER. Регистры скорости обмена всегда следует устанавливать первыми, т.к. они единственные, которые требуют установки бита DLAB регис­тре контроля линии LCR. После этого необходимо сбросить бит DLAB в 0.

Табл. 116. Младший значащий разряд делителя.

Биты

7

6

5

4

3

2

1

0

Значение

D7

D6

D5

D4

D3

D2

D1

D0

Табл. 117. Старший значащий разряд делителя.

Биты

7

6

5

4

3

2

1

0

Значение

D15

D14

D13

D12

D11

D10

D9

D8

Старший байт делителя передается по адресу 3F9H (или 2F9H), младший – по адресу 3F8H (или 2F8H). Зависимость скорости передачи данных от некоторых значений делителя частоты представлена в табл. 118. Первый столбец делителя содержит старший значащий байт MSB, второй – младший значащий байт LSB.

Табл. 118. Скорость передачи данных.

Скорость передачи, Бод

Значение делителя

MSB

LSB

110

1047h

417h

300

384h

180h

1200

96h

60h

2400

48h

30h

9600

12h

0Ch

19200

6

6

38400

3

3

57600

2

2

115200

1

1

Регистр сверхоперативной памяти SCR (Scratch Register) является 8-разрядным и служит для временного хранения данных. Его содержимое не влияет на работу адаптера. Формат хранения данных регистра приведен в табл. 119. При использовании регистра в прикладных программах следует помнить, что его услугами могут пользоваться и другие программы, поэтому всегда необходимо сохранять в стеке его содержимое, а затем вновь восстанавливать.

Табл. 119. Формат регистра сверхоперативной памяти.

Биты

7

6

5

4

3

2

1

0

Значение

D7

D6

D5

D4

D3

D2

D1

D0

Регистр состояния модема MSR (Modem Status Register) позволяет узнать текущие значения сигналов состояния модема и фиксировать их изменения с момента последнего считывания данных из MSR (табл. 120). При считывании разряды регистра сбрасываются в ноль и их необходимо вручную восстанавливать.

Табл. 120. Формат регистра состояния модема.

Биты

7

6

5

4

3

2

1

0

Значение

DCD

RI

DSR

CTS

DDCD

TERI

DDSR

DCTS

Разряд DCTS (сброс передатчика) позволяет отследить изменение входного сигнала CTS. Любое изменение приводит к установке разряда в 1.

Разряд DDSR (готовность модема) отслеживает уровень сигнала на входе DSR, что приводит к установке в 1.

Разряд TERI (задний фронт сигнала или «указатель вызовов») отслеживает изменение сигнала на входе RI, что приводит к установке в 1.

Разряд DDCD («указатель несущей» или «указатель сигнала на линии приема») отслеживает любое изменение сигнала на входе DCD и устанавливает 1.

Разряд CTS («сброс передатчика») указывает текущее значение сигнала на входе CTS.

Разряд DSR («готовность модема») указывает текущее значение сигнала на входе DSR.

Разряд RI («указатель вызовов») указывает текущее значение сигнала на входе RI.

Разряд DCD («указатель несущей») указывает текущее значение сигнала на входе DCD.

Регистр управления модемом MCR (Modem Control Register) выдает управляющие сигналы устройству сопряжения, например, модему (табл. 121).

Табл. 121. Формат регистра управления модемом.

Биты

7

6

5

4

3

2

1

0

Значение

0

0

0

LOOP

OUT2

OUT1

RTS

DTR

Источник: https://files.student-it.ru/previewfile/284711