Программируемый периферийный интерфейс КР580ВВ55А



 

В состав IBM PC входит программируемый периферийный интерфейс (ППИ) i8255 (отечественный аналог KP580BB55A) рисунок4 .ППИ содержит три 8-разрядных порта (PA, PB, и PC) для организации обмена между ЦП и внешними устройствами, и регистр управления. Порты сгруппированы в две группы : группа А состоит из порта PA и старшей тетрады порта PC, группа B – из порта PB и младшей тетрады порта PC. Группа А может работать в трех режимах (0,1,2); группа B в двух (0 и 1). Режимы определяются содержимым регистра управления , имеющим формат изображенный на рисунке 2.5.


 

Рисунок 2.4 – условное графическое обозначение ППИ КР580ВВ55А


Рисунок 2.5 – Формат регистра управления ППИ

 

Режим 0 – основной режим Ввода – вывода (однонаправленный синхронный обмен).В этом режиме группа разделяется на два набора (порт и тетрада PC).В данном режиме порт PA,PB и тетрады (0-3), PC(4-7) могут использоваться для передачи данных между ЦП и внешними устройствами. Их можно программировать на ввод или вывод, для этого нужно лишь загрузить необходимую константу в управляющий регистр ППИ (рис.2)

Режим 1 – режим стробируемого ввода-вывода (однонаправленный асинхронный обмен по прерыванию). Порты РА и РВ используются для передачи данных, РС – для управляющих сигналов.

Режим 2 – режим двунаправленной шины (двунаправленный асинхронный обмен по прерыванию). Этот режим допустим только для группы А. В нем порт А становится двунаправленным, а 5-ть разрядов порта РС используются для управления портом РА.

ППИ в IBM РС занимает порты 60h – 63h. BIOS заносит в регистр управления (порт 63h) 99h, т.е. программирует группы А и В в режим 0, причем РА и РС является портами ввода, а РВ – портом вывода. Назначение портов следующее:

 

Таблица 2.3 – Назначение портов

Адрес Операция Назначение
60h чтение Вывод из порта РА
61h чтение запись Вывод из порта РВ Вывод в порт РВ
62h чтение Вывод из порта РС
63h запись Ввод управляющего слова в регистр управления ППИ

 

Содержимое порта РВ изображено на рисунке 2.6.

 

Рисунок 2.6 – Содержимое порта РВ

 

Генерация звука в IBM PC

 

Схема генерации звука в IBM PC изображена на рисунке 2.7.


 

 


Рисунок 2.7 - Схема генерации звука в IBM PC

 

На вход звукогенератора поступает логическое “И” двух сигналов: выхода OUT 2-го канала таймера и содержимого бита 1 порта РВ интерфейса i8255. Обычный способ генерации звука состоит в программировании канала 2 таймера так, чтобы он выдавал прямоугольный импульс заданной частоты, лежащий в звуковом диапазоне (20Гц – 20 КГц). Для этого следует использовать режим таймера 3 с подходящим начальным значением счетчика. Если затем установить биты 0 и 1 порта РВ, то импульс начнет поступать на вход звукогенератора (бит 0 – это вход GATE канала 2, разрешающий счет, а бит 1 – разрешение выдачи выхода OUT на вход звукогенератора). Для выключения звука достаточно сбросить биты 0 и 1 порта РВ. Преимущество этого метода состоит в том, что, запустив генерацию звука, ЦП может выполнять другие действия. Значение счетчика 2-го канала таймера вычисляется по формуле:

 

N = 1193181/F

 

где 193181 – тактовая частота таймера в Гц

F – требуемая частота звука в Гц

Например: Если необходимая частота равна 1 кГц = 1000Гц, тогда константа счетчика равна 1193181/1000 = 1193 (10с/с) = 4А9 (16с/с).

 

Выполнение задержки

 

В BIOS существует 4 ячейки памяти, в которых хранится системное время. В результате прерывания от таймера содержимое этих ячеек увеличивается на 1, т.е. каждые 55 мс этот изменяется. По адресу 0000:046E находится старшее слово, а по адресу 0000:046Е младшее слово системного счетчика времени.

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

Константа необходимой задержки считается следующим образом:

Задержка/55мс = константа

Например:

Если необходимая задержка равна 550мс, тогда константа равна 550мс/55мс = 10 (10с/с) = ОА (16с/c).

 

Область данных BIOS

 

Область основной памяти размером 256 байт расположена непосредственно ха таблицей векторов прерываний, начиная с адреса 0040:0000 и кончая 004F:0000, предназначена для использования программами BIOS. В таблице приведено описание части информации, помещаемой в BIOS в указанную область памяти. Обращаясь к ней, прикладные программы получают важную информацию о состоянии системы.

 

