Поиск по базе сайта:
Проектирование измерительных систем на основе нвл-08 icon

Проектирование измерительных систем на основе нвл-08




НазваПроектирование измерительных систем на основе нвл-08
Сторінка3/6
Дата конвертації26.11.2013
Розмір0.71 Mb.
ТипМетодические указания
1   2   3   4   5   6
1. /ISP DAS 081201.doc
2. /pci express.doc
3. /ris_int07.doc
4. /stup345.pdf
5. /wopint_08.doc
6. /Методичка по НВЛ08_050602.DOC
7. /Методичка по НВЛ08_081024.DOC
8. /Обзор.doc
9. /Парал_интерф/CompactPCI,PC104/Отчет.doc
10. /Парал_интерф/IEEE 1284_2.doc
11. /Парал_интерф/ISA.doc
12. /Парал_интерф/pci/pci-20/1.DOC
13. /Парал_интерф/pci/pci-20/2.DOC
14. /Парал_интерф/pci/pci-20/3.DOC
15. /Парал_интерф/pci/pci-20/4.DOC
16. /Парал_интерф/pci/pci-20/5.DOC
17. /Парал_интерф/pci/pci-20/6.DOC
18. /Парал_интерф/pci/pci-20/7.DOC
19. /Парал_интерф/pci/pci-20/8.DOC
20. /Парал_интерф/pci/pci-20/9.DOC
21. /Парал_интерф/pci/pci-20/CH1-3.DOC
22. /Парал_интерф/Спецификация PX1.doc
23. /Парал_интерф/Стандарт IEEE 1284.doc
24. /Парал_интерф/реферат по интерфейсам.doc
25. /Парал_интерф/хар_парал.инт.doc
26. /Послед_интерф/PCI_EXpr.doc
27. /Послед_интерф/RS485 для чайников.doc
28. /Послед_интерф/USB.doc
29. /Послед_интерф/Wi Fi.doc
30. /Послед_интерф/ПРЕОБРАЗОВАТЕЛИ ИНТЕРФЕЙСА USB.doc
31. /Послед_интерф/Реферат по ИРДА.doc
32. /Послед_интерф/стандарт CAN/Aldis.doc
33. /лит_инт.doc
34. /рб_пр_интерф_07.doc
С. П. Королева архитектура автоматизированных систем на основе модулей icp das серии i-7000
Курсовой проект «Интерфейс pci express»
Мс –модули сети, а адаптер, устройство согласования, цп
Вопросы по курсу "Интерфейсы асоиу" Общие вопросы организации интерфейсов
Проектирование измерительных систем на основе нвл-08
С. П. Королева проектирование измерительных систем на основе Многофункционального устройства нвл-08
Тема номера
Документация по интерфейсам: Compactpci, MicroPC, pc/104, pc/104+ Пояснительная записка к курсовому проекту по курсу "Интерфейсы асоиу"
Интерфейс ieee-1284
Интерфейс isa методические указания к курсу лекций «Интерфейсы автоматизированных систем обработки информации и управления» Самара 2005 Составитель: Иоффе Владислав Германович удк 681. 3 Интерфейс isa
Спецификация локальной шины pci
Реализация Хронология реализации
Реализация 0
Функционирование шины
Электрическая спецификация
Конструктивная спецификация
Руководство по системному проектированию pci, реализация 6, действует с 1 ноября 1992 года. Объединение запросов по техническим изменениям (ecrs)
Реализация 0
Диапазон сигнала Сопутствующие документы
Введение Содержание спецификации
Введение 2 Цель разработки 2 Терминология 3 Полезные ссылки 3 Обзор архитектуры pxi 3
С. П. Королева Стандарт ieee 1284 Подготовили: Есипов С. Б. Громов А. Е. Преподаватель: Иоффе В. Г
Министерство науки, высшей школы и технической политики российской федерации комитет по высшей школе самарский государственный аэрокосмический университет им. С. П. Королева факультет №6 Кафедра
Основные характеристики параллельных интерфейсов
Курсовой проект «Интерфейс pci express»
Ооо "Маяк": разводка печатных плат, разработка электронных систем управления
1. Общая характеристика 5 Структура usb 6
Пояснительная записка к курсовому проекту по дисциплине «Интерфейсы асоиу» на тему: «Интерфейс Wi Fi»
Преобразователи интерфейса usb на микросхемах ft8U232AM, ft8U245AM
Протокол связи IrDA
Протокол был разработан фирмой Robert Bosch GmbН для использования в автомобильной электронике, отличается повышенной помехоустойчивостью, надежностью и обладает следующими возможностями
Литература Основная литература
Федеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования «самарский государственный аэрокосмический университет имени академика С. П. Королева»
8. АНАЛИЗ И ФОРМИРОВАНИЕ ЧАСТОТНО-ВРЕМЕННЫХ СИГНАЛОВ


Недостатком устройства NVL08 при использовании в системах сбора и обработки данных является отсутствие аппаратных средств для анализа и формирования частотно-временных сигналов. В аналогичных устройствах для этих целей используются программируемые таймеры Intel 8254/8253. Техническое описание этой микросхемы приведено в приложении 2.

Этот недостаток может быть частично устранен за счет использования системного таймера персональной ЭВМ, который в IBM XT/AT/PS2 реализован на микросхеме 8254. В последующих моделях IBM таймер интегрирован в чипсетах, но при этом сохранена программная модель 8254.

