03_Периферийные_устройства_Информ_материал_СПО_ч3 (1268619), страница 2
Текст из файла (страница 2)
Адресованный подчиненныйсбросит свой SM2-бит и приготовится к приему байтов данных. Не адресованныеподчиненные устройства оставляют в том же состоянии биты SM2 и переходят квыполнению своих задач, игнорируя поступающие байты данных.Бит SM2 не оказывает никакого влияния в режиме 0, а в режиме 1 может бытьиспользован для проверки получения стоп-бита. При приеме в режиме 1, если SM2 = «1»,прерывание приемника не будет активизировано, пока не получен действительный стопбит.3.3. Система прерываний микроконтроллера 80C51Микроконтроллер 80C51 имеет пять источников прерываний с двумя уровнямиприоритета.
На рис. 1 представлены все источники прерываний и соответствующие имвектора (адреса подпрограмм обработки прерываний), флаги запросов прерываний иуправляющие флаги. Порядок расположения источников прерываний на рис. 1соответствует приоритетам прерываний внутри данного уровня; источники внешнихпрерываний заключены в двойную рамку.Вектор прерывания — одна или несколько ячеек памяти, содержащие адрес программы обработкипрерывания. Адрес вектора прерывания определяется по номеру прерывания.0INT0P3.21IT0TCON.0ПЕРЕПОЛНЕНИЕТАЙМЕРА 00INT1P3.31IT1TCON.2ПЕРЕПОЛНЕНИЕТАЙМЕРА 1АдресподпрограммыРегистрыРазрешениеОбщееобработкиисточника разрешение прерывания приоритетаIE00003HTCON.1EX0PX0IE.0IP.0000BHTF0TCON.5ET0PT0IE.1IP.10013HIE1TCON.3EX1PX1IE.2IP.2001BHTF1TCON.7RISCON.0UARTTISCON.1ET1IE.30023H1ESIE.4EAIE.7Рис.1.
Схема системы прерываний 80С51PT1IP.3PSIP.4ВЫСОКИЙУРОВЕНЬПРИОРИТЕТАНИЗКИЙУРОВЕНЬПРИОРИТЕТАПоследовательностьопроса флагов3.3.1. Источники прерыванийКаждое из внешних прерываний INT0 и INT1 может быть активизировано по нулевомууровню или по срезу. Это определяется битами IT0 и IT1 регистра TCON. Распознаваниесреза имеет место, если последовательные выборки входного сигнала показывают «1» водном машинном цикле и «0» – в следующем цикле (т.е. определение происходит какперепад по срезу). Флаги, которые действительно генерируют эти прерывания, – биты IE0и IE1 регистра TCON.
Если внешние прерывания активизированы по срезу, то флагизапроса прерываний IE0 и IE1 сбрасываются аппаратно при вызове соответствующейподпрограммы обработки прерывания. В противном случае, когда прерываниеактивизировано по уровню, запрос прерывания должен деактивизироваться до окончанияподпрограммы обработки прерывания. Отметим, что внешние сигналы INT0 и INT1имеют отношение как к таймерам, так и к запросам прерываний.Прерывания от TC0 и TC1 генерируются единичными битами TF0 и TF1 регистра TCON,которые устанавливаются при переполнении соответствующих таймеров/счетчиков. Флаг,вызвавший прерывание, сбрасывается аппаратно при вызове подпрограммы обработкипрерывания.Прерывание последовательного порта генерируется по схеме ИЛИ флагов RI и TI.
Привызове подпрограммы обработки прерывания ни один из флагов не сбрасываетсяаппаратно. Обычно подпрограмма, обслуживающая прерывание, должна определитькаким флагом вызвано прерывание, и сбросить этот флаг. Т.е. в данном случае флагизапроса прерывания должны сбрасываться программно.ПДП (DMA — Direct Memory Access) — прямой доступ к памяти.Исходно, после сброса микроконтроллера, все прерывания запрещены. Все биты,генерирующие прерывания, могут быть сброшены или установлены программно с тем жерезультатом, как если бы они были установлены или сброшены аппаратно. Т.е.программно можно сгенерировать прерывание или отменить отложенное прерывание.основная программа(бесконечный цикл)возвращение восновную программуISRточки вызоваподпрограммобработчиковпрерыванияподпрограмма обработкипрерываниязапроспрерыванияISRвложенные прерывания(по приоритету)Рис.
2. Иллюстрация работы системы прерываний микроконтроллераКаждый из источников прерываний можно индивидуально разрешить или запретитьустановкой или сбросом соответствующего бита в РСФ IE, допускающего побитовуюадресацию. Этот регистр (см. рис. 3) также содержит бит глобального запрета прерыванийEA, который запрещает все прерывания сразу, если EA = «0». Обработчики прерыванийне могут находиться на произвольном месте.3.3.2. Структура приоритетов прерыванийКаждому источнику прерывания индивидуально может быть назначен один из двухуровней приоритета.
Уровни приоритета прерываний определяются регистромспециальных функций с побитовой адресацией IP, назначение разрядов которогоописывается на рис. 4. Нулевое значение бита – это низкий приоритет, а единичноезначение – высокий приоритет соответствующего прерывания.
Стартовавшеенизкоуровневое прерывание может быть прервано только высокоуровневымпрерыванием, но не другим низкоуровневым прерыванием. Стартовавшеевысокоуровневое прерывание не может быть прервано никаким другим источникомпрерывания. Если одновременно поступают два запроса прерываний с разнымприоритетом, обслуживаться будет запрос прерывания более высокого уровня.
Когдаодновременно поступают запросы с одинаковым приоритетом, то внутренняяпоследовательность опроса определяет обслуживаемый запрос. Следовательно, внутрикаждого уровня приоритета имеется вторая структура приоритета, определяемаяпоследовательностью опроса. Последняя отображена на рис. 1 соответствующимпорядком расположения источников прерываний.
Структура приоритета внутри уровняиспользуется только при одновременном поступлении запросов прерываний содинаковым уровнем приоритета.3.3.3. Как обрабатываются прерыванияФлаги запросов прерываний выбираются в фазе S5P2 каждого машинного цикла. Выборкиопрашиваются в следующем машинном цикле. Система прерываний, обнаружив приочередном опросе какой-либо установленный флаг прерывания, аппаратно сформируетвыполнение команды LCALL для вызова соответствующей подпрограммы обработкипрерывания. Выполнение блокируется (задерживается) одним из следующих условий:o стартовало прерывание равного или более высокого уровня приоритета;o текущий машинный цикл не является последним циклом выполняемой команды;o текущая команда — это RETI или любая команда доступа к регистру IP или IE.Второе условие гарантирует, что никакой запрос прерывания не будет обслуживаться,пока не завершится выполнение текущей команды.
Последнее условие обеспечиваетвыполнение после окончания одной из вышеуказанных команд, по крайней мере, ещеодной команды перед вызовом подпрограммы обработки прерывания. Отметим, что флагпрерывания, установленный во время блокировки LCALL и сброшенный до ее снятия, невызовет прерывания (Факт, что флаг прерывания был однажды активен, но не обслуженне запоминается. Каждый цикл опроса новый).При выполнении команды LCALL содержимое программного счетчика сохраняется встеке (сначала младший байт), а затем в программный счетчик загружается адресподпрограммы обработки прерывания, зависящий от источника прерывания (см. рис.
1).Заметим, что если высокоуровневый запрос прерывания становится активным во время аппаратного вызоваподпрограммы обслуживания, а именно в фазе S5P2 1-го цикла аппаратной команды LCALL, то поокончании процедуры текущего вызова сразу же начнет выполняться процедура аппаратного вызовапоступившего высокоуровневого запроса. Аппаратный вызов LCALL также может сбрасывать флагизапроса прерывания (см. выше).Подпрограмма обслуживания прерывания обязательно должна завершаться командойRETI. Эта команда извлекает из верхушки стека два байта и загружает их в программныйсчетчик – выполнение программы продолжается с места, где она была прервана. Крометого, RETI снимает запрет на прерывания с уровнем приоритета, равным уровнюприоритета обслуживаемого прерывания.
Этот запрет устанавливается аппаратно припереходе по вектору на подпрограмму обслуживания прерывания.Диаграмма временной реакции прерывания:C0/S5P2Выборка запросапрерыванияC1Опрос флагапрерыванияC2 C3LCALLC4Старт подпрограммы обработкипрерывания3.3.4. Пошаговое выполнениеСтруктура прерывания 80C51 допускает пошаговое выполнение с очень небольшимипрограммными затратами. На запрос прерывания реакции не будет, пока прерываниеравного приоритета находится в обработке, или не будет выполнена хотя бы одна командапосле RETI. Таким образом, если подпрограмма обработки прерывания стартовала, она неможет быть перезапущена до тех пор, пока не выполнится одна команда прерваннойпрограммы после выполнения RETI.