Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы / mps.docx
Скачиваний:
61
Добавлен:
10.04.2015
Размер:
2.49 Mб
Скачать
  1. Структура команд мп. Понятия командного цикла, машинного цикла и такта. Типы машинных циклов. Способы адресации операндов (на примере Intel 8085 / к1821вм85).

Команды МП КР1821ВМ85 имеют переменную длину, кратную байту. Формат команды занимает от одного до трех байт. Так как память в микропроцессорах интеловского направления организована побайтно, то чтение команды выполняется последовательно и может занимать соответственно от одного до трех циклов обращения к памяти.

Все многообразие команд можно разделить на три основные группы:

- команды пересылок данных;

- команды преобразования данных;

- команды передачи управления.

В системе команд предусмотрены операции с парой регистров:

PSW

A

B

C

D

E

H

L

(ст.байт)

(мл.байт)

SP

PC

Рисунок 2.4.1 Объединение РОНов в пары регистров

Наряду с 8-разрядными регистрами существуют два 16-разрядных регистра: указатель стека SP и программный счетчик PC.

При выполнении операций в МП формируются признаки (флаги), которые записываются в PSW (Processor Status Word) – слово состояния процессора или регистр флагов F.

D7

D6

D5

D4

D3

D2

D1

D0

s

z

0

h

0

p

1

c

Рисунок 2.4.2 Формат регистра признаков PSW

Состояние разрядов PSW следующее:

- s (sign) – знак результата, s=1, если результат отрицательный;

- z (zero) – если результат нулевой, то z=1;

- h (half carry)-полуперенос, когда возникает перенос из разряда D3 в разряд D4, то h=1;

- p (parity) - если результат четный;

- с (carry) – если сформировался перенос.

Для сохранения признаков в стеке используется команда PUSH PSW.

Способы адресации операндов

1. Регистровая адресация – в команде в качестве источников операндов указаны регистры общего назначения. Достоинство – однобайтная команда, и, как следствие, малое время выполнения команды, а недостаток – ограниченное количество РОНов.

Пример регистровой адресации – MOV B,L.; переслать байт из регистра (L) в регистр (B).

2. Непосредственная адресация – в команде указывается сам операнд в виде константы. Команды двухбайтные.

Пример непосредственной адресации - MVI H,35h; записать в регистр (H) число 35h.

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

Пример прямой адресации LDA F8E4h; переслать в аккумулятор байт из ячейки памяти с адресом F8E4h.

4. Косвенная адресация - в команде указываются регистры, в которых хранится адрес ячейки памяти, в которой находится операнд.

Команды с косвенной адресацией однобайтные. Для реализации косвенной адресации в структуре микропроцессора необходимо иметь регистры с разрядностью ША и возможностью использования их в качестве источника адреса. Такими регистрами в МП КР1821ВМ85 является пара регистров общего назначения (HL). Команды с этими регистрами в случае косвенной адресации имеют обозначение (M).

MOV M,E ; - переслать из регистра (E) данные в ячейку памяти с адресом, хранящимся в паре регистров (HL);

MOV D,M ; - переслать данные из ячейки памяти с адресом, хранящимся в паре регистров (HL), в регистр (D).

5. Ввод-вывод данных. Команды используются для обращения к УВВ. Различают 2 способа обращения к внешним устройствам:

a). обращение к УВВ, не входящим в адресное пространство МП, при этом используются команды

IN N8 ; P[N8] (A), ввод байта в аккумулятор из УВВ, где N8 – 8-разрядный номер внешнего устройства;

OUT N8 ; (A) P[N8], вывод байта.

Для этого способа ввода-вывода данных при выполнении команд номер N8 устанавливается на младшем байте ША и дублируется на старшем байте ША.

б). обращение к УВВ как к ячейкам памяти, при этом УВВ входят в адресное пространство МП:

LDA A16 ; P[A16](A),

STA A16 ; (A)P[A16].

  1. Определение прерывания. Виды прерываний (маскируемые и немаскируемые, радиальные и векторные, внешние и внутренние). Приоритетность обработки запросов на прерывание. Стек. Виды прерываний и их обработка в МК AVR.

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

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

Виды прерываний:

Маскируемые прерывания - это прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний.

Немаскируемые прерывания обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.

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

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