В состав системного таймера входят 3 независимых 16-разрядных вычитающих счетчика, управление которыми осуществляется с помощью управляющего слова, задающего один из шести режимов работы, и аппаратно формируемого сигнала G. В момент перехода счетчика из состояния «все 0» в состояние «все единицы» на выходе OUT формируется сигнал, вид которого определяется выбранным режимом работы. (см. приложение 2). Особенностью системного таймера является:

  1. На вход CLC трех счетчиков таймера поступает входная частота 1,19318 МГц;

  2. Базовый адрес программируемого таймера   40h. Соответственно при обращении к счетчику 0 используется адрес 40h, счетчику 1 – 41h, счетчику 2 – 42h, управляющему регистру 43h;

  3. Счетчик 0 используется в системных часах времени суток (не следует путать с часами реального времени, реализованными на другой микросхеме). Этот канал работает в режиме 3 и используется как генератор импульсов с частотой примерно 18.2 Гц. Именно эти импульсы вызывают аппаратное прерывание IRQ 0.

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

Не следует перепрограммировать этот счетчик, так как это может привести к нарушениям в работе компьютера.

Счетчик 2 подключен к динамику компьютера и может быть использован для генерации различных звуков или музыки, либо как генератор случайных чисел. В счетчике используется режим 3 таймера 8254. Управление каналом и анализ его состояния можно выполнять с помощью системного регистра с адресом 61h: бит 0 этого регистра соединен с входом G2 8254, а выход OUT2 8254 – c битом 5.


Для чего может понадобиться перепрограммирование счетчиков таймера?


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

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

Другими областями применения системного таймера являются:

  • прерывание операционной системы с разделением времени через равномерные интервалы, чтобы она осуществляла переключение программ;

  • вывод точных временных сигналов с программируемыми периодами в устройство ввода-вывода (например, в аналого-цифровой преобразователь);

  • программируемая генерация скорости передачи в бодах;

  • измерение временной задержки между внешними событиями;

  • подсчет числа появлений событий во внешнем эксперименте и ввод показания в компьютер;

прерывание процессора после появления запрограммированного числа внешних событий.

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


8.1. Измерение моментов и длительностей интервалов времени


Знание моментов времени и длительностей временных интервалов необходимо, например, для оценки параметров измеряемых сигналов.

Достаточно точными (теоретическая разрешающая способность 0.83 мкс) и удобными являются методы, использующие возможности системного таймера. Продемонстрируем использование 0-го канала таймера, имея в виду, что в этом случае его перепрограммирование не требуется. Для определения полного количества импульсов ГТИ, поступивших на вход 0-го канала системного таймера после включения питания ПЭВМ, необходимо знание трех величин:

  • N - количества произошедших прерываний (накапливается по адресу 0:46Ch);

  • H - текущего значения сигнала OUT (хранится в слове состояния канала);

  • C - текущего значения счетчика.

Количество K импульсов может быть рассчитано по формуле


K = 65535*( N + not H +1 ) - C,


а соответствующее им время


T := K * 0.00000083 c.


Pascal:

Var N : Longint; C0, C1 : Byte; C, K, T : Real; H : byte;

. . .

N := memL[0:$46C]; {Определение количества прерываний}

Port[$43]:=0; {Защелкивание значения счетчика}

Port[$43]:=$D2; {Подготовка чтения значения счетчика}

C0 := Port[$40]; C1:=Port[$40]; C:=C0+C1*256.0; {Чтение счетчика}

Port[$43]:=$E2; {Подготовка чтения состояния канала}

H:=(Port[$40] and $80) shr 7; {Определение значения сигнала OUT}

K:=65535.0*(N + not H + 1) – C;

T:=K*0.00000083;


Самым точным является метод измерения моментов и длительностей интервалов времени, основанный на использовании машинной команды RDTSC (код 310Fh). Она определяет количество тактовых импульсов процессора, накопленное от момента включения питания. Эта команда доступна в стандартном режиме работы процессора и в режиме виртуального 8086, а также в программах защищенного режима, работающих в 0-м кольце защиты.


Pascal:

var a, b, c, d : word; t:extended;

. . .

asm

sub ax, ax

dw 0A20Fh (* CPUID – необходимо для сброса кэша *)

dw 0310Fh (* RDTSC *)

mov a, ax

db 066h, 0C1h, 0E8h, 10h (* shr eax,16 *)

mov b, ax

mov c, dx

db 066h, 0C1h, 0EAh, 10h (* shr edx,16 *)

mov d, dx

end;

t := a + b*65535.0 + c*655535.0*65535.0 + d*65535.0*65535.0*65535.0;


Соответствующее время может быть вычислено на основании длительности периода поступления тактовых импульсов. Например, для ПЭВМ с тактовой частотой F=360 МГц период тактовых импульсов составляет 2.7810-9 с.

Для измерения моментов и длительностей интервалов времени в прикладных программах Windows может быть использована функция Win32 API GetTickCount(). Ее разрешающая способность 0.001с.


8.2. Реализация временных задержек

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

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



Рисунок 8. Реализация временной задержки методом калиброванного цикла

Assembler:

; Реализация задержки методом калиброванного цикла



Coeff dw xxxx; xxxx-коэффициент задержки