Таблица 2.4 – Область данных портов

Адрес (сегмент: смещение)

Длина (в байтах)

Наименование и описание

ОБЛАСТЬ ДАННЫХ ПОСЛЕДОВАТЕЛЬНОГО\ПАРАЛЛЕНЛЬНОГО ПОРТОВ

0040:0000

8

Базовый адрес ввода-вывода для COM1-COM4

0040:0008

8

Базовый адрес ввода-вывода для LPT1-LPT4

СМЕШАННАЯ ОБЛАСТЬ ДАННЫХ

0040:0010

2

Флаги оборудования

0040:0013

2

Обьём памяти в килобайтах

ОБЛАСТЬ ДАННЫХ КЛАВИАТУРЫ 1

0040:0017

1

Флаги 1 состояния регистров клавиатуры

0040:0018

1

Флаги 2 состояния регистров клавиатуры

0040:0019

1

Ввод с дополнительного клавиатурного поля

0040:001А

2

Адрес начла буфера клавиатуры

0040:001С

2

Адрес конца буфера клавиатуры

0040:01Е

32

Буфер клавиатуры

ОБЛАСТЬ НАКОПИТЕЛЯ FDD

0040:003Е

1

Состояние повторной калибровки

0040:003А

1

Состояние двигателя

0040:0040

1

Счетчик числа

0040:0041

1

Состояние последней операции

0040:0042

7

Байты состояния контроллера

ОБЛАСТЬ ДАННЫХВИДЕОАДАПТЕРА 1

 

 

0040:0049

1

Текущий видеорежим

0040:004А

2

Количество столбцов в отображаемом тексте

0040:004С

2

Длина буфера регенерации в байтах

0040:004У

2

Адрес смещения активной видеостраницы

0040:0050

16

Положение курсора (видеостраницы 0-7)

0040:0060

2

Тип курсора (нач. и кон. строки развертки)

0040:0062

1

Активная видеостраница

0040:0063

2

Базовый адрес видеоконтроллера

0040:0065

1

Текущая установка регистра 3х8

0040:0066

1

текущая установка регистра 3х9

ОБЛАСТЬ ДАННЫХ СИСТЕМНОГО ТАЙМЕРА

0040:006С

2

Младшее слово содержимого таймера

0040:006Е

2

Старшее слово содержимого таймера

0040:0070

1

Индикатор заполнения таймера

СИСТЕМНАЯ ОБЛАСТЬ ДАННЫХ

0040:0071

1

Байт BIOS_BREAK

0040:0072

2

Флаг сброса

ОБЛАСТЬ ДАННЫХ ЖЕСТКОГО ДИСКА

0040:0074

1

Состояние последней операции

0040:0075

1

Число накопителей HDD

ВРЕМЕНА ОЖИДАНИЯ РЕАКЦИИ (ТАЙМАУТЫ)

0040:0078

4

Значения времен ожидания для LPT1-LPT4

0040:007С

4

Значения времен ожидания для COM1-COM4

ОБЛАСТЬ ДАННЫХ КЛАВИАТУРЫ

0040:0080

2

Адрес начала буфера клавиатуры

0040:0082

2

 

ОБЛАСТЬ ДАННЫХ ВИДЕОАДАПТЕРА 2

0040:0084

1

Число отображаемых строк текста минус 1

0040:0085

2

высота символа в строках развертки

0040:0087

1

Параметры видеорежима

0040:0088

1

Параметры видеорежима

ОБЛАСТЬ СВЯЗИ МЕЖДУ ПРОГРАММАМИ

0040:00F0

16

Область, где программа может записать\считать данные (например статус)

 

Задание

 

Напишите программу генерации последовательности звуковых сигналов, имеющих следующие характеристики:

- Первый сигнал : частота F1, длительность T1.

- Второй сигнал : частота F2, длительность T2.

- Пауза между сигналами : длительность Р1

Характеристика F1, F2, T1, T2, P1 выбираются из таблицы задания согласно варианту.

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

- Первая подпрограмма выполняет генерацию звука.

- Вторая подпрограмма выполняет задержку.

- Основная программа выполняет вызовы подпрограмм в нужной последовательности.

 

№Варианта

F1, кгц

T1, мс

P1, мс

F2, кГц

Т2, мс

1

5

500

150

9,5

800

 


Рисунок 2.9 – Блок – схема основной программы

 

Основная программа

 

stac segment

    db 64 dup (0)

    ends

 

data segment

    stQ db 13,10,''

    ends

 

