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

Вид материалаДокументы
3. Разработка управляющей программы МПК 3.1. Блок-схема управляющей программы
IRn происходит переход управляющей программы из фонового режима на выполнение соответствующей программы обработки прерываний (ПО
3.2.1. Общие сведения
Вектор прерываний
3.2.1.1. Программные прерывания
3.2.1.1.1. DOS Interrupt
3.2.1.1.2. BIOS Interrupt
3.2.1.2. Аппаратные прерывания
3.2.2. Таблица векторов прерываний
3.2.3. Механизм прерываний
Подобный материал:
1   2   3   4   5   6   7

3. Разработка управляющей программы МПК

3.1. Блок-схема управляющей программы


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

На рис.7 представлен типовой вариант блок-схемы управляющей программы МПК. На рис.7 обозначено: 1-подача питания на МПК; 2-инициализация управляющей программы; 3-фоновый режим работы управляющей программы (метка WAIT:); 4-одна или несколько команд «пусто» (NOP); 5-перезагрузка сторожевого таймера; 6-команда безусловного перехода на метку фонового режима (JMP WAIT); 7-сторожевой таймер; 8 – 10-внешние устройства (события), вызывающие прерывание работы процессора МПК; 11-контроллер прерываний; IRQ1-IRQn – запросы на прерывания от внешних устройств (событий); IR1 – IRn - сигналы прерываний; ISR1-ISRn – программы обработки соответствующих прерываний.

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

На время инициализации все прерывания в МПК должны быть запрещены. Инициализация заканчивается разрешением прерываний и переходом в фоновый режим работы (3).

Фоновый режим представляет собой бесконечный замкнутый цикл из ряда «пустых» команд (4) и команды безусловного перехода (6). Если в МПК используется сторожевой таймер, то в фоновом режиме происходит его обязательная перезагрузка константой счета (5).

Сторожевой таймер (7) предназначен для устранения последствий «зависания» процессора в процессе работы. Если процессор «завис», то в фоновом цикле сторожевой таймер не будет перезагружен и, следовательно, выполнит свой счет до конца. Тогда после окончания счета сторожевой таймер произведет принудительную перезагрузку процессора.

В моменты появления n-го сигнала прерывания IRn происходит переход управляющей программы из фонового режима на выполнение соответствующей программы обработки прерываний (ПОП) ISRn. После окончания ее выполнения управляющая программа возвращается в фоновый режим. Контроль над запросами прерываний IRQn и выработку сигналов прерываний IRn осуществляет контроллер прерываний (11). По существу весь алгоритм управления мехатронной системы реализуется в виде совокупности указанных ПОП. При этом одной из важнейших функций контроллера прерываний является организация порядка выполнения всех ПОП мехатронной системы.


3.2. Прерывания


Как видно из блок-схемы управляющей программы (рис.7) прерывания являются ключевым моментом в организации работы управляющей программы МПК.

3.2.1. Общие сведения


Прерывание – это программно-аппаратный процесс, активируемый сигналом, который генерирует программа или оборудование. Соответственно существует два типа прерываний:
  1. Программные;
  2. Аппаратные.

В свою очередь аппаратные прерывания в зависимости от источника возникновения (по отношению к процессору) могут быть:
  • Внутренние:
  • Внешние.

С механизмом прерываний связано понятие вектора прерывания. Вектор прерываний – это некоторая область памяти (адрес), к которой происходит обращение процессора при возникновении прерывания. Обозначается вектор обычно так же, как и само прерывание: INT x, где x-номер прерывания. Каждому вектору прерываний соответствует своя программа обработки прерывания. На рис.8 представлена схема типов и источников прерываний на примере IBM PC, где INTR, NMI – аппаратные входы (pin) процессора 80x86 для сигналов соответственно контроллера прерываний и немаскируемых прерываний.

3.2.1.1. Программные прерывания


Этот тип прерываний инициируется из текущей программы командой вида INT x (Intel) или TRAP x (Siemens), где x-номер прерывания. Процесс реализации программного прерывания, по сути, не отличается от процесса реализации аппаратного прерывания, что подробно рассматривается в разделе 3.2.3. Назначение программных прерываний поясним на примере IBM PC и операционной системы DOS. Здесь возможны два варианта:
    • DOS Interrupt;
    • BIOS Interrupt.




3.2.1.1.1. DOS Interrupt

Этот вариант программных прерываний связан с теми векторами прерываний, для которых операционная среда DOS загружает программы обработки прерываний в ОЗУ IBM PC при своем старте: INT 20h – INT 2Fh.

Так, вектор прерываний INT 20h завершает работу программы в среде DOS и возвращает управление последней, вектор прерываний INT 24h осуществляет обработку критических ошибок DOS, вектора INT 25h/INT 26h осуществляют чтение/запись жесткого диска.

Особое место занимает вектор прерываний INT 21h, который образует семейство т.н. «функций DOS» (с номерами 00h-6Ch), предоставляющих программисту возможность работы практически со всеми программными и аппаратными компонентами среды DOS и IBM PC. Например:

функции 2Ah/2Bh – получить/установить системную дату;

функции 2Ch/2Dh – получить/установить системное время;

функции 3Dh/3Eh – открыть/закрыть файл;

функции 25h/35h – получить/установить вектор прерываний (т.е. соответствующий адрес) и т.д.

Пример фрагмента программы на ассемблере для получения вектора прерываний через регистры Intel процессора (AH, AL, DX, DS) имеет вид:

MOV AH, 25h ; номер функции

MOV AL, xxh ; номер вектора прерываний

INT 21h ; прерывание - после выполнения этой команды в регистрах DS:DX находится адрес (сегмент:смещение) вектора xxh.

3.2.1.1.2. BIOS Interrupt

Этот вариант программных прерываний связан с теми векторами прерываний, для которых программы обработки прерываний входят в состав BIOS IBM PC, т.е. находятся в ПЗУ. Назначение этих прерываний состоит в обеспечении начального старта IBM PC до момента загрузки операционной системы. По своим функциональным возможностям эти прерывания аналогичны DOS прерываниям. Так, семейство функций вектора прерываний INT 10h обслуживает видеоадаптер, INT 14h-последовательные порты IBM PC, INT 16h-клавиатуру, INT 17h-принтер, INT 1Ah-системный таймер и т.д.

Пример фрагмента программы на ассемблере для посылки одного символа в последовательный порт путем использования программного прерывания имеет вид:

MOV AH, 1 ; номер функции

MOV DX, 0 ; порт COM1 (0-COM1, 1-COM2)

MOV AL,’Z’ ; выбор символа

INT 14h ; прерывание – посылка символа в порт

SHL AH, 1 ; пересылка 7р регистра AH в бит переноса CF

JZ ERROR ; переход к метке ERROR в случае неудачи (7р AH=1).

3.2.1.2. Аппаратные прерывания


Этот тип прерываний инициируется каким-либо устройством (внешним или внутренним по отношению к процессору) и обрабатывается контроллером прерываний, который может представлять собой отдельную микросхему (например, для Intel 80x86) или входить в состав микроконтроллера (например, для Siemens SAB C167). Таблица аппаратных прерываний IBM PC представлена в таблице 3.

Таблица 3


Вектор



Сигнал прерывания IRQ


Устройство


Контроллер


Приоритет

08h

0

Интервальный

таймер

Первый

Высший

09h

1

Клавиатура


Первый




0Ah

2

Второй контроллер прерываний


Первый




70h

8

Часы реального времени

Второй




71h

9

Видеоконтроллер


Второй




72h

10

Резерв


Второй




73h

11

Резерв


Второй




74h

12

Резерв


Второй




75h

13

Математический сопроцессор

Второй




76h

14

Жесткий диск


Второй




77h

15

Резерв

Второй




0Bh

3

Последовательный порт COM2

Первый




0Ch

4

Последовательный порт COM1

Первый




0Dh

5

Жесткий диск


Первый




0Eh

6

Floppy


Первый




0Fh

7

Принтер


Первый

Низший


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


Совокупность всех векторов прерываний образует т.н. таблицу векторов прерываний. Таблицы векторов указанных выше МПК относятся к двум разным типам таблиц векторов.

Для таблицы векторов прерываний IBM PC (МПК на основе Intel 80x86, К1810ВМ86) характерно, что каждый вектор представляет собой полный адрес соответствующей ему программы обработки прерываний. Указанная таблица содержит 256 векторов (в т.ч. до 15 аппаратных). Примерный вид таблицы векторов представлен в таблице 4. Область векторов 20h-FFh называется пользовательской, т.е. предназначена для размещения векторов, обслуживающих прерывания от различных дополнительных периферийных устройств. Каждый вектор прерывания состоит из 2-х слов. Первое слово (младший адрес) содержит смещение IP, второе слово (старший адрес) – кодовый сегмент CS адреса программы обработки прерываний. Вектора из таблицы 3 являются частью таблицы 4 векторов для IBM PC.

Таблица 4

Адрес вектора

Номер

вектора

прерываний

Источник

прерываний

Компоненты адреса программы обработки прерывания

0000h

00h


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

IP

CS

0004h

01h


Пошаговый режим

IP

CS

0008h

02h


Прерывание от NMI

IP

CS

000Ch

03h


Контрольная точка

IP

CS

0010h

04h


Переполнение

IP

CS

….

….

….

…..

….

….

….

….

0080h

20h


Пользовательский

IP

CS

….

…..

….

….

….

….

….

….

03FCh

FFh


Пользовательский

IP

CS


Для таблицы векторов прерываний микроконтроллера Siemens SAB C167 характерно, что каждый вектор представляет собой два слова памяти, содержимое которых не регламентировано. Обычно здесь размещают инструкцию безусловного перехода на программу обработки прерывания, предназначенную для обслуживания соответствующего вектора. Таблица векторов для микроконтроллера Siemens SAB C167 содержит 56 векторов, а ее примерный вид представлен в таблице 5.

Таблица 5

Тип

прерывания

Адрес вектора

Номер

вектора

Прерываний


Источник прерываний

Аппаратный

0000h

00h


Аппаратный перезапуск

Программный перезапуск

Сторожевой таймер


0008h

02h


Немаскируемые

прерывания

0010h

04h


Переполнение стека

(Stack Overflow)


0012h

08h


Переполнение стека

(Stack Underflow)


0028h

0Ah


Неизвестный код

0040h

….

….

….

….

011Ch

10h

…..

…..

…..

…..

47h

Прерывания от внутренних устройств

микроконтроллера:

таймеров,

портов,

регистров ввода/вывода


Программный

00000h

….

01FCh

00h

….

7Fh

Команда

Trap x,

x-номер вектора

прерываний


В каждой таблице прерываний адрес расположения вектора прерывания связан с его номером соотношением:

Адрес вектора = Номер вектора * Шаг таблицы векторов. В обеих таблицах 4 и 5 шаг таблицы векторов равен 4 (байта).

3.2.3. Механизм прерываний


Механизм прерываний рассмотрим на примере МПК Intel 80x86. На рис. 9 представлена схема взаимодействия процессора, таблицы векторов прерываний и стека.



Стеком называется специально выделяемая при инициализации МПК область ОЗУ, в которой хранятся временные данные по принципу «первый вошел - последний вышел».

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

Шаг 1. В момент прерывания выполнение текущей программы останавливается и в стеке запоминается вектор прерванного процесса. Вектор прерванного процесса – это совокупность содержимого регистра флагов FLAGS и адреса возврата к прерванной точке программы. Адрес возврата равен содержимому счетчика команд IP и регистра кодового сегмента CS на момент прерывания.

Шаг 2. В счетчик команд IP и в регистр кодового сегмента CS заносится содержимое ячеек памяти вектора прерываний, соответствующего номеру возникшего прерывания. В соответствии с новым содержимым регистров IP и CS происходит переход на программу обработки прерывания и начинается ее выполнение.

Шаг 3. По достижении последней команды программы обработки прерываний, которой должна быть команда IRET, происходит перенос вектора прерванного процесса из стека в соответствующие регистры процессора. В результате восстанавливается состояние процессора на момент прерывания и продолжается выполнение прерванной программы.

Следует заметить, что изменение содержимого регистров общего назначения AX, BX,CX,DX в процессе прерывания аппаратно не контролируется. Контроль за сохранностью их содержимого возлагается на программиста и должен осуществляться в ПОП.