Mov сx, Coeff ; инициализировать счетчик циклов



L1: ; тело цикла



Loop L1 ; проверить условие завершения и изменить значение счетчика



Pascal:

; реализация задержки методом калиброванного цикла



Var

Coeff: WORD; коэффициент задержки

i: WORD; счетчик



For I := 0 to Coeff do

Begin



; тело цикла



End;



Организация временной задержки с использованием системного таймера выполняется следующим образом:

Счетчик системного таймера декрементирует свое значение от 65535 (по умолчанию) до 0 с шагом – 2. По достижении 0 в счетчик автоматически загружается значение 65535, после чего счет продолжается. При переходе счетчика из состояния «все нули» в состояние «все единицы» возбуждается прерывание IRQ0 с вектором 8 и с шагом 1 инкрементируется значение в 4-байтовой ячейке памяти с адресом 0:46Ch.

Изменение состояния счетчика вызывается импульсами генератора тактовых импульсов (ГТИ) системы. Частота следования импульсов , соответственно период следования импульсов .


Сформировать значение числа периодов


Рисунок 9. Определение числа периодов системного таймера от момента включения питания ПЭВМ

Assembler:

; определение числа периодов системного таймера



T dq ; количество периодов



; определить числа периодов через функцию BIOS

Mov AH, 00h ; действие – определить числа периодов

Int 1Ah ; функция BIOS: CX – старшее слово числа периодов

;DX – младшее слово числа периодов

; сформировать результат в T

Mov AX, CX

Shl EAX, 16

Mov AX, DX

Mov T, EAX ; переменная T содержит числа периодов



Pascal:

; определение количества периодов системного таймера

Procedure GetQT(var t: extended);

Var

n: longint; количество прерываний от таймера

b0, b1: BYTE; младший и старший байты счетчика

w: WORD; значение счетчика

o: BYTE; значение сигнала OUT

begin

port[$43] := $E2; подготовить чтение управляющего регистра

o := port[$40]; читать упр. рег., 7-й бит = OUT

n := meml[$0:$46C]; количество произошедших прерываний

port[$43] := 0; защелкнуть значение счетчика

port[$43] := $D2; подготовить чтение счетчика

b0 := port[$40]; читать младший байт счетчика

b1 := port[$40]; читать старший байт счетчика

w := word(b1)*256+word(b0);

t := (n-1)*65535.0 + ((65535-w) div 2);

if (o and $80)=0 then t := t + 32767.0;

end;


Помимо прямого обращения к БИС системного счетчика/таймера (как описано в предыдущем алгоритме) в микропроцессорах Intel, начиная с Pentium, поддерживается машинная команда RDTSC (код 310Fh), которая считывает количество тактовых импульсов процессора, накопленное от момента включения питания. Эта команда доступна в стандартном режиме работы процессора, а также в защищенном режиме при выполнении программы в 0-ом кольце защиты.

Соответствие частот и периодов

Таблица 1.

Частота, МГц

Период, с

Частота, МГц

Период, с

33

3,0303E-08

300

3,33333E-09

66

1,51515E-08

360

2,77778E-09

90

1,11111E-08

400

2,5E-09

100

0,00000001

600

1,66667E-09

133

7,5188E-09

1000

0,000000001

166

6,0241E-09

1200

8,33333E-10

200

0,000000005

2000

5E-10

266

3,7594E-09








Пример использования (закомментированные фрагменты нужны только для «быстрых» машин):


Pascal:

Procedure GetTT(var t: extended);

Var a, b, c, d: word;

Begin

Asm

Sub ax, ax

Dw 0A20Fh (* CPUID *)

Dw 0310Fh (* RDTSC *)

Mov a, ax

Db 066h, 0C1h, 0E8h, 10h (* shr eax, 16 *)

Mov b, ax

Mov c, dx

(*

Db 066h, 0C1h, 0EAh, 10h

Mov d, dx

*)

End;

T := a + b*65535.0 + c*65535.0*65535.0;

(* + d*65535.0*65535.0*65535.0; *)

End;


Простейший способ генерации временных задержек заключается в зацикливании рассмотренных выше процедур измерений моментов времени.




Рисунок 10. Генерация задержки с помощью программируемого таймера


Pascal:

; задержка на 100 мкс

GetQT(t1);

Repeat

GetQT(t2);

Until (t2-t1) >= 119;


Метод, использующий системный таймер и команду HLT

Метод использует следующие обстоятельства:

  • Команда HLT вызывает останов процессора до возникновения аппаратного прерывания;

  • По умолчанию системный таймер генерирует прерывание IRQ0 примерно 18.2 раза в секунду.


Pascal:

; задержка на 1 сек

Procedure DelayH;

Label M;

Begin

Asm

Mov cx, 18

M:

HLT;

Loop M

End;

End;


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

Функция 86H прерывания 15H приостанавливает выполнение вызывающей программы на указанное количество микросекунд. Фактическая продолжительность интервала всегда является целым числом, кратным 976 мкс. Например, если в параметрах указано любое значение в интервале от 0 до 976 мкс, то задержка составит 976 мкс; если любое значение в интервале от 977 мкс до 1952 мкс, то 1952 мкс, и т.д.

Параметры вызова:

  • AH – код функции - 86H;

  • CX – старшее слово интервала ожидания;

  • DX – младшее слово интервала ожидания.