Гораздо чаще в современных МПС используется т.н. векторная подсистема прерываний. В такой системе микропроцессор, получив запрос на векторном входе INT, выдает на свою выходную линию сигнал подтверждения прерывания INTA, поступающий на все возможные источники прерывания. Источник, не выставивший запроса, никак не реагирует на сигнал INTA. Источник, выставивший запрос, получая сигнал INTA, выдает на системную шину данных "вектор прерывания" — свой номер или адрес обслуживающей программы или, чаще, адрес памяти, по которому расположен указатель на обслужи­вающую программу. Время реакции МПС на запрос векторного прерывания минимально (1—3 машинных цикла) и не зависит от числа источников.

В зависимости от источника прерывания делятся на три вида:

  • внешние;

  • внутренние;

  • программные.

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

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

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

ПРИОРИТЕЗАЦИЯ

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

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

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

СТЕК

Стек необходим для запоминания адресов возврата из процедур обработки прерывания и подпрограмм. Его также можно использовать для временного хранения данных. Регистр указателя стека (SP) постоянно указывает на вершину стека. Он реализован в виде двух 8-битных регистров, доступных в пространстве памяти ввода-вывода. Данные помещаются в стек и извлекаются из него посредством инструкций PUSH и POP. Увеличение стека происходит в направлении от старших ячеек памяти к младшим. Таким образом, при помещении данных в стек содержимое регистра SP уменьшается, а при извлечении данных - увеличивается. После сброса, SP автоматически инициализируется значением, которое равно максимальному адресу внутреннего SRAM. При необходимости изменения SP нужно учитывать, что помещаемый в него адрес должен лежать выше 0x2000, а само изменение нужно выполнить перед вызовом каких-либо подпрограмм или разрешением прерываний.

При вызове подпрограмм или при переходе по вектору прерываний адрес возврата автоматически помещается в стек. Адрес возврата может быть представлен двумя или тремя байтами, что зависит от размера памяти микроконтроллера. У МК с памятью программ 128 кбайт и менее адрес возврата двухбайтный, поэтому, указатель стека декрементируется/инкрементируется на два. У тех же микроконтроллеров, которые оснащены памятью программ размером более 128 кбайт, адрес возврата трехбайтный, а декрементирование/инкрементирование SP выполняется на три. Адрес возврата извлекается из стека при выходе из прерывания по инструкции RETI, а из подпрограммы по инструкции RET.

Если инструкцией PUSH в стек помещаются данные, то SP декрементируется на единицу. Аналогичным образом, при извлечении данных из стека инструкцией POP содержимое SP инкрементируется на единицу.

Чтобы предотвратить сбой в выполнении программы при программном обновлении указателя стека, операция записи в SPL приводит к автоматическому отключению прерываний на время выполнения до четырех инструкций или до следующей операции записи в память ввода-вывода.

ВИДЫ ПРЕРЫВАНИЙ И ИХ ОБРАБОТКА В МК AVR

Прерывания бывают внешними и внутренними. Источниками внутреннего прерывания являются встроенные модули микроконтроллера (таймер/счетчик или сторожевой таймер). Внешние прерывания вызываются сбросом (сигнал на входе RESET) или сигналами предустановленного уровня на выводах INT.

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

Микроконтроллеры AVR семейства Mega имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $0002, отведены под таблицу векторов прерывания. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет и приоритет соот­ветствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Размер вектора прерывания зависит от объема памяти программ микроконтроллера и составляет 2 байта. Соответственно, для перехода к подпрограммам обработки прерываний в моделях используются команда JMP.

Обработка прерываний

Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть уста­новлен в 1, а для запрещения — сброшен в 0. Индивидуальное разрешение или запрещение (маскирование) прерываний производится установкой/сбросом соответствующих битов регистров масок прерываний.

При возникновении прерывания флаг I регистра SREG аппаратно сбрасывается, запрещая тем самым обработку следующих прерываний. Однако в подпрограмме обработки прерывания этот флаг можно снова установить в 1 для разрешения вложенных прерываний. При возврате из подпрограммы обработки прерывания (при выполнении команды RETI) флаг I устанавливается аппаратно.

Все имеющиеся прерывания можно разделить на два типа. Прерывания первого типа генерируются при наступлении некоторого события, в результате которого устанавливается флаг прерывания. Затем, если прерывание разрешено, в счетчик команд загружается адрес вектора соответствующего прерывания. При этом флаг прерывания аппаратно сбрасывается. Он также может быть сброшен программно, записью лог. 1 в бит регистра, соответствующий флагу.

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

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

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

Внешние прерывания

В микроконтроллерах AVR за управление внешними прерываниями отвечают, главным образом два регистра:

GIFR (General Interrupt Flag Register) – регистр флагов внешних прерываний.

GICR (General Interrupt Control Register) – разрешает/запрещает внешние прерывания по входу INT0/INT1;

Соседние файлы в папке госы