code segment

    assume  ds:data, cs:code, ss:stac

 

Start:

    mov ax,data

    mov ds,ax

    mov es,ax

 

    mov ah,09h

    lea dx,stQ

    int 21h

 

m0: call Sound0

    mov bx,00efh             

    call Sound

    mov dx, 0009h           

    call Sound2

    mov dx, 0003h           

    call Sound2

    mov bx,007eh             

    call Sound        

    mov dx, 000fh            

    call Sound2

 

    mov ah,02h

    int 16h

    and al,00100000b     

    jz  m0

    jmp m_end

 

Sound0 Proc near

    in al,[61h]               

    and al,0fch

    out [61h],al

ret

Endp

 

Sound Proc near                    

    mov bx,04a9h

    mov dx,0043h

    mov al,0beh

    out dx,al

    dec dx                       

    mov al,bl

    out dx,al

    mov al,bh

    out dx,al

    in al,[61h]               

    or al,03h

    out [61h],al

ret

Endp

 

Sound2 Proc near

    xor ax,ax

    mov es,ax

    mov ax,es:[046ch]      

    add dx,ax                  

m1: mov ax,es:[046ch]      

    cmp dx,ax                  

    jnz m1                      

    in al,[61h]               

    and al,0fch

    out [61h],al

ret

Endp

 

m_end:

    mov ax,4c00h

    int 21h

 

    ends

END Start

 

Рисунок 3 – Результат работы программы


ПРИНЦИП РАБОТЫ КЛАВИАТУРЫ

 

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

 

Рисунок 3.1 – Принципиальная схема клавиатуры

 

При нажатии любой клавиши микроконтроллер вырабатывает Scan-код нажатой клавиши. Scan-код отличается от стандартного ASCII кода символа. Scan-код – это просто номер клавиши на клавиатуре. Таким образом Scan-код клавиш ” F ” и “ f ” одинаков. Таблица некоторых Scan-кодов приведена ниже.

 


Таблица 3.1 – Набор Scan - кодов

16с\с

10с\с

клавиша

16с\с

10с\с

клавиша

16с\с

10с\с

клавиша

01

1

esc

1d

29

Ctrl

39

57

Space

02

2

1 !

1e

30

A

3a

58

Caps Lock

03

3

2 @

1f

31

s

3b

59

F1

04

4

3 #

20

32

d

3c

60

F2

05

5

4 $

21

33

f

3d

61

F3

06

6

5%

22

34

g

3e

62

F4

07

7

6 ^

23

35

h

3f

63

F5

08

8

7 &

24

36

j

40

64

F6

09

9

8 *

25

37

k

41

65

F7

0a

10

9 (

26

38

l

42

66

F8

0b

11

0 )

27

39

; :

43

67

F9

0c

12

- _

28

40

 "

44

68

F10

0d

13

= +

29

41