Assembler:

; Задержка на 976 мкс  1мс

Mov ah, 86h

Mov cx, 0

Mov dx, 0

Int 15h

Pascal:

(* Задержка на 976 мкс  1мс *)

uses Dos;

var r:Registers;

. . .

r.ah:=$86;

r.cx:=0;

r.dx:=0;

Intr($15, r);


Для реализации временных задержек, со значениями, меньшими 0.001с, можно рекомендовать методы, использующие возможности системного таймера. Методы, использующие 0 канал таймера, позволяют реализовывать временные задержки произвольной длительности, поскольку для этого канала возможен подсчет количества произошедших прерываний (в ячейке с адресом 0:46Ch). Но 0-й канал используется для организации многозадачности в операционных системах класса Windows, а в MS-DOS - для управления работой НГМД, поэтому перепрограммирование его не всегда «безопасно». Наиболее «безопасными» можно считать методы, основанные на перепрограммировании 2-го канала системного таймера:

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

  2. запустить счетчик;

  3. в цикле ожидать момент перезагрузки счетчика (или инвертирования сигнала OUT).

Пример определения коэффициента пересчета. Пусть необходимо выполнить задержку длительностью в 100 мкс. Так как по приходу каждого тактового импульса из счетчика вычитается 2, а период следования этих импульсов равен 0.83 мкс, то интервалу длительностью 100 мкс соответствует значение коэффициента пересчета K=(100/0.83)*2 = 241.


Assembler:

; Задержка длительностью 100 мкс

Mov al, 0B6h

Out 43h, al ; Подготовить загрузку коэффициента пересчета

Mov al, 241

Out 42h, al ; Загрузить младший байт коэффициента пересчета

Mov al, 0

Out 42h, al ; Загрузить старший байт коэффициента пересчета

; В этот момент значение счетчика = 241, значение сигнала OUT=1

Mov al, 1

Out 61h, al ; Запустить счет, отключив динамик

M: Mov al, 11101000h

Out 43h, al ; Подготовить чтение слова состояния канала

In al, 42h ; Читать слово состояния канала

And al, 80h ; Выделить бит, соответствующий значению сигнала OUT

Cmp al, 0 ; Сигнал OUT инвертировался?

Jne M ; Если нет, то зациклиться

Pascal:

{Задержка длительностью 100 мкс}

Port[$43]:=$B6; { Подготовить загрузку коэффициента пересчета }

Port[$42]:=241; { Загрузить младший байт коэффициента пересчета }

Port[$42]:=0; { Загрузить старший байт коэффициента пересчета }

Port[$61]:=1; { Запустить счет, отключив динамик }

Port[$43]:=$E8; { Подготовить чтение слова состояния канала }

While (Port[$42] and $80)=1 do Port[$43]:=$E8; {Зациклиться}


В прикладных программах Windows временные задержки могут быть реализованы с использованием системной функции GetTickCount(), возвращающей количество миллисекунд с момента запуска Windows.


Object Pascal (Delphi):

{Задержка длительностью 10 мс}

var t1, t2: integer; {32 бита}

. . .

t1:=GetTickCount();

repeat

t2:=GetTickCount();

until t2-t1 >= 10;


Периодические прерывания от часов реального времени


Периодические прерывания (аппаратное IRQ8 с вектором 70h и программное прерывание с вектором 4Ah) часов реального времени устанавливаются и сбрасываются битом 6 в ячейке CMOS-памяти с номером 0Bh. Период прерываний задается битами 0-3 в ячейке CMOS-памяти с номером 0Ah: 0011 – 122 мкс; 1111 – 500 мкс; 0110 – 976 мкс (по умолчанию).


Периодические прерывания от системного таймера


Счетчик 0-го канала системного таймера генерирует прерывания (аппаратное IRQ0 с вектором 8 и программное с вектором 1Ch) по фронту (переходу из 0 в 1) сигнала OUT. При значении константы пересчета 65535 (по умолчанию) это происходит с частотой 18.2 Гц (или с периодом 55 мс). Увеличить частоту возникновения прерываний можно, пропорционально уменьшив значение константы пересчета.

Формирование импульса заданной длительности, измерение временного интервала, определение момента появления определенного события (фронта входного импульса, среза).


9. ВВОД-ВЫВОД ПО ПРЕРЫВАНИЮ

Прерывание – это реакция системы на программно непредсказуемые события, заставляющая центральный процессор (ЦП) компьютера приостановить выполнение текущей работы и перейти на выполнение программы, называемой обработчиком прерывания (interrupt handler). Этот переход осуществляется по определенному алгоритму с помощью специально разработанных аппаратных средств. Обработчик прерываний определяет источник прерывания, выполняет запланированные действия, после чего возвращает управление приостановленному процессу.

Когда в реальном режиме появляется сигнал прерывания или выполняется машинная команда INT, управление передается по адресу, который считывается из специальной таблицы, таблицы векторов прерываний, начинающейся в памяти с адреса 0000h:0000h. Каждый элемент этой таблицы представляет собой адрес обработчика прерывания в формате сегмент: смещение или 4 нулевых байта, если обработчик не установлен. Все элементы таблицы пронумерованы от 0 до 255 и этот номер обозначает тип прерывания. Типы прерываний и их описания перечислены в таблице векторов прерываний приведенной в приложении 1.

Прерывания могут быть аппаратными, в этом случае запросы прерываний инициирует периферийное устройство, и программными – инициируются выполнением команды INT.

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

В IBM используется каскадное соединение 2-х программируемых контроллеров прерываний 8259A, которые присоединены к младшему байту шины данных. Эти контроллеры расположены по фиксированным адресам и по умолчанию используют фиксированное смещение.

Адрес ведущего контроллера – 20h, адрес ведомого контроллера – А0h, величина смещения ведущего – 08h, а ведомого – 70h (Рисунок 11).

Запросы воспринимаются по фронту сигнала. Состояние «1» после фронта должно поддерживаться до прихода первого сигнала подтверждения прерывания INTA. Вообще, контроллер 8259А рассчитан на восприятие запросов как по фронту, так и по уровню.

Недостаток запроса по фронту – это относительно низкая помехозащищённость; относительная сложность объединения запросов по «ИЛИ», если необходимо расширить количество запросов по сравнению с допустимым.

На шине PCI подобный котроллер может быть запрограммирован как на фронт, так и на уровень. Использование уровня в качестве входа запроса, позволяет организовывать «монтажное ИЛИ» (схема с открытым коллектором).

При выборе линий прерываний для нестандартных модулей необходимо контролировать конфигурацию ПЭВМ и распределение векторов прерываний между системными устройствами. На шину прерываний ISA выводится 11 запросов прерывания.




При вводе-выводе по прерыванию модулей, подключенных к магистрали, рекомендуется использовать запросы IRQ9, IRQ10, IRQ11, IRQ 15 или неиспользуемые запросы системных устройств. Однако последнее нежелательно. При использовании только 8-разрядной ШД ISA в распоряжении пользователя может быть теоретически до 6 запросов, но часть их или все могут принадлежать системным устройствам.

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

По умолчанию (при включении) контроллер настраивается на режим фиксированных приоритетов с автоматическим завершением прерываний .

Для решения некоторых прикладных задач может потребоваться изменение установленных по умолчанию режимов. Более подробное описание контроллера 8259А приведено в приложении 3.

Для вызова обработчиков прерываний программным путем (программные прерывания), существует команда INT (а также INTO и INT3). Фактически, эти команды являются исключениями-ловушками, поскольку адрес возврата, который предается обработчику, указывает на следующую команду. Программные прерывания, являются основным средством вызова функций DOS и BIOS, потому что в отличие от вызова через команду CALL здесь не нужно знать адреса вызываемой процедуры – достаточно только номера.

Немаскируемое прерывание NMI (INT2) предназначено для сообщения ЦП о некоторых катастрофических событиях в компьютере и поступает в ЦП по специальному входу NMI.


Пример.

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

Для того, чтобы обрабатывать исключения, возникающие при делении на ноль, необходимо перехватить нулевое исключение, т.е. обрабатывать прерывание нулевого типа (см. Таблицу векторов прерывания в приложении П.1.)

Assembler:

; Пример обработчика исключения

int_handler proc far

mov ax, 0

iret

int_handler endp

После того как написан обработчик, его необходимо привязать к выбранному номеру прерывания. Это можно сделать, прямо записав его номер в таблицу векторов прерывания или вызвав две системные функции: 25h и 35h – установить и считать адрес обработчика прерывания. Воспользуемся специальными функциями:

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

mov ax, 3587h ; AH = 35, AL = номер прерывания

int 21h ; функция DOS: считать адрес обработчика прерывания

mov word ptr old_handler, bx ; возвратить смещение в bx

mov word ptr old_handler+2, es ; и сегментный адрес в es

; установить новый обработчик

Mov ax, 2587h ; ah = 25h, al = номер прерывания

Mov dx, seg int_handler ; сегментный адрес в ds,

Mov ds, dx

Mov dx, offset int_handler ; смещение в dx

Int 21h ; Функция DOS: установить обработчик в тело программы

; (важно помнить, что es изменился после вызова 35h!)



; восстановить предыдущий обработчик

Lds dx, old_handler ; сегментный адрес в ds и смещение в dx

Mov ax, 2587h ; ah = 25h, al = номер прерывания

Int 21h ; установить обработчик



Pascal:

Uses Dos, Crt;


Var old_handler: pointer;


Procedure New_handler; interrupt;

Begin



Port[$A0] := $20; // для аппаратного прерывания (см. следующий раздел)

Port[$20] := $20; // для аппаратного прерывания (см. следующий раздел)

End;


Begin

// перехватить прерывание

GetIntVec($70, old_handler); // $70 – номер вектора прерывания

SetIntVec($70, @new_handler);



// возвратить старый обработчик прерывания

SetIntVec($70, old_handler);

End.

Некоторые процедуры прерываний удобно вызывать и тогда, когда прерываний нет (например, функции DOS или BIOS). Поэтому, возникает потребность в команде, которая выполняет переход на процедуру обработки прерывания. Такой командой является команда INT n, где n   целое число от 0 до 255. Перечень команд прерываний приведен в таблице 1.


Таблица 1.

Перечень команд прерываний.

Мнемоника

Описание

INT n

Прерывание типа n (длина 2 байта)

INT

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

INTO (IF = 1, OF = 1)