` ~

45

69

Num Lock

0e

14

<-

2a

42

Shift (L)

46

70

Scroll Lock

0f

15

tab

2b

43

\ |

47

71

Home 7

10

16

q

2c

44

z

48

72

↑ 8

11

17

w

2d

45

x

49

73

Pg Up 9

12

18

esc

2e

46

Ctrl

4a

74

 

13

19

r

2f

47

v

4b

75

 

14

20

t

30

48

b

4c

76

- 5

15

21

y

31

49

n

4d

77

↔ 4\6

16

22

u

32

50

m

4e

78

+

17

23

i

33

51

, <

4f

79

End 1

18

24

o

34

52

. >

50

80

↓ 2

19

25

p

35

53

/ ?

51

81

Pg Dn 3

1a

26

[ {

36

54

Shift ®

52

82

Ins 0

1b

27

] }

37

55

Prt Sc

53

83

del .

1c

28

Enter

38

56

Alt

54

 

 

 

Микроконтроллер передает скан-код в адаптер связи с клавиатурой, расположенный на системной плате. Адаптер связи преобразует полученный последовательный код в параллельный, передает его на входы порта ввода/вывода РА ППИ и устанавливает высокий уровень сигналаIRQ1- запрос на прерывание в контроллер прерываний КР1810ВН59Л. По этому сигналу контроллер формирует запрос на аппаратное прерывание процессора с вектором (типом прерывания) 09Н. Процессор прекращает свою работу и выполняет обработчик прерывания 09h. Который читает Scan-код из порта 60Н (порт РА ППИ) и анализирует Scan-код. Для дешифрации Scan-кодов обработчик прерывания 9h содержит специальную таблицу поиска. Обработчик также проверяет, не является ли скан-код кодом FFh, указывающим на переполнение 4-символьного аппаратного буфера Scan-кодов клавиатуры. При обнаружении кода FFh прерывание 9h сообщает о переполнении сигналом динамика. Когда поступает код от клавиши сдвига или переключателя, то в специальной переменной в памяти ПЭВМ фиксируется изменение статуса (например, переключение с верхнею регистра на нижний). Во всех остальных случаях Scan-код преобразовывается в код символа ASCII. Конечно, процедура сначала определяет установку клавиш сдвига и переключателей, чтобы правильно получить вводимый код (это "а" или "А"). После этого введенный код помещается в буфер клавиатуры, который представляем собой область памяти, способную запомнить до 15 вводимых символов, пока программа слишком занята, чтобы обработать их.

При чтении Scan-кода из порта ввода РА ППИ он не изменяется и любая другая программа может также его прочитать. Обработчик прерывания сообщает адаптеру связи с клавиатурой о завершении чтения скан-кода кратковременной установкой бита 7 порта вывода РВ IIПИ. По этому сигналу сбрасывается содержимое регистра адаптера связи и снимается сигнал запроса на прерывание IRQ1. Обработчик прерывания завершает свою работу выдачей сообщения контроллеру прерывания о завершении обработки. Для этого обработчик выдает код 20Н в порт 20Н (совпадение адреса порта и кода случайное).

Прерывание 9h является аппаратно-зависимым, поэтому его обработчик для 83-клавиатуры отличается от обработчика для расширенной 101-клавишной клавиатуры.


Таблица векторов прерываний

 

Для того чтобы связать адрес обработчика прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов - FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором - адрес сегмента обработчика прерывания.

 

Таблица 3.2 – Векторы прерываний

Номер

Описание

0

Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например при делении на 0). DOS обычно при обработке этого прерывание выводит сообщение об ошибке и останавливает выполнение программы. Для процессора 8086 при этом адрес возврата указывает на следующую после команды деления команду, а в процессоре 80286- на первый байт команды вызвавшей прерывание.

1

Прерывание пошагового режима. Вырабатывается после выполнения каждой машиной команды. Если в слове флагов установлен бит пофлаговой трассирови TF. Используется для отладки программ. Это прерывание не вырабатывается после выполнения команды MOV в сегментные регистры или после загрузки сегментных регистров командой POP.

2

Аппаратное немаскируемое прерывание. Это прерывание может использоваться по разному в разных машинах. Обычно вырабатывается при ошибке четности оперативной памяти или запросе прерывпания сопроцессора.

3

Прерывание для трассировки. Это прерывание генерируется при выполнении однобайтовой машиной с кодом CCh и обычно используется отладчиками для установки точки прерывания.

4

Переполнение. Генерируется машинной командой INTO, если установлен флаг OF. Если флаг установлен, то команда INTO выполняется как NOP Это прерывание используется для обработки ошибок арифметических операций.

5

Печать копии экрана. Генерируется при нажатии на клавиатуре PrtScr. Обычно используется для печати образа экрана. Для процессора 80286 генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за приделы заданного диапазона.

8

IRQ0 прерывание интервального таймера возникает 18,2 раза в сек

9

IRQ1 Прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши.

A

IRQ2 используется при каскадировании аппаратных прерываний в машинах класса АТ.

B

IRQ3 Прерывание асинхронного порта COM2

C

IRQ4 Прерывание асинхронного порта COM1

D

IRQ5 Прерывание от контроллера жесткого диска от XT

E

IRQ6 Прерывание генерируется контроллером флопи диска после завершения операции.

F

IRQ7 прерывание принтера. Генерируется принтером когда он готов к выполнению очередной операции. Многие адаптеры принтера не используют это прерывание.

70

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

71

IRQ9 прерывание от контроллера EGA

75

IRQ13 прерывание от математического сопроцессора

76

IRQ14 прерывание от контроллера жесткого диска

 

Прерыванию с номером 0 соответствует адрес 0000:0000. прерыванию с номером 1 - 0000:0004 и т.д. Поэтому прерыванию от клавиатуры 09h соответствует адрес 0000:0024. т.е.в ячейке с адресом 0000:0024 хранится смещение обработчика прерывания, а в ячейке с адресом 00:00026 хранится адрес сегмента этого обработчика прерывания.

Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке DOS. DOS может переключить на себя некоторые прерывания BIOS.

Ниже приведены назначения некоторых векторов прерываний:

 

Маскирование прерывани й

 

Часто при выполнении критических участков программ, для того чтобы гарантировать определенную последовательность команд целиком приходится запрещать прерывания. Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI

Запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.

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

 


Дата добавления: 2020-01-07; просмотров: 369; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!