Прерывание по переполнению (если OF=1) генерирует прерывание №4

IRET

Возврат из прерывания

HLT

Останов. Прекращает все действия процессора, пока не будет, произведен аппаратный сброс или не придет внешнее прерывание (NMI всегда выводит из состояния прерывания, остальные   только если IF=1)

В персональных компьютерах XT и AT за первоначальную установку режимов работы микросхем 8259 отвечает BIOS. При первоначальной установке используется режим вложенных прерываний с фиксированным приоритетом и автоматическим неспецифическим завершением, байты инициализации и управления приведены в таблице 2. Стандартный режим обработки прерываний предполагает, что приоритет запросов от внешних устройств уменьшается с увеличением их номера. Нумеруются запросы следующим образом: IRQ0   IRQ7 для первого контроллера прерываний (номера прерываний 8h   0Fh) и IRQ8   IRQ15 для второго контроллера прерываний (номера прерываний 70h – 77h).

Таблица 2.

Байты инициализации контроллеров прерываний

Байт

XT

AT ведущий

AT ведомый

ICW1

12h

10h

10h

ICW2

08h

08h

70h

ICW3

 

04h

02h

ICW4

0Fh

1Fh

1Bh

OCW3

0Ah

0Ah

0Ah


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

Линии запросов прерываний, подключенные через КПК к входу INTR, называются маскируемыми и их можно запретить или разрешить при помощи команд CLI и STI, которые обнуляют или выставляют в 1 флаг IF регистра флагов. Обычно обработчик прерывания разблокирует систему прерываний, чтобы разрешить прохождение прерываний с более высоким приоритетом и не сбивать системный таймер (как наиболее приоритетный) и обрабатывает прерывание за минимально возможное время.

Каждая процедура обработки аппаратного прерывания должна завершаться командой EOI (End Of Interrupt), посылаемой контроллеру:

для 1-ого контроллера – посылка байта 20h (EOI) по адресу 020h;



MOV AL, 20h

OUT 20h, AL



для 2-ого контроллера – посылка байта 20h по адресу 0A0h; программный вызов прерывания 0Ah – завершение для ведущего контроллера; для некоторых старых версий BIOS необходим явный сброс маски запроса в регистре 2-ого контроллера.



MOV AL, 20h

OUT 0A0h, AL




10. ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ В MS-DOS


Достоинствами программного обеспечения, созданного и используемого в MS-DOS, являются:

  • простота программирования;

  • малое время реакции на внешние события;

  • непосредственный доступ к системным ресурсам, таким как порты ввода-вывода, система обработки прерываний и пр.

К недостаткам следует отнести:

  • однозадачность;

  • отсутствие поддержки современных внешних устройств (PCI-плат, интерфейса USB и пр.)

  • ограниченность адресного пространства размерами 1 Мб.


Наиболее критичным в задачах управления, сбора и обработки данных, является последнее ограничение. Существует ряд подходов, позволяющих решить эту проблему.

Для быстрого сохранения и использования больших (до 16 Мб) объемов данных можно использовать так называемый «виртуальный диск» (или «электронный диск») - программную модель дискового накопителя, реализованную в ОЗУ ПЭВМ. Функции «виртуального диска» реализуются драйвером RAMDRIVE. Пример оформления конфигурационного файла CONFIG.SYS для создания в расширенной памяти (ключ «/E») «виртуального диска» емкостью 4Мб (параметр «4096»), с размером сектора 512 байтов (параметр «512») и возможностью создания до 100 файлов (параметр «100»):

. . .

DEVICE=C:\Windows\EMM386.EXE NOEMS

DEVICE=C:\Windows\RAMDRIVE.SYS 4096 512 100 /E

. . .

Создание и использование «виртуального диска» возможно даже в Windows 95/98/ME.


11. ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ В MS-WINDOWS


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

  • 16/32-разрядные Windows 95/98/ME;

  • полностью 32-разрядные Windows NT/2000/XP/2003.

Главной особенностью всех версий MS Windows является выполнение программ под управлением «виртуальной машины». Каждой программе предоставляется комплекс «виртуальных» («ненастоящих») системных ресурсов, включая процессорное время, память, порты ввода-вывода, файловую систему, систему обработки прерываний и т.п.


11.1. Доступ к портам ввода-вывода. Ядро Windows поддерживает общую для всех программ так называемую «битовую карту ввода-вывода» (iomap) - массив из 65535 битов, каждый из которых отвечает за отдельный порт ввода-вывода. Если бит установлен в 1 (порт «закрыт»), то при попытке обращения к порту процессором возбуждается исключение «общая ошибка защиты», обрабатываемое операционной системой.

В Windows 95/98/ME при первой попытке обращения к «закрытому» порту производится поиск драйвера виртуального устройства, связанного с данным портом ввода-вывода и, либо передача обработки исключения коду драйвера (порт при этом остается «закрытым»), либо «открытие» порта на свободный доступ со стороны программы. Важно: ни при каких условиях операционной системой не открываются порты, связанные с контроллером ПДП!

В системах класса Windows NT все порты все время «закрыты», и при обращении к ним обязательно происходит исключение. Если в системе присутствует драйвер соответствующего виртуального устройства, то обработчик исключения передает ему управление. Если драйвер отсутствует, то:

  • для 32-битовых приложений обработчик выводит на экран окно с аварийным сообщением;

  • для программ в формате MS-DOS и 16-разрядных приложений Windows обработчик просто возвращает им управление.


11.2. Доступ к памяти по физическим адресам. В MS Windows реализована сегментно-страничная адресация оперативной памяти. Каждой прикладной программе предоставляется виртуальное адресное пространство размером до 4Гб, составленное из отдельных «лоскутков» ОЗУ и дисковой памяти. Структуры виртуальных адресных пространств в разных версиях Windows изображены на рис ?.?.



Рис ?.?. Адресные пространства задач в различных версиях Windows


В Windows 95/98/ME только физические адреса с 0 по FFFFFh отображаются на аналогичные линейные адреса.

Непосредственный доступ к содержимому ячеек оперативной памяти по их физическим адресам для остальных регионов в Windows 95/98/ME и абсолютно для всех регионов в Windows NT/2000/XP/2003 для приложений 3-го кольца защиты невозможен.


11.3. Обработка прерываний. Обработка прерываний в Windows выполняется средствами общесистемного механизма обработки исключений. Роль таблицы векторов прерываний исполняет IDT – таблица дескрипторов прерываний (см. табл. ?.?), размещенная в служебных регионах операционной системы.


Таблица ?.?

Некоторые исключения, обрабатываемые в Windows


Прерывание/Исключение

Описание

0

Ошибка деления на 0

1

Прерывание пошаговой трассировки

3

Отладочное прерывание при выполнении INT3

6

Недопустимая команда

8

Двойная ошибка

0Bh

Попытка обращения к отсутствующему сегменту

0Dh

Общая ошибка защиты

20h

Используется в Windows 95/98/ME для передачи управления из 3 в 0 кольцо защиты.

2Eh

Используется в Windows NT/2000 для передачи управления из 3 в 0 кольцо защиты.

30h-3Fh

Аппаратные прерывания IRQ0-IRQ15


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


11.4. «Универсальные» драйвера. Большинство проблем, связанных с необходимостью непосредственного доступа к системным ресурсам ПЭВМ в Windows, могут быть решены с использованием так называемых «универсальных» (generic) драйверов, реализующих типовые операции доступа к портам ввода-вывода и адресам физической памяти, обработки аппаратных прерываний. Примеры: DriverX (Tetradyne Software) и TvicHW (Виктор Ижикеев). Рассмотрим работу с комплектом TvicHW. В комплекте поставляются три файла:

  • tvichw32.vxd - драйвер для работы под Windows 95/98/ME, должен быть расположен в директории C:\Windows\SYSTEM;

  • tvichw32.sys - драйвер для работы под Windows NT/2000, должен быть расположен в C:\WinNT\SYSTEM32\Drivers;

  • tvichw32.dll - динамически загружаемая библиотека, обеспечивающая удобство вызова функций драйверов из практически любого языка программирования, должна находиться в C:\Windows\SYSTEM или в рабочем каталоге прикладной программы. Интерфейс для языка C/C++ обеспечивается заголовочным файлом tvichw32.h, интерфейс для Delphi-программ описан в файле tviclib.pas, для Visual Basic - в tviclib.bas.


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


Object Pascal (Delphi):

VAR HW32 : THandle;

. . .

HW32:=0;

HW32 = OpenTVicHW32( HW32, "TVICHW32","TVicDevice0");

IF GetActiveHW(HW32)<>0 then begin

. . .

(* Работа с функциями TVcHW32 *)

. . .

HW32 = CloseTVicHW32(HW32);

End;


Для того, чтобы получить доступ к памяти, заданной ее физическим адресом, необходимо отобразить этот физический адрес на пространство линейных адресов текущего процесса. TVicHW содержит функцию MapPhysToLinear(), которая решает эту задачу и возвращает обычный указатель на область памяти, заданную ее физическим адресом и размером. После того, как этот указатель станет ненужным, отменить отображение можно (и нужно!) при помощи функции UnmapMemory().


Object Pascal (Delphi):

(* Получение указателя на область BIOS *)

var pBios : PChar;

. . .

pBios = Pchar(MapPhysToLinear (HW32,$F0000,256));

. . .

UnmapMemory(HW32, $F8000, 256);


Доступ к портам ввода-вывода осуществляется при помощи следующих функций:

  • BYTE GetPortByte(THANDLE HW32; LONGINT wPortAddress);

  • SMALLINT GetPortWord(THANDLE HW32; LONGINT wPortAddress);

  • LONGINT GetPortLong(THANDLE HW32; LONGINT wPortAddress);

  • SetPortByte(THANDLE HW32; LONGINT wPortAddress; BYTE bData);

  • SetPortWord(THANDLE HW32; LONGINT wPortAddress; SMALLINT wData);

  • SetPortLong(THANDLE HW32; LONGINT wPortAddress; LONGINT lData).


Функция UnmaskIRQ() позволяет указать номер прерывания и установить программу - обработчик этого прерывания. Для прекращения обработки прерываний необходимо вызвать функцию MaskIRQ(). Схема работы:


Object Pascal (Delphi):

Var IrqNumber : SMALLINT; IrqCounter : LONGINT;


{Обработчик прерывания}

MyInterruptTHandler( SMALLINT IrqNumber )

Begin

. . .

INC(IrqCounter);

End;

. . .

IrqNumber:=10; {Номер прерывания}

IrqCounter:=0; {Счетчик произошедших прерываний}

UnmaskIRQ(HW32, IrqNumber, @MyInterruptTHandler);



MaskIRQ(HW32, 10);


Важно: 1) под всеми версиями Windows нельзя обрабатывать IRQ0 (системный таймер); 2) под Windows NT/2000 нельзя обрабатывать прерывание от RTC (часы реального времени).

Список использованных источников


1.

Зубков С.В. Assembler для DOS, Windows и UNIX. – 2-е изд., испр. и доп. – М.: ДМК, 2000. – 608 с.: ил. (Серия «Для программистов»)

2.

Климентьев К.Е. Решение задач реального времени средствами Borland/Turbo Pascal. Методические указания к лабораторному практикуму по курсам «Системы реального времени» и «Интерфейсы АСОИУ»

3.

Ю.В. Новиков, О.А. Калашников, С.Э. Гуляев Разработка устройств сопряжения для персонального компьютера типа IBM PC. Под общей редакцией Ю.В. Новикова. Практ. Пособие – М.: ЭКОМ., 2000 – 224 с.: ил.

4.

Фаронов В.В. Турбо Паскаль (в 3-х книгах). Книга 1. Основы Турбо Паскаля. – М.: «МВТУ – ФЕСТО ДИДАКТИК», 1992. – 304 с.


Приложение 1

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

Номер

Принадлежность

Описание

00

Внутреннее

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

01

Внутреннее

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

02

NMI

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

03

Внутреннее

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

04

Внутреннее

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

05

Внутреннее

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

06

Внутреннее

Неопределенный код операции или длина команды больше 10 байт (для процессора 80286). Ошибка, возникающая при попытке выполнить команду, отсутствующую в данном процессоре.

07

Внутреннее

Особый случай отсутствия математического сопроцессора (процессор 80286).

08

IRQ

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

09

IRQ

IRQ1   прерывание от клавиатуры. Генерируется при нажатии и отпускании клавиши. Используется для чтения данных от клавиатуры.

0A

IRQ

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

0B

IRQ

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

0C

IRQ

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

0D

IRQ

IRQ5 – прерывание LPT2, используется дополнительными устройствами.

0E

IRQ

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

0F

IRQ

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

10

BIOS

Обслуживание видеоадаптера.

11

BIOS

Определение конфигурации устройств в системе.

12

BIOS

Определение размера оперативной памяти в системе.

13

BIOS

Обслуживание дисковой системы.

14

BIOS

Функции обмена через последовательный порт.

15

BIOS

Расширенный сервис для AT-компьютеров. Новые функции BIOS.

16

BIOS

Обслуживание клавиатуры.

17

BIOS

Обслуживание принтера.

18

ПЗУ BASIC

Запуск BASIC в ПЗУ, если он есть.

19

BIOS

Загрузка операционной системы.

1A

BIOS

Обслуживание часов. Функции установки времени и даты.

1B

BIOS

Обработчик прерывания Ctrl-Break.

1C

BIOS

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

1D

BIOS

Адрес таблицы параметров дисплея. Адрес видеотаблицы для контроллера видеоадаптера 6845.

1E

BIOS

Указатель на таблицу параметров дискеты.

1F

BIOS

Адрес таблицы графических символов. Указатель на графическую таблицу для символов с кодами ASCII 128-255.

20

MS DOS

Завершение задачи.

21

MS DOS

Диспетчер функций MS DOS.

22

MS DOS

Адрес обработчика завершения задачи.

23

MS DOS

Адрес обработчика Ctrl-C.

24

MS DOS

Адрес обработчика критической ошибки.

25

MS DOS

Абсолютное чтение с диска.

26

MS DOS

Абсолютная запись на диск.

27

MS DOS

Завершение задачи и сохранение ее в памяти.

28

MS DOS

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

29

MS DOS

Быстрый вывод символа.

2A

MS DOS

Сетевое перенаправление.

2B   2E

MS DOS

Резерв

2F

MS DOS

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

30   32

MS DOS

Резерв.

33

BIOS

Функции управления “мышкой”.

40

BIOS

Функции управления гибким диском.

41

BIOS

Адрес таблицы параметров жесткого диска, дисковод 0.

42

BIOS

Функции управления дисплеем (EGA).

43

BIOS

Адрес таблицы символов для EGA,MCGA,VGA.

46

BIOS

Адрес таблицы параметров жесткого диска, дисковод 1.

4A

BIOS

Обработчик будильника.

5A

BIOS

Адаптер кластера.

5B

BIOS

Используется программой кластера.

60 – 66

Программные

Прерывания пользователя.

67

Программные, LIM EMS

Функции управления дополнительной памятью, диспетчер EMM.

68   6F

 

Не используются

70

IRQ

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

71

IRQ

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

72

IRQ

IRQ10   зарезервировано.

73

IRQ

IRQ11   зарезервировано.

74

IRQ

IRQ12   зарезервировано.

75

IRQ

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

76

IRQ

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

77

IRQ

IRQ15   зарезервировано.

78   7F

 

Не используются.

80   85

BASIC

Зарезервированы для BASIC.

86   F0

BASIC

Используются интерпретатором BASIC.

F1   FF

 

Не используются.
1   2   3   4   5   6




Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації