Внешние прерывания [Robotic & Microcontroller Educational Knowledgepage
Внешние прерывания (англ. external interrupt) являются одними из самых простых функций периферии. У микроконтроллеров AVR обычно от 1 до 8 специальных выводов, при изменении логического значения или в определённом состоянии которых, создаётся прерывание в программе. Так как в основном эта функция используется для отслеживания логических сигналов вне контроллера, соответствующие выводы называются выводами внешнего прерывания.
Для использования внешнего прерывания следует настроить вывод на обычный режим входа IO (можно использовать и в режиме выхода, но в таком случае прерывание может быть создано только самим контроллером). В регистре конфигурации следует разрешить создание прерывания и указать условие, при котором оно будет выполнено. Имеется четыре возможных условия:
Логический нуль(напряжение — 0V)
Изменение логического значения
Спадающий фронт — логическое изменение из единицы в нуль
Нарастающий фронт – логическое изменение из нуля в единицу
При выборе логического нуля, прерывание создаётся до тех пор, пока значение вывода равно нулю. Работа основной программы в тот момент остановлена.
Исходя из принципов работы, существуют два вида внешних прерываний: синхронизированный с тактом контроллера и асинхронный. Синхронизированные прерывания работают, запоминая значение выводов, что означает, что логические изменения находятся путём сравнения значений, полученных от двух разных тактов. Если логические изменения внешнего сигнала происходят быстрее, чем идёт рабочий такт, то прерывания либо создаются неверно, либо вовсе пропускаются. Асинхронные прерывания не зависят от такта контроллера и позволяют определить быстро меняющийся внешний сигнал – логический нуль должен удерживаться сигналом как минимум в 50 ns. У ATmega128 4 синхронизированных и 4 асинхронных внешних прерывания.
Пример
Требуется заставить вывод ATmega128 номер 9 (вывод 7 шины Е) создать прерывание, если его значение изменится. Этому выводу соответствует внешнее прерывание INT7, которое синхронно.
#include <avr/interrupt.h> // Программа внешнего прерывания ISR(INT7_vect) { // Сделай что-нибудь } int main() { // Изменение вывода 7 шины Е входом путём обнуления бита 7 DDRE &= ~(1 << PIN7); // Установление pull-up резистора в вывод 7 шины Е от плавания PORTE |= (1 << PIN7); // Установление прерывания 7 в логическое изменение // в регистре конфигурации внешних прерываний EICRB = (1 << ISC70); // Разрешение внешнего прерывания 7 EIMSK |= (1 << INT7); // Разрешение глобального прерывания sei(); // Бесконечный цикл программы while (1) continue; }
В дополнение к прерываниям, созданным одиночными выводами, в крупных AVR можно использовать прерывания изменений логических значений целых групп выводов. Такие прерывания называют просто прерыванием изменения вывода (англ.
Внешние прерывания — Микроконтроллерные системы
Прерывание представляет собой событие, при наступлении которого выполнение основной программы приостанавливается и вызывается функция, обрабатывающая прерывание определённого типа.Прерывания делятся на внутренние и внешние. К источникам внутренних прерываний относятся встроенные модули микроконтроллера (таймеры, приёмопередатчик USART, АЦП и т.д).
Внешние прерывания возникают при поступлении внешних сигналов на выводы микроконтроллера (например сигналы на выводы RESET и INT).
Векторы прерываний в Atmega8
Адрес | Источник прерывания | Описание |
0x0000 | RESET | Сигнал сброса |
0x0001 | INT0 | Внешний запрос на прерывание по входу INT0 |
0x0002 | INT1 | Внешний запрос на прерывание по входу INT1 |
0x0003 | T/C1 | Захват по таймеру T/C1 |
0x0004 | T/C1 | Совпадение с регистром сравнения A таймера T/C1 |
0x0005 | T/C1 | Совпадение с регистром сравнения B таймера T/C1 |
0x0006 | T/C1 | Переполнение счётчика T/C1 |
0x0007 | T/C0 | Переполнение счётчика T/C0 |
0x0008 | SPI | Передача данных по интерфейсу SPI завершена |
0x0009 | UART | Приём данных приёмопередптчиком UART завершен |
0x000A | UART | Регистр данных UART пуст |
0x000B | UART | Передача данных приёмопередптчиком UART завершена |
0x000C | ANA_COMP | Прерывание от аналогового компаратора |
Внешние прерывания Atmega8
Характер сигналов, приводящих к возникновению прерывания задаётся в регистре управления MCUCR, в частности в разрядах — ISC00 и ISC01 для входа INT 0; ISC10 и ISC11 для входа INT1.
ISCx0 | ISCx1 | Значение |
0 | 0 | Прерывание вызывается по уровню логический «0» на входе INTx |
0 | 1 | Прерывание вызывается при изменении уровня сигнала на входе INTx |
1 | 0 | Прерывание вызывается по ниспадающему фронту сигнала на входе INTx |
1 | 1 | Прерывание вызывается по возрастающему фронту сигнала на входе INTx |
Управление прерываниями
За управление внешними прерываниями в ATmega8 отвечают 2 регистра:
GIMSK — запрет/разрешение прерываний по сигналам на входах INT0, INT1
GIFR — управление всеми внешними прерываниями
Регистр GIMSK(GICR)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
INT1 | INT0 | — | — | — | — | — | — |
INTx=1: прерывания по сигналу на входы INTx разрешены.
Регистр GIFR
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
INTF1 | INTF0 | — | — | — | — | — | — |
INTFx=1: произошло прерывание на входе INTx. При входе в подпрограмму обработки прерывания INTFx автоматически сбрасывается в состояние логического «0».
Внешние прерывания atmega16
Прерывание — сигнал, сообщающий о наступлении какого либо события Переполнение счетчика таймера, завершение преобразования АЦП и т. При этом выполнение текущей последовательности команд прерывается, и управление передается обработчику прерывания, который в свою очередь корректно реагирует на событие и обрабатывает его, после чего управление передается в прерванный код. Прерывания позволяют своевременно обрабатывать события периферийных устройств, таких как таймеры, АЦП, приемопередатчики и так далее. Рассмотрим слегка измененный пример из предыдущего урока:. В основном цикле программы, контроллер занят изменением значения переменной i.
Поиск данных по Вашему запросу:
Внешние прерывания atmega16
Схемы, справочники, даташиты:
Прайс-листы, цены:
Обсуждения, статьи, мануалы:
Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам. ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Прерывания по переполнению и по совпадению в AVR микроконтроллерах
AVR. Внешние прерывания. Подключение энкодера
Осциллографом не обладаю, но проверить результат хочется. Делаем счетчик импульсов, проверяем работу. На базе ATmega P реализовать счетчик импульсов для проверки ШИМ 25 кГц , точность измерений до импульса не нужна, но порядок нужно знать. Логика решения проста, отслеживаем импульсы, по которым инкрементируем глобальную переменную в течении секунды. Накопленное значение и будет частотой входящего сигнала. Для считывания импульсов воспользуемся внешними прерываниями, они описаны на страницах документации от производителя.
Первым делом необходимо настроить порт D как вход, а для избежания наводок подключу подтягивающий резистор. Настройка отслеживаемых событий идентична, за разницей в битах:. По вышеизложенному пишем код. Прерывания настроил, теперь надо их обработать. На время этих действий прекращаю обработку прерываний.
Так же можно сформировать и проверить сигнал на одном МК. Выводимые показания примерно равны ранее рассчитанной частоте, небольшие отличия ожидаемы из-за реализации. Для точного измерения наверное правильнее считать время между импульсами и от этого вычислять частоту. Ваш e-mail не будет опубликован. Решение Логика решения проста, отслеживаем импульсы, по которым инкрементируем глобальную переменную в течении секунды. Настройка внешних прерываний Первым делом необходимо настроить порт D как вход, а для избежания наводок подключу подтягивающий резистор.
Настройка отслеживаемых событий идентична, за разницей в битах: 00 — Низкий уровень сигнала; 01 — Любое логическое изменение сигнала; 10 — Нисходящий фронт сигнала; 11 — Восходящий фронт сигнала. Добавить комментарий Отменить ответ Ваш e-mail не будет опубликован.
Прерывания
Часто необходимо сделать так, чтобы выполняемая программа при определенном стечении обстоятельств или при возникновении некоторого определенного события прервалась и вместо нее выполнились определенные действия. Огонек бежит с определенной скоростью, которую можно менять нажимая на кнопки, которые в свою очередь подключены к прерываниям микроконтроллера INT0 и INT1. Пример реализации данной программы будет представлен ниже. Для общего образования и понимания прочитайте про прерывания микроконтроллеров AVR. Микроконтроллер будем использовать ATtiny , резисторы на светодиодах номиналом Ом , резисторы на кнопках номиналом 4,7 кОм. Для этого нам понадобиться программа бегущего огонька, в свою очередь она состоит из двух программ.
У меня была мысль, что т.к. я задействую внешние прерывания то регистры DDR и PORT ничего не изменят в поведение МК, но это не.
AVR: Обработка внешних прерываний
Если я поставлю, ну к примеру, порт A на вход, то какие-нибудь Interrupts происходят, когда на отот самый порт на любую ногу подается чего нибудь? Raising, Falling, Low level. Далее, все зависит от того МК, который Вы применяете. События, по-которым эти прерывания должны наступить, настраиваются установкой соотв. Просто я по началу глюпо думаль, что эти интерраптс вызываются по любому из каналов, любого из портов и поэтому пробовал их банально на PA0 — естественно у меня не работало Так это что получается, только пара ножек может вызвать интерраптс? А как тогда быть, если их интерраптс надо много?
Внешние прерывания STM32.
Учебный курс AVR. Порт представляет собой совокупность выводов микроконтроллера объединенных в группу. Каждый вывод порта можно независимо от других выводов конфигурировать на вход или на выход. Также многие выводы микроконтроллеров AVR имеют альтернативные функции.
Данный урок будет достаточно простым. Надеюсь, вы хорошо усвоили прошлые материалы: урок по таймерам и управление кнопками.
Прерывания в atmega8
Внешние прерывания для AtMega16
Микроконтроллеры без использования прерываний практически ничего не стоят. Прерывание interrupt получило свое название из того факта, что при срабатывании прерывания по какому-нибудь событию нормальное выполнение программы прерывается, и выполняется особый код — код обработчика прерывания interrupt handler. Прерывания можно рассматривать просто как подпрограммы, которые приостанавливают нормальный процесс выполнения программы до тех пор, пока код подпрограммы обработчика прерывания не будет завершен. После того, как обработчик прерывания завершит свою работу, ядро микроконтроллера вернется к исполнению основной программы точно в той точке, где она была прервана прерыванием. События прерывания обычно происходят от каких-то внешних асинхронных воздействий на микроконтроллер — например, переключение логического уровня на внешнем выводе порта, либо переполнение регистра таймера, что означает истечение заданного интервала времени, и т. Почему же прерывания так важны? Например, мы могли бы обойтись без прерываний, в бесконечном цикле опрашивая возникновение интересующих нас событий. Такое функционирование программы называется опросом polling.
Если это ATmega16, то у нее имеется два внешних прерывания INT0, INT1 ( PORTD, линии PD2, PD3 соответственно). События.
Прерывания
Внешние прерывания atmega16
Прерывание представляет собой событие, при наступлении которого выполнение основной программы приостанавливается и вызывается функция, обрабатывающая прерывание определённого типа. Прерывания делятся на внутренние и внешние. К источникам внутренних прерываний относятся встроенные модули микроконтроллера таймеры, приёмопередатчик USART и т. В микроконтроллере ATmega8 каждому прерыванию соответствует свой вектор прерывания адрес в начале области памяти программ, в которой хранится команда для перехода к заданной подпрограмме обработки прерывания.
AVR для начинающих. Урок 6. Прерывания.
ВИДЕО ПО ТЕМЕ: #11.1 Прерывания в Arduino (AVR). Прерывания по таймеру — Arduino для начинающих — Центр РАЗУМСовет — умейте правильно находить информацию! Добавить страницу в закладки:. Обычно ключевые моменты устройства МК и его параметры указаны на первой странице ДатаШита а полному раскрытию их посвящен весь ДШ, в частности на второй странице ДШ показано расположение ножек МК в различных корпусах и их обозначения связанные с их дополнительными функциями. Далее в ДШ идет подробное описание каждой ножки МК и затем структурно-логическая схема МК — то как связаны его модули воедино. Ограничения заключаются в том что все устройства имеют определенные параметры и лучше, быстрее работать не могут.
Осциллографом не обладаю, но проверить результат хочется.
Использование режимов сна позволяет отключать неиспользуемые модули микроконтроллера, тем самым уменьшая потребляемую мощность. Микроконтроллер поддерживает несколько режимов сна, позволяющих программисту оптимизировать энергопотребление под требования приложения. Выход из режима сна происходит при возникновении разрешенного прерывания. В этом случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое файла регистров и статического ОЗУ остается неизменным после выхода из режима сна. Если во время действия режима сна возникает условие сброса, то микроконтроллер пробуждается и исполняет код программы по вектору сброса.
Частенько бывает, что микросхемка должна работать-работать себе спокойненько, а на какое-то событие бросать все дела и выполнять что-то иное. А потом — снова возвращаться к первоначальному делу Это как в часах, например, — они показывают время до тех пор, пока не настанет время будильника.
Микроконтроллеры AVR: Внешние прерывания
Внешние прерывания — прерывания от внешних устройств, подключенных к микроконтроллеру, а также событий, происходящих на входах микроконтроллера. Для управления внешними прерываниями предназначен регистр
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | — | ISC11 | ISC01 | ISC00 |
Биты ISC11 (3) и ISC10 (2) управляют событиями, в результате которых будет сгенерировано прерывание INT1:
- 00 — низкий уровень на входе INT1
- 01 — любое изменение уровня на входе INT1
- 10 — по спадающему сигналу на входе INT1
- 11 — по возрастающему сигналу на входе INT1
Биты ISC01 (1) и ISC00 (0) управляют событиями, в результате которых будет сгенерировано прерывание INT0:
- 00 — низкий уровень на входе INT0
- 01 — любое изменение уровня на входе INT0
- 10 — по спадающему сигналу на входе INT0
- 11 — по возрастающему сигналу на входе INT0
Разрешением внешних прерываний управляет регистр EIMSK:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | — | — | INT1 | INT0 |
Бит INT1 (1) разрешает внешние прерывания INT1 при записи в него 1.
Бит INT0 (0) разрешает внешние прерывания INT0 при записи в него 1.
Чтобы определить откуда поступило внешнее прерывание, существует регистр флагов прерываний EIFR:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | — | — | INTF1 | INTF0 |
Бит INTF1 (1) устанавливается в 1, если прерывание поступило от INT1.
Бит INTF0 (0) устанавливается в 1, если прерывание поступило от INT0.
Помимо внешних прерываний на выводах INT1 (5 ножка) и INT0 (4 ножка) можно использовать различные группы выводов микроконтроллера. В микроконтроллере ATmega328 существует три группы выводов, управление которыми осуществляется регистром PCICP:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | — | — | PCIE1 | PCIE0 |
Бит PCIE2 (2) разрешает прерывания по изменению состояния второй группы выводов при установке в него 1.
Бит PCIE1 (1) разрешает прерывания по изменению состояния первой группы выводов при установке в него 1.
Бит PCIE0 (0) разрешает прерывания по изменению состояния нулевой группы выводов при установке в него 1.
Контроль за тем, от какой группы выводов поступило прерывание осуществляется регистром PCIFR:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | — | — | PCIF1 | PCIF0 |
Бит PCIF2 (2) устанавливается в 1, если прерывание поступило от второй группы выводов.
Бит PCIF1 (1) устанавливается в 1, если прерывание поступило от первой группы выводов.
Бит PCIF0 (0) устанавливается в 1, если прерывание поступило от нулевой группы выводов.
Влиять на генерацию прерывания может любое изменение на любом выводе группы. Для того, чтобы включить необходимые выводы групп существуют регистры-маски PCMSK2, PCMSK1, PCMSK0.
Регистр PCMSK2:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
PCINT23 | PCINT22 | PCINT19 | PCINT17 | PCINT16 |
Регистр PCMSK1:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | PCINT14 | PCINT11 | PCINT9 | PCINT8 |
Регистр PCMSK2:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
PCINT7 | PCINT6 | PCINT3 | PCINT1 | PCINT0 |
Для включения необходимого входа, соответствующий бит в регистре-маске должен быть установлен в 1.
AVR. Внешние прерывания. Подключение энкодера
Внешние прерывания очень — очень мощный инструмент. Контроллер способен при правильной настройке реагировать на внешнее событие. При этом останавливается выполнение основной программы и выполняется обработчик прерывания.
Подготовка к работе
На нашей плате TutorShield установлены две кнопки, которые подключены к цифровым выводам PD2 и PD3. Подробно подключение кнопок описано в предыдущей статье цикла. Помимо них, для дальнейших экспериментов подключим трехцветный светодиод к выводам PB1, PB2, PB3. Установите перемычки так, как показано на рисунке:
Установка перемычек
Первый пример
В предыдущей статье мы в самой функции main опрашивали регистры PIN и делали вывод о состоянии выводов контроллера. При этом легко пропустить изменение состояния. Для этого случая в контроллере есть механизм внешних прерываний.
Все что нужно для использования прерываний, это выполнить настройку управляющих регистров и настроить обработчик прерываний. Рассмотрим это на конкретном примере.
#include <avr/io.h> #define F_CPU 16000000UL //16MHz #include <util/delay.h> #define LED_BLUE_PB 3 #define LED_ORANGE_PB 2 #define LED_GREEN_PB 1 int main(void) { //output configuration DDRB |= (1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB); PORTB &= ~((1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB)); //interrupt setup GICR |= (1<<INT0)|(1<<INT1); MCUCR |= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11); //global interrupt enable sei(); while(1) { //do nothing } } ISR(INT0_vect) { PORTB |= 1<<LED_BLUE_PB; } ISR(INT1_vect) { PORTB &= ~(1<<LED_BLUE_PB); }
Теперь давайте по порядку разберем, что именно происходит во всех строках.
В первую очередь на выход настраиваются выводы. Обратите внимание, что, коль скоро мы будем использовать прерывания, нет необходимости настраивать на входы выводы, подключенные к кнопкам.
Далее происходит настройка регистров, отвечающих за режим работы внешний прерываний. Подробную информацию о назначении всех битов этих регистров вы найдете на странице 66 даташита на контроллер Atmega8. Нам необходимы только следующие:
- GICR — основной контролирующий регистр модуля прерываний. В необходимо выставить два бита — INT0 и INT1. Они разрешают жти прерывания. То есть, если на выводах контроллера PD2 и PD3 соответственно будет меняться напряжение — прерывания будут обрабатываться (смотри Pin Configurations на стр. 2 даташита).
- MCUCR отвечает за режим вызова прерываний. Прерывания может быть вызвано при возрастании напряжения на выводе, при уменьшении, при изменении и тогда, когда на выводе логический ноль. Например для прерывания INT1 режим задается битами ISC11 и ISC10. Мы выставили эти биты в единицу. Мы предлагаем вам самостоятельно выяснить при каком условии будет вызвано прерывание (стр. 66 даташита)
Затем необходимо глобально разрешить контроллеру обрабатывать прерывания вообще. Это делается вызовом функции sei(). Возможность глобального разрешения и запрета прерываний позволяет вам во время выполнения важных задач отключать вызов обработчиков прерываний. В нашем проекте такого не понадобится, поэтому мы просто раз и навсегда разрешили контроллеру выполнять прерывания.
Далее по коду запускается бесконечный цикл в котором ничего не выполняется.
Для работы остается только описать контроллеру, что делать при наступлении прерывания. Причем, если прерывание вызвано, а обработчика для него нет — контроллер повиснет.
Итак, всего в микроконтроллере Atmega8 девятнадцать векторов прерываний. Все они описаны на странице 46 даташита. Нас интересуют прерывания INT0 и INT1. Функция объявляется следующим образом: ISR(INT0_vect). Далее описывается какое-то действие. В нашем случае при срабатывании прерывания INT0 голубой светодиод включается, а в обработчике прерывания INT1 — выключается.
Вот как это выглядит:
Как вы уже выяснили, прерывание срабатывает, когда кнопка отпускается, то фронту импульса на выводе. Попробуйте настроить прерывание так, чтобы состояние светодиода изменялось в момент нажатия на кнопку.
Второй пример
Скорее всего на практике вы не заметите разницу и светодиод у вас будет включаться при нажатии на кнопку. Это связано с тем, что при нажатии появляется, так называемый, дребезг контактов. То есть контакты перед тем как полностью замкнуться или разомкнуться успевают несколько раз перейти из одного состояния в другое. Проверить эту особенность можно если добавить в программу вывод в COM-порт некоторых значений.
Заведем переменную и каждый раз в прерывании будем отправлять ее компьютеру:
#include <avr/io.h> #define F_CPU 16000000UL //16MHz #include <util/delay.h> #define LED_BLUE_PB 3 #define LED_ORANGE_PB 2 #define LED_GREEN_PB 1 uint8_t i = 0; void UARTSend(uint8_t data) { while(!(UCSRA & (1<<UDRE))); UDR = data; } int main(void) { //output configuration DDRB |= (1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB); PORTB &= ~((1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB)); //interrupt setup GICR |= (1<<INT0)|(1<<INT1); MCUCR |= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11); //UART setup UBRRH = 0; UBRRL = 103; //baud rate 9600 UCSRB = (1<<RXEN)|(1<<TXEN); UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8 bit, 1 stop bit //global interrupt enable sei(); while(1) { //do nothing } } ISR(INT0_vect) { PORTB |= 1<<LED_BLUE_PB; UARTSend(i); i++; } ISR(INT1_vect) { PORTB &= ~(1<<LED_BLUE_PB); UARTSend(i); i--; }
Если вы посмотрите в мониторе COM-порта, то увидите, что иногда, при нажатии кнопки, вам будет приходить не один, а несколько байт. Это значит, что из-за дребезга контактов прерывание было вызвано несколько раз.
С проблемой дребезга контактов можно бороться как схемотехнически, так и программно. Сейчас мы не будем останавливаться на этом.
Обработка энкодера
Энкодер подключен к тем же выводам и при вращении генерирует последовательности импульсов на своих выводах при вращении вала. На практике самый простой способ обработки энкодера это настройка одного из выводов на прерывание и при его срабатывании проверять состояние другого вывода. При вращении вала энкодера мы будем менять яркость свечения светодиода, так что придется вспомнить статью про ШИМ.
#include <avr/io.h> #define F_CPU 16000000UL //16MHz #include <util/delay.h> #define LED_BLUE_PB 3 #define LED_ORANGE_PB 2 #define LED_GREEN_PB 1 uint8_t i = 0; void UARTSend(uint8_t data) { while(!(UCSRA & (1<<UDRE))); UDR = data; } int main(void) { //output configuration DDRB |= (1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB); PORTB &= ~((1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB)); //interrupt setup GICR |= (1<<INT0)|(1<<INT1); MCUCR |= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11); //UART setup UBRRH = 0; UBRRL = 103; //baud rate 9600 UCSRB = (1<<RXEN)|(1<<TXEN); UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8 bit, 1 stop bit //global interrupt enable sei(); while(1) { //do nothing } } ISR(INT0_vect) { PORTB |= 1<<LED_BLUE_PB; UARTSend(i); i++; } ISR(INT1_vect) { PORTB &= ~(1<<LED_BLUE_PB); UARTSend(i); i--; }
Обратите внимание на изменения в коде.
- Добавлена настройка вывода PD3 на вход
- Инициализируется только прерывание INT0
- Добавлена настройка таймера
- В обработчике прерывания мы проверяем состояние вывода PD3 и в зависимости от него увеличиваем или уменьшаем с контролем переполнения переменную pwm, а затем меняем яркость светодиода
Обратите внимание, что меняться будет яркость зеленого светодиода. Это связано с тем, что на первых платах мы ставили светодиоды с другим порядком расположения цветов. Из-за этого на виде меняется яркость голубого светодиода:
Скорее всего вы заметите, что у энкодера дребезг контактов еще больше.
Индивидуальные задания
- Измените код первого примера так, чтобы при нажатии на кнопку светодиод менял свое состояние. То есть при каждом последующем нажатии он должен включаться или выключаться.
- Используя знания о работе с сегментным индикатором подключите его и выведите на дисплей значение переменной, изменяемой энкодером
Остальные статьи цикла можно найти здесь.
Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.
Команда проверки на ожидающие внешние прерывания
Изобретение относится к области вычислительной техники. Технический результат заключается в повышении точности выявления наличия ожидающего внешнего прерывания. Технический результат достигается за счет получения команды на проверку наличия одного или нескольких ожидающих внешних прерываний, причем внешним прерыванием является прерывание, происходящее из пределов компьютерной системы, являющееся внешним по отношению к программе и отличное от прерывания ввода/вывода, происходящего из устройства ввода-вывода, и выполнение команды, включающее: выявление, на основе предоставленной командой информации, одного или нескольких подлежащих проверке подклассов внешних прерываний, проверку наличия одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем проверку выполняют, когда управляющая программа вычислительного окружения деактивирована для одного или нескольких подклассов внешних прерываний, и указание на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем внешнее прерывание считают ожидающим для подкласса внешнего прерывания независимо от того, активирован ли этот подкласс внешнего прерывания. 3 н. и 11 з.п. ф-лы, 6 ил.
Область техники
Один или несколько аспектов относятся, в целом, к обработке в вычислительном окружении и, прежде всего, к обеспечению такой обработки.
Уровень техники
Вычислительные окружения зачастую предлагают механизм для обеспечения прерывания для изменения последовательности обработки в вычислительном окружении. Сигнал прерывания (также называемый прерыванием) является сигналом для операционной системы или процессора, в качестве примеров, служащий для временного прекращения выполнения конкретной программы с целью выполнения другой задачи. В качестве примера, один тип прерывания, внешнее прерывание, принуждает работающую в текущий момент времени программу к приостановке для обработки прерывания с целью выполнения подпрограммы операционной системы с более высоким приоритетом. Механизм прерывания в центральном вычислительном устройстве принуждает к ответвлению от действующей программы к выбранной подпрограмме для другой обработки. После того, как прерывание завершается, выполнение приостановленной программы может быть возобновлено.
Для операционной системы является выгодным предоставление ей возможности оповещения о наличии ожидающего прерывания для конкретного ресурса в то время, когда она остается деактивированной для этого класса прерываний. Также является полезным предоставления возможности выявления наличия ожидающего внешнего прерывания.
Этот тип обработки также может быть произведен и для других типов прерываний.
Поэтому на уровне техники имеется потребность в разрешении вышеуказанной проблемы.
Сущность изобретения
Одним объектом изобретения является компьютерно-реализуемый способ обеспечения обработки в вычислительном окружении, включающий получение команды на проверку наличия одного или нескольких ожидающих внешних прерываний, каковыми являются прерывания, происходящие из пределов компьютерной системы, являющиеся внешними по отношению к программе и отличные от прерывания ввода/вывода, происходящего из устройства ввода-вывода, и выполнение этой команды, включающее: выявление, на основе предоставленной командой информации, одного или нескольких подлежащих проверке подклассов внешних прерываний; проверку наличия одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем проверку выполняют, когда управляющая программа вычислительного окружения деактивирована для одного или нескольких подклассов внешних прерываний; и указание на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем внешнее прерывание считают ожидающим для подкласса внешнего прерывания независимо от того, активирован ли этот подкласс внешнего прерывания.
Другим объектом изобретения является компьютерная система для обеспечения обработки в вычислительном окружении, содержащая память и взаимодействующий с памятью процессор и выполненная для осуществления способа, включающего получение команды на проверку наличия одного или нескольких ожидающих внешних прерываний, каковыми являются прерывания, происходящие из пределов компьютерной системы, являющиеся внешними по отношению к программе и отличные от прерывания ввода/вывода, происходящего из устройства ввода-вывода, и выполнение этой команды, включающее: выявление, на основе предоставленной командой информации, одного или нескольких подлежащих проверке подклассов внешних прерываний; проверку наличия одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем проверку выполняют, когда управляющая программа вычислительного окружения деактивирована для одного или нескольких подклассов внешних прерываний; и указание на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем внешнее прерывание считают ожидающим для подкласса внешнего прерывания независимо от того, активирован ли этот подкласс внешнего прерывания.
Еще одним объектом изобретения является машиночитаемый информационный носитель, считываемый посредством устройства обработки данных и сохраняющий подлежащие выполнению посредством устройства обработки данных команды для осуществления предлагаемого в изобретении способа, описанного выше.
Настоящее изобретение также может быть реализовано в компьютерной программе, содержащей участки программного кода, сохраняемой на машиночитаемом носителе и загружаемой во внутреннюю память цифровой вычислительной машины, когда данная программа выполняется на компьютере для выполнения этапов изобретения.
Кроме того, настоящее изобретение также может быть реализовано в компьютерной программе, содержащей участки программного кода, сохраняемой на машиночитаемом носителе и загружаемой во внутреннюю память предлагаемой в изобретении системы, когда данная программа выполняется системой для выполнения этапов изобретения.
Недостатки известного уровня техники преодолены, а дополнительные преимущества обеспечены посредством предоставления компьютерного программного продукта для обеспечения обработки в вычислительном окружении. Компьютерный программный продукт содержит информационный носитель, который может быть считан посредством устройства обработки данных, и который сохраняет подлежащие выполнению для осуществления способа команды. Способ включает в себя, например, получение команды на проверку наличия одного или нескольких ожидающих внешних прерываний, а также выполнение команды, которое выполнение включает в себя: выявление на основе предоставленной командой информации одного или нескольких подлежащих проверке подклассов внешних прерываний, проверку наличия одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, и указание на наличие или отсутствие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний.
Относящиеся к одному или нескольким аспектам способы и системы также описаны и заявлены в настоящем документе. Кроме того, относящиеся к одному или нескольким аспектам услуги также описаны и могут быть заявлены в настоящем документе.
Посредством методов настоящего изобретения осуществляются дополнительные признаки и преимущества. Другие варианты осуществления и аспекты подробно описаны в настоящем документе и считаются частью заявленного изобретения.
Краткое описание чертежей
Настоящее изобретение в дальнейшем описывается исключительно в качестве примера с отсылками на предпочтительные варианты осуществления, как показано на последующих чертежах:
Фиг. 1А изображает один пример вычислительного окружения согласно известному уровню техники, в котором может быть реализован предпочтительный вариант осуществления настоящего изобретения,
Фиг. 1Б изображает дополнительные подробности процессора на фиг. 1А, согласно аспекту настоящего изобретения,
Фиг. 2А изображает другой пример вычислительного окружения, согласно предпочтительному варианту осуществления настоящего изобретения,
Фиг. 2Б изображает более подробную информацию по памяти на фиг. 2А,
Фиг. 3 изображает один пример команды проверки на ожидающие внешние прерывания, согласно предпочтительному варианту осуществления настоящего изобретения, и
Фиг. 4 изображает один пример обработки, связанной с командой проверки на ожидающие внешние прерывания на фиг. 3, согласно предпочтительному варианту осуществления настоящего изобретения.
Подробное описание
Согласно одному или нескольким аспектам настоящего изобретения, обработка в вычислительном окружении облегчена путем предоставления возможности проверки на ожидающие внешние прерывания. При рассмотрении в настоящем документе, термин «внешнее прерывание» обозначает прерывание, которое происходит из пределов компьютерной системы, имеющей одни или несколько (например, сильно связанных) процессоров, но являющееся внешним по отношению к программе. Оно отличается от прерывания ввода/вывода, которое происходит из устройства ввода-вывода или канальной подсистемы.
Путем выявления наличия ожидающего внешнего прерывания, управляющая программа, такая как операционная система, является способной к принятию мер для обеспечения обработки в окружении, которые могут включать в себя выполнение задачи, или даже избегание или предупреждение появления задачи. Например, управляющая программа имеет потенциальную возможность ускорения разрешения конфликтов на уровне использования ресурсов или выхода из тупиковых сценариев путем предотвращения некоторых действий. Например, управляющая программа имеет возможность предотвращения выполнения услуги с длительным временем выполнения для задачи, временной промежуток которой истекает, или предотвращения получения блокировки, когда программа получает прерывание с заблаговременным предупреждением, указывающее на то, что логический процессор операционной системы приближается к моменту прекращения его диспетчеризации посредством программы гипервизора. Имеются также и другие подобные примеры.
Инструмент для проверки на ожидающие внешние прерывания включает в себя команду проверки на ожидающие внешние прерывания, которая проверяет на наличие ожидающих внешних прерываний на основании, например, одного или нескольких заданных программой подклассов, независимо от того, активирована ли целевая аппаратная платформа для этих классов прерываний, как дополнительно описано ниже.
Один вариант осуществления вычислительного окружения для охвата и использования одного или нескольких аспектов описан с отсылками на фиг. 1А. В одном примере вычислительное окружение основано на IBM® z/Архитектуре®. Один вариант осуществления Z/Архитектуры описан в публикации IBM® под названием «z/Архитектура, принципы работы» (z/Architecture, Principles of Operation), публикация IBM № SA22-7832-10, март 2015.
В другом примере вычислительное окружение основано на IBM Архитектуре Power®. Один вариант осуществления Архитектуры Power описан в публикации «Power® ISA Version 2.07B», International Business Machines Corporation, от 9 апреля 2015. IBM, Power, Power Architecture, PowerPC, System z, z/VM, and z/Architecture являются торговыми марками International Business Machines Corporation, зарегистрированными в нескольких юрисдикциях по всему миру.
Вычислительное окружение может также быть основано на другой архитектуре, в том числе, но не ограничиваясь, на архитектуре Intel x86. Имеются также и другие примеры.
Как показано на фиг. 1А, вычислительное окружение 100 включает в себя, например, компьютерную систему 102, показанную, например, в виде вычислительного устройства общего назначения. Компьютерная система 102 может включать в себя, но этим не ограничивается, один или несколько процессоров или вычислительных устройств 104 (например, центральных вычислительных устройств (CPU)), память 106 (называемую основной памятью или запоминающим устройством, в качестве примеров), и один или несколько интерфейсов 108 ввода/вывода, соединенных друг с другом через одну или несколько шин и/или других присоединений 110.
Шина 110 представляет собой один или более из числа любых нескольких типов структур шины, включая сюда шину памяти или контроллер памяти, периферийную шину, ускоренный графический порт, а также шину процессора или локальную шину, использующую любую из ряда шинных архитектур. В качестве примера, но не ограничения, такая архитектура включает в себя шину Промышленной стандартной архитектуры (ISA), шину Микроканальной архитектуры (MCA), шину Расширенной ISA архитектуры (EISA), локальную шину Ассоциации по стандартам в области видео-электроники (VESA) и шину Взаимодействия периферийных компонентов (PCI).
Память 106 может включать в себя, например, кеш 120, такой как совместно используемый кеш, который может быть соединен с локальными кешами 122 процессоров 104. Кроме того, память 106 может включать в себя одну или несколько программ или приложений 130, операционную систему 132, а также одну или несколько машиночитаемых программных команд 134. Машиночитаемые программные команды 134 могут быть сконфигурированы для выполнения функций вариантов осуществления аспектов изобретения.
Компьютерная система 102 также может быть сообщена через, например, интерфейсы 108 ввода/вывода с одним или несколькими внешними устройствами 140 ввода/вывода, одним или несколькими сетевыми интерфейсами 142 и/или одним или несколькими устройствами хранения данных 144. Типовые внешние устройства включают в себя пользовательское оконечное устройство, лентопротяжное устройство, позиционирующее устройство, дисплей и т.д. Сетевой интерфейс 142 обеспечивает компьютерной системе 102 сообщение с одной или несколькими сетями, такими как локальная сеть (LAN), общая глобальная сеть (WAN) и/или сеть общего пользования (например, Интернет), что предоставляет сообщение с другими вычислительными устройствами или системами.
Устройство 144 хранения данных имеет возможность сохранения одной или нескольких программ 146, одной или нескольких машиночитаемых программных команд 148 и/или данных и т.д. Машиночитаемые программные команды 134 могут быть сконфигурированы для выполнения функций вариантов осуществления аспектов изобретения.
Компьютерная система 102 может включать в себя другие съемные и несъемные, энергозависимые и энергонезависимые информационные носители компьютерной системы, и/или быть соединена с ними. Например, она может включать в себя и/или быть соединена с несъемным, энергонезависимым магнитным носителем (обычно называемым «жестким диском»), с магнитным дисководом для считывания со съемного, энергонезависимого магнитного диска (например, «гибкого диска») и для записи на него, и/или с оптическим дисководом для считывания со съемного, энергонезависимого оптического диска, такого как CDROM, DVD-ROM или другой оптический носитель, и для записи на него. Подразумевается, что в связи с компьютерной системой 102 могут быть использованы и другие аппаратные средства и/или компоненты программного обеспечения. Примеры, в том числе, но не ограничиваясь: микрокод, драйверы устройств, резервные вычислительные устройства, массивы внешних дисководов, системы RAID (массивы недорогих дисковых накопителей с избыточностью), устройства записи на ленту, системы архивного хранения данных и т.д.
Компьютерная система 102 может функционировать совместно с многочисленными другими вычислительными системами, окружениями или конфигурациями общего назначения или специального назначения. Примеры известных вычислительных систем, окружений и/или конфигураций, которые могут подойти для использования с компьютерной системой 102, включают в себя, но ими не ограничиваются, системы персонального компьютера (ПК), серверные компьютерные системы, тонкие клиенты, толстые клиенты, наладонные или переносные устройства, многопроцессорные системы, основанные на микропроцессорах системы, декодеры каналов кабельного телевидения, программируемую бытовую электронику, сетевые персональные компьютеры, миникомпьютерные системы, мэйнфреймовые компьютерные системы, а также распределенные облачные вычислительные окружения, включающие в себя любые из вышеупомянутых систем или устройств, и т.п.
Более подробная информация относительно одного примера процессора 104 описана с отсылками на фиг. 1Б. Процессор 104 включает в себя несколько функциональных компонентов, используемых для выполнения команд. Эти функциональные компоненты включают в себя, например, компонент 150 выборки команды для выборки подлежащих выполнению команд, устройство 152 декодирования команд для декодирования выбранных команд и для получения операндов декодированных команд, компонент 154 выполнения команд для выполнения декодированных команд, компонент 156 доступа к памяти для доступа, в случае необходимости, к памяти для выполнения команд, и компонент 160 перезаписи для предоставления результатов выполненных команд. Один или несколько из этих компонентов, согласно аспекту настоящего изобретения, могут быть использованы для выполнения команды 166 проверки на ожидающие внешние прерывания, как дополнительно описано ниже.
Процессор 104 также включает в себя, в одном варианте осуществления, один или несколько регистров 170 для использования посредством одного или нескольких из числа функциональных компонентов.
Другой вариант осуществления вычислительного окружения для охвата и использования одного или нескольких аспектов описан с отсылками на фиг. 2А. В этом примере вычислительное окружение 200 включает в себя, например, предназначенное для исходной среды центральное вычислительное устройство (CPU) 202, память 204, а также одно или несколько устройств ввода-вывода и/или интерфейсов 206, соединенных друг с другом, например, через одну или несколько шин 208 и/или других присоединений. Например, вычислительное окружение 200 может включать в себя процессор PowerPC® или сервер IBM pSeries, и/или другие машины, основанные на архитектуре, предлагаемой International Business Machines Corporation или другими компаниями.
Предназначенное для исходной среды центральное вычислительное устройство 202 включает в себя один или несколько предназначенных для исходной среды регистров 210, таких как один или несколько регистров общего назначения и/или один или несколько регистров особого назначения, используемых в процессе обработки в окружении. Эти регистры включают в себя информацию, представляющую состояние окружения на какой-либо конкретный момент времени.
Кроме того, предназначенное для исходной среды центральное вычислительное устройство 202 выполняет команды и код, которые сохраняются в памяти 204. В одном конкретном примере центральное вычислительное устройство выполняет код 212 эмулятора, сохраняемый в памяти 204. Этот код позволяет вычислительному окружению, сконфигурированному в одной архитектуре, эмулировать другую архитектуру. Например, код 212 эмулятора позволяет основанным на отличных от z/Архитектуры архитектурах машинам, таким как процессоры PowerPC, серверы pSeries или другие серверы или процессоры, эмулировать z/Архитектуру и выполнять программное обеспечение и команды, разработанные на основе z/Архитектуры.
Дополнительные, относящиеся к коду 212 эмулятора подробности приведены с отсылками на фиг. 2Б. Сохраняемые в памяти 204 гостевые команды 250 содержат команды программного обеспечения (например, коррелирующие с машинными командами), которые были разработаны для выполнения в архитектуре, отличной от таковой для предназначенного для исходной среды CPU 202. Например, гостевые команды 250 могут быть разработаны для выполнения на процессоре z/Архитектуры, но вместо этого, эмулируются на предназначенном для исходной среды CPU 202, которое может быть представлено, например, процессором Intel®. В одном примере, код 212 эмулятора включает в себя подпрограмму 252 выборки команд для получения одной или нескольких гостевых команд 250 из памяти 204 и, факультативно, для предоставления локальной буферизации для полученных команд. Он также включает в себя подпрограмму 254 трансляции команд для выявления типа полученной гостевой команды и для трансляции гостевой команды в одну или несколько соответствующих команд 256 исходной среды. Такая трансляция включает в себя, например, идентификацию функции, которая подлежит выполнению посредством гостевой команды, и выбор предназначенной для исходной среды команды (команд) для выполнения этой функции. Intel является торговой маркой или зарегистрированной торговой маркой Intel Corporation или ее филиалов в Соединенных Штатах и других странах.
Кроме того, код 212 эмулятора включает в себя подпрограмму 260 управления эмуляцией для принуждения команд исходной среды к выполнению. Подпрограмма 260 управления эмуляцией может принудить предназначенное для исходной среды CPU 202 к выполнению подпрограммы команд исходной среды, которые эмулируют одну или несколько ранее полученных гостевых команд и, в конце такого выполнения, возвращают управление подпрограмме выборки команд для эмуляции получения следующей гостевой команды или группы гостевых команд. Выполнение команд 256 исходной среды может включать в себя загрузку данных в регистр из памяти 204, сохранение данных обратно в память из регистра, или выполнение арифметической или логической операции некоторого типа, как задано подпрограммой трансляции.
Каждая подпрограмма, например, реализуется в программном обеспечении, сохраняемом в памяти и выполняемом посредством предназначенного для исходной среды центрального вычислительного устройства 202. В других примерах, одна или несколько из числа подпрограмм или операций, реализуются во встроенном программном обеспечении, аппаратных средствах, программном обеспечении или в некоторой комбинации из этих средств. Регистры эмулированного процессора могут быть эмулированы с помощью регистров 210 предназначенного для исходной среды CPU или при помощи местоположений в памяти 204. В вариантах осуществления гостевые команды 250, команды 256 исходной среды и код 212 эмулятора могут находиться в той же самой памяти или могут быть рассредоточены среди различных запоминающих устройств.
При рассмотрении в настоящем документе, встроенное программное обеспечение включает в себя, например, микрокод и/или милликод процессора. Оно включает в себя, например, команды аппаратного уровня и/или структуры данных, используемые в реализации высокоуровневого машинного кода. В одном варианте осуществления оно включает в себя, например, проприетарный код, обычно поставляемый как микрокод, который включает в себя выверенное программное обеспечение или микрокод, специфичный для используемого оборудования и управляющий доступом операционной системы к оборудованию системы.
Гостевая команда 250, которую получают, транслируют и выполняют, представлена, например, описанной в настоящем документе командой командой проверки на ожидающие внешние прерывания. Команду, которая имеет одну архитектуру (например, Z/Архитектуру), выбирают из памяти, транслируют и представляют в виде последовательности команд 256 исходной среды другой архитектуры (например, PowerPC, pSeries, Intel и т.д.). Такие команды исходной среды затем выполняют.
В одном варианте осуществления, команда проверки на ожидающие внешние прерывания проверяет на наличие ожидающих внешних прерываний на основании, например, одного или нескольких заданных программой подклассов, независимо от того, активирована ли целевая аппаратная платформа для этих классов прерываний и без сброса состояния ожидающего внешнего прерывания. Может быть много причин для проверки на ожидающие внешние прерывания. Например, управляющая программа (например, операционная система) может функционировать деактивированным для прерываний образом по ряду причин, включая сюда, например, администрирование очередями, такими как очереди прерываний, диспетчеризацию задач, и т.д. Кроме того, в различных случаях, управляющая программа может нуждаться в выявлении эффективности действия до совершения попытки его осуществления. Такие типовые действия включают в себя диспетчеризацию в виртуальном окружении, процесс, удерживающий критическую блокировку системы, когда гипервизор, который администрирует виртуальными машинами окружения, приближается к моменту прекращения диспетчеризации логического CPU (потенциальная возможность таймаута блокировки), диспетчеризацию процесса при наличии высокоприоритетных ожидающих прерываний, которые имеют возможность вмешательства в процесс (например, сигнализация о сбое, аварийный сигнал), и т.д. Таким образом, согласно аспекту настоящего изобретения, предоставлен механизм проверки на незаконченные внешние прерывания. Это механизм включает в себя, например, команду проверки на ожидающие внешние прерывания. В одном варианте осуществления, команда проверки на ожидающие внешние прерывания является отдельной архитектурно выполненной машинной командой на аппаратном/программном интерфейсе.
Один пример команды проверки на ожидающие внешние прерывания описан с отсылками на фиг. 3. В одном примере, команда 300 проверки на ожидающие внешние прерывания (TPEI) включает в себя поле 302 операционного кода (кода операции) (OPCODE), имеющее код операции для обозначения операции проверки на ожидающие внешние прерывания, поле (R1) 304 первого регистра, и поле (R2) 306 второго регистра. В одном варианте осуществления, поля команды являются отдельными и независимыми друг от друга. Однако в другом варианте осуществления, поля в числе более одного могут быть объединены друг с другом. Кроме того, связанный с полем команды нижний индекс обозначает операнд, к которому применяют поле. Например, любое поле, имеющее нижний индекс 1, связано с первым операндом, любое поле, имеющее нижний индекс 2, связано со вторым операндом и т.д.
В одном примере, заданный в R2 306 регистр включает в себя маску 310, представляющую один или несколько подклассов внешних прерываний, которые могут быть выбраны для проверки на ожидающие внешние прерывания. В одном варианте осуществления эти внешние прерывания происходят из пределов компьютерной системы, имеющей один или несколько (например, сильносвязанных) процессоров, но являются внешними для программы, и не исходят от устройств ввода-вывода или канальной подсистемы. Типовые подклассы, которые могут быть выбраны для проверки, и связанные с ними типовые позиции битов в пределах маски показаны ниже. В одном варианте осуществления, другие биты в общем регистре R2 зарезервированы и должны содержать ноли, в противном случае, программа может не иметь совместимости в будущем.
Бит Подкласс внешнего прерывания
30 Прерывание с заблаговременным предупреждением (используемое, например, для предупреждения программы (например, операционной системы) или процессора о наличии периода отсрочки, в течение которого может быть выполнена функция (например, очистки и т.д.)).
48 Сигнализация о сбое (используемая, например, для предупреждения программы или процессора о том, что другое CPU в конфигурации испытало сбой (например, вошло в режим контрольного останова или потеряло питание)),
49 Аварийный сигнал (используемый, например, для высокоприоритетного межпроцессорного обмена сигналами в пределах компьютерной системы),
50 Внешний вызов (используемый, например, для межпроцессорного обмена сигналами в пределах компьютерной системы).
Могут быть предоставлены также многие другие подклассы. В другом варианте осуществления, для проверки могут быть выбраны один или несколько из следующих подклассов:
Бит Подкласс
52 Компаратор генератора импульсов (используемый, например, для указания на превышение действующими часами времени суток предварительно заданного компаранда),
53 Таймер CPU, используемый, например, для указания на истечение предварительно заданного периода процессорного времени),
54 Служебный сигнал (используемый, например, для сообщения с логическим служебным процессором),
57 Ключ прерывания (используемый, например, для указания на ручное вмешательство оператора), 58 Сигнализация об измерениях (используемая, например, для указания на различные изменения в измерительном средстве CPU),
59 Сигнализация о согласовании по времени (используемая, например, для указания на различные сигналы от внешних привязок по времени).
Имеются также и другие возможности.
В одном варианте осуществления, для этой команды, прерывание считают ожидающим для подкласса независимо от того, активирован ли подкласс в выбранном регистре управления, таком как элемент 0 управления, и независимо от настройки выбранного бита в другом регистре управления, таком как слово состояния программы (PSW), как далее описано в настоящем документе. В одном примере, управляющий регистр 0 используют для предоставления управляющей информации в CPU. Он включает в себя указатели для каждого из упомянутых выше подклассов. В одном примере, упомянутые выше номера битов представлены теми же номерами битов в управляющем регистре для соответствующих подклассов. Когда биту в управляющем регистре 0 задают значение, например единица, активируется соответствующий подкласс. Кроме того, например, слово состояния программы является управляющим регистром, выполняющим функции регистра состояния и счетчика программы. Оно содержит информацию, используемую для надлежащего выполнения программы, в том числе, но не ограничиваясь, условный код, адрес команды и другую информацию. Выбранный бит, например, бит 7 в составе PSW обозначает внешнюю маску и управляет активацией CPU для прерываний посредством включаемых во внешний класс условий, таких как упомянутые выше условия, в качестве примеров.
Как указано выше, в дополнение к полю R2, команда проверки на ожидающие внешние прерывания также включает в себя поле 304 R1, которое обозначает общий регистр, имеющий маску 320 подклассов ожидающих прерываний, то есть маску, указывающую на то, являются ли для выбранных подклассов внешние прерывания ожидающими.
В одном примере функционирования команды проверки на ожидающие внешние прерывания, когда внешнее прерывание является ожидающим для обозначенного подкласса, соответствующему биту в общем регистре R1 задают значение, например единица, в противном случае, соответствующему биту в общем регистре R1 задают значение, например ноль. Другим позициям битов в общем регистре R1 задают, например, нулевые значения.
Когда итоговая позиция бита в общем регистре R1 содержит, например, единицу, команда завершается путем задания условного кода 1, в качестве примера, в противном случае, команда завершается путем задания условного кода 0, в качестве примера. Прежде всего, в зависимости от выполнения, может быть представлен один из следующих итоговых условных кодов: 0 — ни один из проверенных подклассов внешних прерываний не является ожидающим, или никакие подклассы не были проверены, или 1 — один или несколько из проверенных подклассов внешних прерываний являются ожидающими.
Кроме того, могут произойти следующие программные исключения: операция (средство проверки на ожидающие внешние прерывания не инсталлировано), привилегированная операция, и/или ограничение транзакции (выполняющаяся транзакция является ограниченной).
В одном варианте осуществления, команда проверки на ожидающие внешние прерывания не учитывает активацию подкласса. Кроме того, в одном варианте осуществления для Z/Архитектуры, заданные позиции битов в общих регистрах R1 и R2 соответствуют позициям битов соответствующих управляющих элементов по активации подкласса внешних прерываний, например, в управляющем регистре 0.
В другом аспекте, команда проверки на ожидающие внешние прерывания может быть использована с выполнением в режиме интерпретации, например, в виртуальных окружениях. В одном варианте осуществления, аппаратное оборудование/встроенное программное обеспечение гипервизора или хоста (например, z/VM®) и процессора (например, System z®) взаимодействуют друг с другом управляемым совместным способом с целью обработки операций гостевой операционной системы без необходимости в передаче управления между гостевой операционной системой и хостом. Гостевые операции могут быть выполнены непосредственно, без вмешательства хоста, с помощью средства, позволяющего командам выполняться в режиме интерпретации для гостя с режимом записи в память со страничной организацией. Это средство предоставляет команду запуска выполнения в режиме интерпретации (Start Interpretive Execution) (SIE), которую хост может выдавать путем назначения блока управления, называемого описанием состояния, который содержит состояние и управляющие воздействия гостя (виртуальной машины), такие как, например, указатели архитектурного режима гостя, архитектурные признаки гостя, гостевые регистры, управляющие элементы выполнения и т.д. Команда SIE переводит машину в режим интерпретационного выполнения, в котором гостевые команды и прерывания обрабатываются непосредственно до тех пор, пока не возникает состояние, требующее вмешательства хоста. Когда такое состояние возникает, выполнение в режиме интерпретации заканчивается и, либо реализуется прерывание хоста, либо команда SIE завершает сохранение деталей возникшего состояния, это последнее действие называют перехватом. Команда проверки на ожидающие внешние прерывания может быть также использована и в описанном выше окружении.
Например, команда проверки на ожидающие внешние прерывания может быть использована для проверки на прерывания с заблаговременным предупреждением, которые являются доступными, в одном варианте осуществления, в гостевых конфигурациях, но не в негостевых конфигурациях. Поскольку, в одном варианте осуществления, средство с заблаговременным предупреждением является недоступным в негостевых конфигурациях, биту 30 общего регистра R1 не задают значение, например единица, для конфигурации, функционирующей на уровне 0 хоста (например, гипервизора). Имеются также и другие примеры.
В одном примере, выполнение в режиме интерпретации команды проверки на ожидающие внешние прерывания задает управляющий элемент выполнения в описании состояния. В одном варианте осуществления, выбранный бит, например, бит 3 поля управляющего элемента D (ECD) выполнения описания состояния управляет возможностью выполнения TPEI в режиме интерпретации.
Когда предпринимают попытку гостевого выполнения TPEI, но ECD.3 не задано значение, например единица, гостевое выполнение оказывается подавленным, и распознается состояние перехвата команды (например, код 4).
Кроме того, в зависимости от выполнения команды TPEI, может быть исследовано поле запроса на вмешательство (V) описания состояния. Например, биты заблаговременного предупреждения (T) и внешнего вызова (X) (то есть, биты 2 и 4, соответственно) поля V могут быть исследованы в зависимости от заданных в маске 310 битов, соответствующих данным подклассам (например, битов 30 и 50).
Кроме того, в описании состояния задают новое расширенное поле (VX) запроса на вмешательство. Биты 0 и 1 поля VX представляют собой специфичные для потока указатели на наличие ожидающих прерываний по гостевому аварийному сигналу и прерываний по гостевой сигнализации о сбое, соответственно. Значения этим битам задает и сбрасывает хост-программа, а их исследование производят в зависимости от выполнения в режиме интерпретации TPEI. Например, биты 0 и 1 поля VX исследуют в зависимости, например, от битов 49 и 48, заданных в маске 310.
Другие примеры также являются возможными.
Более подробная информация относительно аспектов команды проверки на ожидающие внешние прерывания описана с отсылками на фиг. 4. В одном примере, получают команду на проверку наличия ожидающих внешних прерываний, например команду проверки на ожидающие внешние прерывания, ЭТАП 400. Эта команда, например, является отдельной архитектурно выполненной командой. Затем команду выполняют посредством процессора, ЭТАП 402.
Выполнение включает в себя, например, выявление на основе предоставленной командой информации одного или нескольких подлежащих проверке подклассов внешних прерываний, ЭТАП 404. Например, включенная в состав обозначенного как R2 регистра команды маска включает в себя несколько индикаторов (например, несколько битов). Один или несколько индикаторов соответствуют одному или нескольким подклассам внешних прерываний, которые могут быть выбраны для проверки на ожидающие внешние прерывания. Например, один индикатор (например, бит 30) соответствует прерываниям с заблаговременным предупреждением, один индикатор (например, бит 48) соответствует сигнализации о сбое, один индикатор (например, бит 49) соответствует аварийному сигналу, и еще один индикатор (например, бит 50) соответствует внешнему вызову. Когда индикатору задано конкретное значение, например единица, соответствующий заданному индикатору подкласс подлежит проверке на ожидающие внешние прерывания. Например, когда биту 49 задано значение единица, выполняют проверку на ожидающие внешние прерывания для аварийных сигналов. Могут быть заданы один или несколько индикаторов.
Для каждого заданного индикатора осуществляют проверку относительно того, являются ли ожидающими внешние прерывания для подкласса, соответствующего заданному индикатору, ЭТАП 406. Например, когда задано значение биту 49, осуществляют проверку относительно того, являются ли ожидающими внешние прерывания для аварийных сигналов, ЭТАП 406. В одном примере, для этой проверки, в том случае, когда не является применимым какое-либо выполнение в режиме интерпретации, CPU отслеживает наличие ожидающих внешних прерываний, и CPU проверяет свои регистры-защёлки для ожидающих прерываний для выявления того, является ли прерывание ожидающим.
В том случае, когда выполнение в режиме интерпретации является применимым, аппаратные прерывания предоставляют хосту, и хост выявляет, направлены ли они гостю. Если они направлены гостю, хост задает значения битам ожидающего прерывания в описании состояния гостя. Если гость активирован для класса прерываний, когда он диспетчеризирован, прерывания предоставляют гостю, в противном случае, прерывание остается ожидающим. Когда гостевая программа выполняет команду TPEI, CPU (например, милликод) исследует ожидающие биты в описании состояния гостя с целью формулировки ответа.
Когда внешнее прерывание является ожидающим для проверяемого подкласса, предоставляют указатель как таковой, ЭТАП 408. Например, задают значение (например, единица) индикатору (например, биту) в маске, предоставляемой в заданном в R1 регистре, который соответствует проверяемому подклассу. Ту же обработку производят для каждого проверяемого подкласса, имеющего ожидающие внешние прерывания.
Кроме того, например, предоставляют, например в условном коде, итоговый указатель, который указывает на наличие любых ожидающих проверяемых подклассов прерываний. Например, когда ни один из проверяемых подклассов прерываний не является ожидающим, условному коду задают значение 0, когда какой-либо из проверяемых подклассов прерываний является ожидающим, условному коду задают значение 1.
В настоящем документе подробно описана команда проверки на ожидающие внешние прерывания (TPEI), которая выявляет наличие одного или нескольких выбранных внешних ожидающих прерываний для выполняющего команду CPU. В одном варианте осуществления, TPEI выявляет наличие одного или нескольких ожидающих внешних прерываний на основании одного или нескольких конкретных подклассов, причем команда осуществляет это без очистки одного или нескольких ожидающих внешних прерываний. Путем проверки на ожидающие внешние прерывания могут быть предприняты действия, включая сюда недействия, для обеспечения обработки в вычислительном окружении и повышения ее производительности. Управляющая программа является способной к выявлению наличия ожидающего прерывания для конкретного ресурса в то время, когда она остается деактивированной для этого класса прерываний. Один или несколько аспектов настоящего изобретения неразрывно связаны с компьютерной технологией и облегчают обработку в пределах компьютера, повышая его производительность.
Настоящее изобретение может быть представлено системой, способом и/или компьютерным программным продуктом на любом возможном уровне интеграции в плане технической детализации. Компьютерный программный продукт может включать в себя машиночитаемый информационный носитель (или носители), имеющий на нем машиночитаемые программные команды для принуждения процессора к выполнению аспектов настоящего изобретения.
Машиночитаемый информационный носитель может быть представлен материальным устройством, которое способно удерживать и сохранять команды для использования посредством устройства выполнения команд. Машиночитаемый информационный носитель может быть представлен, например, в том числе, но не ограничиваясь, устройством электронной памяти, магнитным запоминающим устройством, оптическим запоминающим устройством, электромагнитным запоминающим устройством, полупроводниковым запоминающим устройством или любой подходящей комбинацией из вышеупомянутого. Неисчерпывающий список более конкретных примеров машиночитаемых информационных носителей включает в себя следующее: портативная компьютерная дискета, жесткий диск, оперативная память (RAM), постоянная память (ROM), стираемая программируемая постоянная память (EPROM или флэш-память), статическая оперативная память (SRAM), переносной компакт-диск для однократной записи данных (CD-ROM), цифровой универсальный диск (DVD), карта памяти, гибкий диск, механически закодированное устройство, такое как перфокарты или выступающие структуры в канавке с записанными на них командами, а также любая подходящая комбинация из вышеупомянутого. Машиночитаемый информационный носитель, как он рассматривается в настоящем документе, не подлежит истолкованию в качестве представленного преходящими сигналами как таковыми, такими как радиоволны или другие свободно распространяющиеся электромагнитные волны, электромагнитные волны, распространяющиеся через волновод или другие среды передачи (например, проходящие через волоконно-оптический кабель световые импульсы), или передаваемые через провода электрические сигналы.
Описанные в настоящем документе машиночитаемые программные команды могут быть загружены в соответствующие вычислительные/обрабатывающие устройства с машиночитаемого информационного носителя или во внешний компьютер или во внешнее устройство хранения через сеть, например Интернет, локальную сеть, глобальную сеть и/или беспроводную сеть. Сеть может содержать медные кабели передачи, волокна оптической передачи, беспроводную передачу, маршрутизаторы, брандмауэры, переключения, шлюзы и/или граничные серверы. Карта сетевого адаптера или сетевой интерфейс в каждом вычислительном/обрабатывающем устройстве получает машиночитаемые программные команды из сети, и направляет машиночитаемые программные команды для сохранения в машиночитаемый информационный носитель в пределах соответствующего вычислительного/обрабатывающего устройства.
Машиночитаемые программные команды для выполнения операций настоящего изобретения могут быть представлены командами ассемблера, командами архитектуры системы команд (ISA), машинными командами, машинно-зависимыми командами, микрокодом, командами встроенного программного обеспечения, присваивающими значение состоянию данными, конфигурационными данными для интегральной схемотехники, или иным исходным кодом или объектным кодом, записанным на любой комбинации из одного или нескольких языков программирования, включая сюда объектно-ориентированные языки программирования, такие как Smalltalk, C++ и т.п., а также языки процедурного программирования, такие как язык программирования «C» или подобные языки программирования. Машиночитаемые программные команды могут выполняться полностью на компьютере пользователя, частично на компьютере пользователя, как автономный пакет программного обеспечения, частично на компьютере пользователя, и частично на удаленном компьютере или полностью на удаленном компьютере или сервере. В последнем сценарии удаленный компьютер может быть присоединен к компьютеру пользователя через любой тип сети, включая сюда локальную сеть (LAN) или глобальную сеть (WAN), или присоединение может быть сделано к внешнему компьютеру (например, через Интернет с использованием Интернет-провайдера). В некоторых вариантах осуществления, электронные схемы, включающие в себя, например, программируемые логические схемы, программируемые на месте вентильные матрицы (FPGA) или программируемые логические матрицы (PLA) могут выполнять машиночитаемые программные команды посредством использования информации о состоянии машиночитаемых программных команд для настройки электронной схемы с целью выполнения аспектов настоящего изобретения.
Аспекты настоящего изобретения описаны в настоящем документе с отсылками на иллюстрации в виде блок-схем и/или блок-диаграмм для способов, устройств (систем) и компьютерных программных продуктов согласно вариантам осуществления изобретения. Подразумевается, что каждый блок иллюстраций в виде блок-схем и/или блок-диаграмм, а также комбинации блоков на иллюстрациях в виде блок-схем и/или блок-диаграмм, могут быть реализованы посредством машиночитаемых программных команд.
Такие машиночитаемые программные команды могут быть предоставлены процессору универсального компьютера, специализированного компьютера или другого программируемого устройства обработки данных для образования машины таким образом, что выполняющиеся посредством процессора компьютера или другого программируемого устройства обработки данных команды создают средства для реализации функций/действий, заданных в блоке или блоках блок-схемы и/или блок-диаграммы. Такие машиночитаемые программные команды также могут быть сохранены в машиночитаемом информационном носителе, который может управлять компьютером, программируемым устройством обработки данных и/или другими устройствами для их функционирования особым способом таким образом, что сохраняющий на нем команды машиночитаемый информационный носитель представляет собой изделие, содержащее команды, которые реализуют аспекты функций/действий, заданных в блоке или блоках блок-схемы и/или блок-диаграммы.
Машиночитаемые программные команды могут также быть загружены в компьютер, другое программируемое устройство обработки данных или другое устройство для принуждения к выполнению на компьютере, другом программируемом устройстве или другом устройстве серии эксплуатационных этапов для получения такого компьютерно-реализованного процесса, что выполняемые на компьютере, другом программируемом устройстве или другом устройстве инструкции реализуют функции/действия, заданные в блоке или блоках блок-схемы и/или блок-диаграммы.
Блок-схемы и блок-диаграммы на чертежах показывают архитектуру, функциональность и функционирование возможных реализаций систем, способов и компьютерных программных продуктов согласно различным вариантам осуществления настоящего изобретения. В этом отношении каждый блок в блок-схемах или блок-диаграммах может представлять модуль, сегмент или участок команд, который содержит одну или несколько исполнимых команд для реализации указанной логической функции (функций). В некоторых альтернативных реализациях указанные в блоках функции могут осуществляться в порядке, отличном от приведенного на чертежах. Например, два блока, показанные по очереди, могут, фактически, быть выполнены по существу одновременно, или блоки могут иногда выполняться в обратном порядке, в зависимости от предусмотренной к выполнению функциональности. Необходимо также отметить, что каждый блок на иллюстрациях в виде блок-схем и/или блок-диаграмм, а также в комбинациях блоков на иллюстрациях в виде блок-схем и/или блок-диаграмм, может быть реализован посредством основанных на аппаратных средствах систем особого назначения, которые выполняют указанные функции или действия или выполняют комбинации аппаратных и компьютерных команд особого назначения.
В дополнение к вышеупомянутому, один или несколько аспектов могут быть предоставлены, предложены, развернуты, управляемы, обслуживаемы и т.д. поставщиком услуг, предлагающим управление окружениями заказчика. Например, поставщик услуг может создавать, обслуживать, поддерживать и т.д. машинный код и/или компьютерную инфраструктуру, выполняющую один или несколько аспектов для одного или нескольких клиентов. В свою очередь, поставщик услуг может получать оплату от клиента в рамках соглашения о подписке и/или о сборах, в качестве примеров. Дополнительно или альтернативно, поставщик услуг может получать оплату от продажи рекламного содержимого одному или нескольким третьим лицам.
В одном аспекте приложение может быть развернуто для выполнения одного или нескольких предпочтительных вариантов осуществления. В качестве примера, развертывание приложения предусматривает обеспечение компьютерной инфраструктуры, действующей для выполнения одного или нескольких вариантов осуществления.
В качестве другого аспекта, может быть развернута вычислительная инфраструктура, содержащая в вычислительной системе интегрирующий машиночитаемый код, в которой код, в сочетании с вычислительной системой, способен к выполнению одного или нескольких вариантов осуществления.
В качестве еще одного аспекта, может быть предоставлен способ интеграции содержащей интегрирующий машиночитаемый код вычислительной инфраструктуры в компьютерную систему. Компьютерная система содержит машиночитаемый носитель, который компьютерный носитель содержит один или несколько вариантов осуществления. Код в сочетании с компьютерной системой способен к выполнению одного или нескольких вариантов осуществления.
Хотя различные варианты осуществления описаны выше, они являются только примерами. Например, вычислительные окружения другой архитектуры могут быть использованы для охвата и использования одного или нескольких вариантов осуществления. Кроме того, могут быть использованы различные команды, форматы команд, поля команд и/или значения команд. Являются возможными разнообразные изменения.
Кроме того, могут быть использованы и оказаться выгодными другие типы вычислительных окружений. В качестве примера, является применимой подходящая для сохранения и/или выполнения программного кода система обработки данных, которая включает в себя по меньшей мере два процессора, соединенных прямо или косвенно через системную шину с элементами памяти. Элементы памяти включают в себя, например, локальную память, используемую в процессе фактического выполнения программного кода, запоминающее устройство большого объема и кеш-память, которая предоставляет временное сохранение по меньшей мере части программного кода с целью уменьшения числа выборок из запоминающего устройства большого объема в процессе выполнения.
Устройства ввода-вывода или устройства I/O (в том числе, но не ограничиваясь, клавиатуры, дисплеи, позиционирующие устройства, DASD (запоминающее устройство прямого доступа), устройство записи на ленту, CD, DVD, карты флэш-памяти и другие носители памяти и т.д.) могут быть соединены с системой или непосредственно или через переходные контроллеры ввода/вывода. С системой также могут быть соединены сетевые адаптеры для предоставления системе обработки данных возможности установления соединения с другими системами обработки данных или с удаленными принтерами или с запоминающими устройствами посредством переходных частных сетей или сетей общего пользования. Модемы, кабельные модемы и платы Ethernet являются всего несколькими примерами из числа доступных типов сетевых адаптеров.
Используемая в настоящем документе терминология служит исключительно целям описания конкретных вариантов осуществления и не предназначается для ограничения изобретения. При использовании в настоящем документе, формы единственного числа предназначены для включения в себя также и форм множественного числа, если только контекст не указывает на иное недвусмысленным образом. Кроме того, подразумевается, что термины «содержит» и/или «содержащий» при их использовании в данном техническом описании задают присутствие заявленных признаков, целочисленных переменных, этапов, операций, элементов и/или компонентов, но не исключают присутствия или добавления одного или нескольких других признаков, целочисленных переменных, этапов, операций, элементов, компонентов и/или образованных ими групп.
Соответствующие структуры, материалы, действия и эквиваленты всех средств или этапов, равно как функциональные элементы в пунктах формулы изобретения ниже, если вообще есть в наличии, предназначаются для включения в себя любой структуры, материала или действия для выполнения функции в сочетании с другими требуемыми элементами, как конкретным образом заявлено. Описание одного или нескольких вариантов осуществления представлено в целях иллюстрации и описания, но не предназначается для полного охвата или ограничения изобретения в заявленном виде. Многие модификации и изменения являются очевидными для средних специалистов в области техники. Вариант осуществления был выбран и описан с целью наилучшего объяснения различных аспектов и практического применения, а также для обеспечения другим средним специалистам в области техники возможности понимания различных вариантов осуществления с различными модификациями, как они подходят для конкретно рассматриваемого использования.
1. Компьютерно-реализуемый способ обеспечения обработки в вычислительном окружении, включающий:
— получение команды на проверку наличия одного или нескольких ожидающих внешних прерываний, причем внешним прерыванием является прерывание, происходящее из пределов компьютерной системы, являющееся внешним по отношению к программе и отличное от прерывания ввода/вывода, происходящего из устройства ввода-вывода, и
— выполнение команды, включающее:
— выявление, на основе предоставленной командой информации, одного или нескольких подлежащих проверке подклассов внешних прерываний,
— проверку наличия одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем проверку выполняют, когда управляющая программа вычислительного окружения деактивирована для одного или нескольких подклассов внешних прерываний, и
— указание на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем внешнее прерывание считают ожидающим для подкласса внешнего прерывания независимо от того, активирован ли этот подкласс внешнего прерывания.
2. Способ по п. 1, причем выявление включает исследование маски, предоставленной в обозначенном командой местоположении, для выявления одного или нескольких подлежащих проверке подклассов внешних прерываний, причем маска включает в себя несколько индикаторов для нескольких подклассов внешних прерываний, а индикатор из числа нескольких индикаторов, которому задано конкретное значение, указывает на необходимость проверки соответствующего индикатору подкласса внешних прерываний.
3. Способ по п. 2, причем местоположение содержит обозначаемый полем команды регистр.
4. Способ по одному из предшествующих пунктов, причем указание содержит для имеющего ожидающее внешнее прерывание подкласса внешних прерываний задание индикатора в заданном командой местоположении.
5. Способ по п. 4, причем местоположение является заданным полем команды регистром.
6. Способ по п. 5, причем индикатор является битом в маске в заданном командой регистре.
7. Способ по одному из предшествующих пунктов, причем выполнение команды производят независимо от того, активирован ли для прерываний выполняющий команду процессор.
8. Способ по одному из предшествующих пунктов, причем выполнение, кроме того, включает в себя предоставление итогового указателя, указывающего на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний.
9. Способ по одному из предшествующих пунктов, причем команда является отдельной архитектурно выполненной командой, содержащей операционный код, задающий команду проверки на ожидающие внешние прерывания, поле первого регистра, которое подлежит использованию при указании, и поле второго регистра, которое подлежит использованию при выявлении.
10. Компьютерная система для обеспечения обработки в вычислительном окружении, содержащая память и взаимодействующий с памятью процессор и выполненная для осуществления способа, включающего:
— получение команды на проверку наличия одного или нескольких ожидающих внешних прерываний, причем внешним прерыванием является прерывание, происходящее из пределов компьютерной системы, являющееся внешним по отношению к программе и отличное от прерывания ввода/вывода, происходящего из устройства ввода-вывода, и
— выполнение команды, включающее:
— выявление, на основе предоставленной командой информации, одного или нескольких подлежащих проверке подклассов внешних прерываний,
— проверку наличия одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем проверку выполняют, когда управляющая программа вычислительного окружения деактивирована для одного или нескольких подклассов внешних прерываний, и
— указание на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний, причем внешнее прерывание считают ожидающим для подкласса внешнего прерывания независимо от того, активирован ли этот подкласс внешнего прерывания.
11. Компьютерная система по п. 10, причем выявление содержит исследование маски, предоставленной в обозначенном командой местоположении, для выявления одного или нескольких подклассов внешних прерываний, которые подлежат проверке, причем маска включает в себя несколько индикаторов для нескольких подклассов внешних прерываний, и причем индикатор из числа нескольких индикаторов, которому задано конкретное значение, указывает на необходимость проверки соответствующего индикатору подкласса внешних прерываний.
12. Компьютерная система по п. 10 или 11, причем выполнение команды производят независимо от того, активирован ли для прерываний выполняющий команду процессор.
13. Компьютерная система по одному из пп. 10-12, причем выполнение, кроме того, включает в себя предоставление итогового указателя, указывающего на наличие одного или нескольких ожидающих внешних прерываний для одного или нескольких проверяемых подклассов внешних прерываний.
14. Машиночитаемый информационный носитель, который выполнен с возможностью считывания посредством устройства обработки данных и который сохраняет подлежащие выполнению посредством устройства обработки данных команды для осуществления способа по одному из пп. 1-9.
Ввод-вывод
- Подробности
- Родительская категория: Ввод-вывод
- Категория: Прерывания
При возникновении события, на которое надо отреагировать (запроса на прерывание), обычно процессор автоматически (без участия программиста) выполняет следующие действия:
1. Заканчивается выполнение текущей команды (иногда прерывается, если команда длинная, а иногда выполняется еще одна или несколько команд).
2. Анализируется, разрешено ли прерывание. Если нет, то осуществляется переход к выполнению следующей команды.
3. Если запросов несколько, принимается решение, какой запрос обслуживать (разрешение приоритета, priority resolving). Если система запросов радиальная или источник запроса — внутреннее событие процессора (exception), то переход к .п.6.
4. При магистральной схеме запросов:
Процессор передает источникам запросов подтверждение приема запроса (этот сигнал должен достигнуть только того источника запроса, который имеет наивысший приоритет).
5. Источник запроса передает процессору идентифицирующую его информацию (каждый источник запроса может иметь собственную программу обработки, и процессор должен узнать, какой обработчик использовать).
6. Процессор сохраняет информацию о текущем контексте (текущий вектор состояния — почти всегда неполностью).
7. Адрес перехода на программу обработки прерывания хранится в определенной для каждого источника запроса прерывания области памяти, называемой вектором прерывания. Процессор загружает начальный адрес программы обработки прерывания из вектора прерывания в счетчика команд.
8. Для возврата из прерывания в системе команд обычно есть специальная команда «возврат из прерывания» (мнемоника iret, retiили rti). По этой команде восстанавливается контекст прерванной программы в том объеме, в котором он быь сохранен при входе в перывание (п.6). Эта команда должна быть последней исполняемой командой обработчика.
Приведенное описание соответствует обработке внешнего аппаратного прерывания. В случае, если причина прерывания — внутреннее событие процессора (исключительная ситуация — exception), то этапы 4 и 5 отсутствуют, как в случае радиальных прерываний.
Опишем перечисленные этапы более детально.
1. Внешний запрос прерывания приходит асинхронно (без какой-либо привязки во времени) по отношению к выполняемому потоку команд. Произвести переход на обработчик в большинстве процессоров можно только в промежутке между выполнением соседних команд, поэтому обычно выполнение текущей команды заканчивается.
В некоторых процессорах, если время выполнения текущей команды велико, ее выполнение прерывается, а после выхода из прерывания команда начинает выполняться сначала (это, например, типично для команд плавающей точки в процессорах, где они реализованы микропрограммно). В процессорах х86 прерываются команды строковых операций, но после выхода из прерывания они не начинаются сначала, а продолжают работу с того места, где были прерваны. Некоторые комбинации команд используются совместно, и прерывание между ними может привести к фатальным результатам. Такова в х86 пара команд, переустанавливающих положение стека: для этого надо поменять содержимое регистра сегмента стека и затем содержимое указателя стека. Поскольку в х86 для сохранения контекста используется стек, то прерывание между указанными двумя командами вызовет сохранение контекста (якобы в стеке) в неверном месте памяти. Для исключения такой ситуации команда загрузки в регистр сегмента стека автоматически запрещает прерывание до окончания следующей команды.
2. В некоторых ситуациях прерывание недопустимо (например, при выполнении участков программы, критичных ко времени выполнения), поэтому во всех процессорах имеется возможность запретить прерывания (по крайней мере, некоторые). Возникшие в этот период запросы могут быть потеряны, либо могут ждать обслуживания, которое произойдет, когда прерывания будут разрешены. Это зависит от устройства конкретного процессора и от свойств входов запроса прерываний. В некоторых процессорах можно программно управлять свойствами входа: запоминается или теряется запрос, который приходит в период, когда прерывания процессору запрещены. В системе команд обычно есть команды, запрещающие и разрешающие прерывание. Кроме того, внешние устройства-источники запросов нередко позволяют программно разрешить/запретить прерывание от данного устройства (прерывания от других устройств при этом будут обрабатываться).
3. При нескольких источниках запроса возможна ситуация, когда в процессор поступают одновременно несколько запросов. Это вовсе не значит, что запросы одновременно возникают, это крайне маловероятно. Однако нередка ситуация, когда в течение некоторого времени прерывание запрещено и в этот период (не одновременно) возникает несколько запросов. Когда выполнится команда «разрешить прерывание», запросы поступают в процессор равноправно. Надо каким-нибудь способом определить порядок, в котором запросы будут обрабатываться (их приоритеты). Используется несколько способов:
•а) приоритеты фиксированы и не могут быть изменены;
•б) приоритеты определяются электрической схемой, и для их изменения надо произвести переключения в схеме;
•в) приоритеты изменяются циклически: последнему обслуженному устройству присваивается самый низкий приоритет;
•г) приоритеты могут быть программно заданы в произвольной комбинации;
•… и множество других и вариантов…
4. Далее происходит обмен сигналами между источником запроса и процессором. Сначала процессор посылает сигнал подтверждения приема запроса. В частном случае сигнал подтверждения распространяется только до устройства, наиболее близкого к процессору из всех, выставивших запрос прерывания.
5. Используется несколько способов идентификации источника прерывания. В случае магистральной архитектуры устройство обычно передает процессору по магистрали информацию о себе. Эта информация обычно содержит условный код (номер) источника запроса, по которому процессор способен определить адрес памяти, содержащий информацию о местонахождении в памяти обработчика. В качестве условного кода может использоваться адрес вектора прерывания, стартовый адрес обработчика или даже полный код команды call перехода на обработчик (так было сделано в процессоре i8080).
Термин “вектор прерывания” используют в двух разных значениях:
•а) контекст (вектор состояния) обработчика, автоматически загружаемый при выполнении прерывания,
•б) участок памяти, где хранится этот контекст. Обычно для хранения контекстов обработчиков разработчики процессора выделяют в адресном пространстве специальную область векторов прерывания.
Для некоторых из прерываний разработчики процессора могут предопределить положение векторов и значения адресов перехода, в то время как другие программист может задавать по своему усмотрению программно.
6. Сохранение текущего контекста процессор чаще всего делает в стеке. В простейшем случае сохраняется содержимое счетчика команд и содержимое регистра состояния. Во многих процессорах в регистре состояния отдельные биты имеют отношение к управлению прерываниями и автоматическое сохранение слова состояния предоставляет ряд дополнительных возможностей, а иногда является просто необходимым (см. например далее «пошаговую отладку» для процессоров х86).
7. Загрузка контекста обработчика (вектора прерывания). Результат этого действия — переход на первую команду обработчика. Используются различные способы указания того, в каком адресе памяти расположена эта первая команда. Чаще всего адрес обработчика содержится в соответствующем векторе прерывания. Существенным является вопрос о том, разрешено ли прерывание после перехода на обработчик. В большинстве процессоров при входе в прерывание повторное (вложенное) прерывание автоматически запрещается. Обработчик может разрешить прерывание соответствующей командой (например, в процессорах х86 это команда sti). В этом случае возможно «вложенное» прерывание, в том числе, и от этого же источника, но для этого обработчик прерывания должен быть реентерабельным, т.е. допускать рекурсивный вызов. Кроме того, это может привести к нарушению приоритетов: менее приоритетное событие будет обслужено раньше, чем более приоритетное.
8. Возврат из прерывания восстанавливает контекст прерванной программы. Существенно, что восстанавливается состояние «разрешено/запрещено прерывание»: после возврата из прерывания возможно следующее прерывание, если есть запрос.
attachInterrupt() — ссылка на Arduino
Описание
Цифровые контакты с прерываниями
Первым параметром функции attachInterrupt()
является номер прерывания. Обычно вы должны использовать digitalPinToInterrupt(pin)
для преобразования фактического цифрового вывода в определенный номер прерывания. Например, если вы подключаетесь к контакту 3, используйте digitalPinToInterrupt(3)
в качестве первого параметра для attachInterrupt()
.
Доска | Цифровые выводы, используемые для прерываний |
---|---|
Uno, Nano, Mini, другие на базе 328 | 2, 3 |
Uno WiFi Rev.2, нано каждые | все цифровые контакты |
Мега, Мега2560, МегаАДК | 2, 3, 18, 19, 20, 21 ( контакты 20 и 21 недоступны для прерываний, пока они используются для связи I2C) |
Micro, Leonardo, другие на базе 32u4 | 0, 1, 2, 3, 7 |
Ноль | все цифровые контакты, кроме 4 |
Семейные доски MKR | 0, 1, 4, 5, 6, 7, 8, 9, А1, А2 |
Нано 33 Интернет вещей | 2, 3, 9, 10, 11, 13, А1, А5, А7 |
Nano 33 BLE, Nano 33 BLE Sense | все штифты |
Причитающийся | все цифровые контакты |
101 | все цифровые контакты (только контакты 2, 5, 7, 8, 10, 11, 12, 13 работают с CHANGE ) |
Примечания и предупреждения
Примечание
Внутри прикрепленной функции delay()
не будет работать, и значение, возвращаемое millis()
, не будет увеличиваться.Последовательные данные, полученные во время работы функции, могут быть потеряны. Вы должны объявить как volatile
любые переменные, которые вы изменяете в присоединенной функции. Дополнительную информацию см. в разделе об ISR ниже.
Использование прерываний
Прерывания полезны для автоматического выполнения действий в программах микроконтроллера и могут помочь решить проблемы синхронизации. Хорошими задачами для использования прерывания могут быть чтение поворотного энкодера или контроль пользовательского ввода.
Если вы хотите, чтобы программа всегда ловила импульсы от поворотного энкодера, чтобы она никогда не пропускала импульс, было бы очень сложно написать программу, которая делала бы что-то еще, потому что программе нужно было бы постоянно опрашивать линии датчика для энкодера, чтобы улавливать импульсы, когда они возникают.Другие датчики также имеют аналогичную динамику интерфейса, например, пытаются прочитать датчик звука, который пытается поймать щелчок, или датчик инфракрасного слота (фотопрерыватель), пытающийся поймать падение монеты. Во всех этих ситуациях использование прерывания может освободить микроконтроллер для выполнения какой-либо другой работы, не пропуская ввод.
О процедурах обслуживания прерываний
ISR — это специальные виды функций, которые имеют некоторые уникальные ограничения, которых нет у большинства других функций. У ISR не может быть никаких параметров, и они не должны ничего возвращать.
Как правило, ISR должен быть как можно короче и быстрее. Если ваш скетч использует несколько ISR, одновременно может выполняться только один, другие прерывания будут выполняться после завершения текущего в порядке, который зависит от их приоритета. millis()
полагается на прерывания для подсчета, поэтому никогда не будет увеличиваться внутри ISR. Поскольку для работы delay()
требуются прерывания, она не будет работать, если вызывается внутри ISR. micros()
изначально работает, но начинает работать хаотично через 1-2 мс. delayMicroseconds()
не использует счетчик, поэтому будет работать как обычно.
Обычно глобальные переменные используются для передачи данных между ISR и основной программой. Чтобы убедиться, что общие переменные между ISR и основной программой обновляются правильно, объявите их как volatile
.
Синтаксис
attachInterrupt(цифровойPinToInterrupt(pin), ISR, режим)
(рекомендуется)
attachInterrupt(прерывание, ISR, режим)
(не рекомендуется)
attachInterrupt(pin, ISR, режим)
(Не рекомендуется.Кроме того, этот синтаксис работает только на платах Arduino SAMD, Uno WiFi Rev2, Due и 101.)
Параметры
прерывание
: номер прерывания. Допустимые типы данных: int
.
pin
: номер контакта Arduino.
ISR
: ISR для вызова при возникновении прерывания; эта функция не должна принимать никаких параметров и ничего не возвращать. Эту функцию иногда называют подпрограммой обслуживания прерывания.
режим
: определяет, когда должно срабатывать прерывание.Четыре константы предопределены как действительные значения:
LOW для запуска прерывания всякий раз, когда на выводе низкий уровень,
ИЗМЕНЕНИЕ для запуска прерывания всякий раз, когда вывод изменяет значение
RISING для срабатывания при переходе штифта от низкого уровня к высокому,
ПАДЕНИЕ для того, когда булавка переходит от высокого к низкому.
Платы Due, Zero и MKR1000 позволяют также:
Возвращает
Обработка внешних прерываний в микроконтроллере 8051-AT89s51
В этой статье я хотел бы познакомить вас с концепцией прерываний, принципом работы прерываний, векторным адресом, приоритетом прерывания и тем, как написать ISR (процедуру обслуживания прерывания).
«Прерывание» на английском языке означает отклонение от обычного распорядка. Мы знаем, что процессор всегда занят выполнением каких-то инструкций. Что, если возникнет неотложная ситуация, когда нам нужно на некоторое время приостановить работу процессора и заставить его выполнять/делать что-то еще? Также нам нужно возобновить работу процессора после выполнения нашего «срочного условия» . Чтобы удовлетворить такой спрос, микроконтроллер 8051 имеет систему под названием «Прерывания» .Прерывание обычно представляет собой сигнал из внешнего мира или команду внутренней программы (называемую программным прерыванием), которая заставляет процессор приостанавливать свои текущие действия, а затем переходить в другое место для выполнения другого набора предопределенных действий. При этом процессор сохранит свое текущее состояние и местоположение во временном хранилище (чтобы возобновить текущую деятельность после завершения прерывания). Процесс перехода в другое место после получения сигнала прерывания известен как «обслуживание прерывания» .
Источники прерывания
В микроконтроллере 8051 имеется 2 внешних прерывания, 2 прерывания по таймеру и 1 последовательное прерывание. Внешние прерывания — внешнее прерывание 0 (INT0) и внешнее прерывание 1 (INT1). Прерывания по таймеру — это прерывания от Таймера 0 и прерывания от Таймера 1. Последовательное прерывание предназначено для последовательной связи с микроконтроллером (передача и прием).
Все эти четыре прерывания при вызове обслуживают или выполняют определенный набор предопределенных действий, известных как «Процедуры обслуживания прерываний» .Его способ функционирования подобен «подпрограммам» , которые мы пишем при разработке полной программы. В случае 8051 подпрограммы обслуживания прерываний (ISR) каждого прерывания должны начинаться с соответствующего адреса в памяти программ. Этот адрес, с которого начинается ISR, называется векторным адресом прерывания.
Источник прерывания | Адрес вектора | Приоритет прерывания |
Внешнее прерывание 0 –INT0 | 0003H | 1 |
Прерывание таймера 0 | 000BH | 2 |
Внешнее прерывание 1 –INT1 | 0013H | 3 |
Прерывание таймера 1 | 001BH | 4 |
Последовательное прерывание | 0023H | 5 |
Приоритет прерывания
Все 5 прерываний 8051 имеют разные приоритеты.Прерывания обслуживаются в соответствии с порядком приоритета. Из приведенной выше таблицы видно, что INT0 имеет наивысший приоритет 1, а Таймер 0 идет следующим со значением приоритета 2. Порядок приоритета работает следующим образом — рассмотрим случай, когда два прерывания вызываются одновременно — одно от INT0 и еще один от прерывания Таймера 1. Какой из них будет подан первым? В таком случае процессор будет обслуживать прерывание в соответствии со своим приоритетом. В нашем случае INT0 имеет высокий приоритет (порядок приоритета 1), а прерывание от Таймера 1 имеет низкий приоритет (порядок приоритета 4).Таким образом, процессор сначала выполнит ISR INTO, а затем, после завершения ISR INT0, процессор начнет выполнение ISR прерывания Таймера 1.
Из рисунка выше видно, что INTO — это альтернативная функция P3.2, а INT1 — альтернативная функция P3.3. Сигнал, полученный на этих контактах, вызовет соответствующие прерывания. Но не все сигналы вызовут прерывание! Сигнал, полученный на выводах, должен быть либо сигналом низкого уровня, либо сигналом заднего фронта, чтобы вызвать соответствующее прерывание.Однако для обслуживания прерывания при получении сигнала на выводах человек, который программирует 8051, должен предварительно обработать несколько битов 3 SFR, а именно TCON, IE и IP. Давайте рассмотрим их.
ТКОН
TCON — это SFR с побитовой адресацией. Из 8 бит только младшие 4 бита связаны с внешними прерываниями. Старшие 4 бита отвечают за прерывания от таймеров. Младшие четыре бита: TCON.0 (IT0), TCON.1 (IE0), TCON.2 (IT1) и TCON.3 (IE1). Вы можете обратиться к рисунку, приведенному ниже, для лучшего понимания.Из этих 4 бит, биты 0 и 1 – это означает – TCON.0 и TCON.1 относятся к внешнему прерыванию 0 (INT0), а биты 2 и 3 – TCON.2 и TCON.3 относятся к внешнему прерыванию 1 (INT1). Из этих битов только TCON.0 и TCON.2 напрямую управляются программистом при работе с внешним прерыванием. Биты TCON.1 (IE0) и TCON.3 (IE1) управляются самим процессором. Внешний сигнал, полученный в INTO, установит бит TCON.1 (также известный как IE0) и будет очищен самим процессором после перехода к соответствующему ISR, расположенному по адресу 0003H.Точно так же TCON.3 устанавливается, когда сигнал прерывания получен на INT1 и будет очищен процессором после ветвления. Остальные 2 бита TCON.0 и TCON.2 используются для выбора «типа принимаемого сигнала».
TCON.0 (или IT0) устанавливается в 0 – если прерывание на INT0 должно быть вызвано сигналом низкого уровня. Если TCON.0 установлен на высокий уровень, то прерывание на INT0 будет вызвано сигналом спадающего фронта (переход с высокого на низкий). То же самое и в случае с TCON.1 — если установлено значение 0, то сигнал низкого уровня вызовет прерывание на INT1, а если установлено значение High, то эту работу будет выполнять сигнал заднего фронта.
IE (разрешение прерывания)
В IE есть 3 бита, связанных с внешними прерываниями — это биты 0, 2 и 7. Основная цель этого SFR — разрешить/запретить различные прерывания в зависимости от того, установлены ли соответствующие биты или нет. См. рисунок ниже.
IE.7 — известный как глобальный бит прерывания, который при установке в «0» отключает все виды прерываний в 8051. Только если этот бит установлен в «1», любой вид прерывания будет разрешен в 8051.Если этот бит установлен в 1, программатор может индивидуально включить или отключить все другие прерывания INT0, INT1, прерывания таймера (0 и 1) и последовательные прерывания.
IE.0 — если установлено значение «1» — он включает INT0, а если установлено значение «0» — INT0 будет отключен. Таким образом, чтобы разрешить внешнее прерывание 0 (INT0) — IE.7 и IE.0 должны быть установлены на «1».
IE.2 — аналогично IE.0 — IE.1 включает/отключает внешнее прерывание 1 (INT1).
Приоритет прерывания (IP)
Основной функцией этого SFR является установка приоритета прерывания (IP).По умолчанию INT0 имеет значение приоритета 1 (самое высокое), а INT1 имеет значение приоритета 3 (которое ниже INT0). Программист может изменить этот приоритет, если захочет! Если для IP.0 установлено значение «0», а затем для IP.2 установлено значение «0», порядок приоритетов изменится. INT1 изменится на высокий приоритет, а INT0 изменится на более низкий приоритет по сравнению с INT1.
Как написать ISR (процедура обслуживания прерываний)
ISR подобна любой другой подпрограмме, которую мы пишем внутри программы, за исключением того, что ISR всегда должна заканчиваться инструкцией RETI , а не инструкцией RET (как в случае с подпрограммами).ISR при вызове выполняет определенные строки кода, которые выполняют какие-то операции. Это может быть что угодно, как определено программистом. Единственное условие — первая строка ISR должна начинаться с соответствующего векторного адреса. Векторный адрес INT0 — 0003H, а адрес INT1 — 0013H.
Примечание: В некоторых случаях ISR будет слишком длинным, поэтому будет нецелесообразно записывать все коды, начиная с 0003H или другого адреса вектора. В таких случаях ISR может быть помещен в любое другое место в памяти программ, и программист должен обеспечить безусловный переход к начальному адресу ISR с соответствующего адреса вектора. Пример: ISR INT0 был записан из ячейки 2000H. Теперь программист должен разместить инструкцию — «LJMP 2000H» по векторному адресу INT0 — 0003H.
Примечание:- Всякий раз, когда вызванное прерывание подтверждается и процессор переходит к соответствующему векторному адресу, он автоматически отключает прерывание в регистре IE. Это отключенное прерывание будет повторно разрешено только после выполнения инструкции RETI , размещенной внутри ISR. Это единственная причина, по которой программист должен использовать RETI внутри ISR вместо инструкции RET. Размещение RET также выполнит работу по возврату из процедуры обработки прерывания в основную программу (вызывающую программу), но инструкция RET не будет повторно разрешать отключенное прерывание в регистре IE. Таким образом, если используется RET, прерывание будет навсегда отключено после первого обслуживания ISR (если только оно не будет снова разрешено программистом в какой-либо другой части той же программы).
Итак, чтобы написать ISR для INT0, вы должны помнить о следующих вещах:
1) Разместить ISR для INT0, начиная с его векторного адреса – 0003H.Если ISR слишком длинный, поместите безусловный переход с 0003H на начальный адрес ISR (который находится в другом месте программной памяти). ISR должен заканчиваться инструкцией RETI.
2) Выберите тип запускающего сигнала прерывания путем установки/сброса бита TCON.0. TCON.0=1 – означает, что прерывание будет вызвано падающим фронтом сигнала. TCON.0 =0 – означает, что прерывание будет вызвано сигналом низкого уровня.
3) Установите IE.0 =1, чтобы разрешить внешнее прерывание 0 (INT0)
4) Установить ИЭ.7=1 – включить бит управления глобальным прерыванием.
5) При желании программист может изменить приоритет INT0, установив/сняв IP.0 (Примечание: этот шаг необязателен.)
Теперь, когда дело доходит до внешнего прерывания 1 — INT1 — процессы все те же, за исключением изменения битов, которые должны быть запрограммированы.
1) Поместить ISR в адрес вектора INT1 – 0013H. Или, если ISR длинный, поместите LJMP по адресу 0013H на соответствующий начальный адрес ISR для INT1.
2) Тип запускающего сигнала выбирается установкой/сбросом TCON.2. TCON.2 = 0 – срабатывает по сигналу низкого уровня. TCON.2 = 1 – срабатывает по заднему фронту сигнала.
3) Установите IE.2 = 1, чтобы включить INT1
4) Установите IE.7 =1, чтобы включить глобальный бит управления прерываниями.
5) Приоритет прерывания можно изменить, изменив значение IP.2 (необязательно). См. схему регистра IP, приведенную выше.
Как генерировать программные прерывания в 8051?
Программные прерывания — это не что иное, как прерывание, генерируемое программой внутри контроллера.Чтобы сгенерировать внешнее прерывание, нам нужен входной сигнал либо на выводе INT0, либо на выводе INT1 микроконтроллера 8051. Мы видели, что когда на вывод INTo поступает сигнал прерывания, автоматически устанавливается бит TCON.1, и именно так процессор узнает, что сигнал прерывания был получен на выводе INT0. Когда установлен TCON.1, процессор немедленно подтвердит прерывание и перейдет к соответствующему ISR INT0. При переходе к ISR процессор также очищает TCON.1 бит. То же самое происходит в случае INT1 и связанного с ним бита TCON.3.
Теперь, чтобы сгенерировать программное прерывание, , программист может манипулировать этими битами TCON.1 и TCON.3 вручную внутри программы. Команда типа ‘SETB TCON.1’ активирует прерывание для INT0 (без внешнего сигнала на выводе INT0) внутри контроллера. Теперь процессор подтвердит прерывание и перейдет к соответствующему расположению ISR для INT0 (векторный адрес 0003H).После перехода к ISR процессор очищал бит TCON.1. Такая инструкция, как ‘SETB TCON.3 ’, активирует прерывание для INT1, и процессор перейдет к ISR INT1, расположенному по адресу вектора 0013H. При ветвлении он автоматически очищает бит TCON.3, так что программист может снова активировать прерывание внутри цикла или какой-либо другой части программы.
Пример программы:-
Ранее мы разработали схему для переключения двух светодиодов с помощью одного кнопочного переключателя — в 8051.Он был разработан в образовательных целях.
1) Чтобы узнать, как подключить светодиоды к 8051
2) Как использовать кнопочный переключатель для управления состоянием выхода светодиодов
3) Как использовать прерывание и разработать ISR для 8051.
Вы можете увидеть схему и статью здесь: — Переключение 2 светодиодов с помощью 8051 — Узнайте об использовании внешних прерываний
Примечание: В программе из приведенного выше примера вы можете научиться писать ISR для 8051.В программе используется INT0. Также обратите внимание – как программа переходит от векторного адреса INT0 – 0003H к другому местоположению.
Есть сомнения/вопросы? Комментарий здесь!
Примечание: — Если вас интересует AVR, то вот вам хорошая статья: — Обработка внешних прерываний в AVR
Внешние прерывания ATmega328P — Arxterra
Чтение
Микроконтроллер AVR и встроенные системы с использованием сборки и C
Мухаммеда Али Мазиди, Сармада Наими и Сепер Наими
Секции: 10.3, 10,5
Внешние прерывания
- Обзор прерываний ATmega328P Примечания к лекциям стр. 4 «Основы прерываний»
- Внешние прерывания запускаются выводами INT0 и INT1 или любым из выводов PCINT23..0
- 23 прерывания по смене контакта отображаются на 23 контакта портов ввода/вывода общего назначения:
Порт B Группа | PCINT7 (PB7) PCINT0 (PB0) | |
Порт C Группа | | PCINT14 (PC6) PCINT8 (PC0) |
Порт D Группа | PCINT23 (PD7) PCINT16 (PD0) |
Рисунок 1: Распиновка ATmega328P
Таблица векторов прерываний ATmega328P
Вектор № | Адрес программы | Источник | Определение прерывания | Имя вектора макроса Arduino/C++ ISR() |
---|---|---|---|---|
1 | 0x0000 | СБРОС | Сброс | |
2 | 0x0002 | INT0 | Запрос внешнего прерывания 0 (контакт D2) | (INT0_vect) |
3 | 0x0004 | INT1 | Запрос внешнего прерывания 1 (контакт D3) | (INT1_вект) |
4 | 0x0006 | PCINT0 | Запрос прерывания смены контакта 0 (контакты D8–D13) | (PCINT0_vect) |
5 | 0x0008 | PCINT1 | Запрос прерывания по смене контакта 1 (контакты от A0 до A5) | (PCINT1_vect) |
6 | 0x000A | PCINT2 | Запрос прерывания по изменению контакта 2 (контакты D0–D7) | (PCINT2_vect) |
7 | 0x000C | ВДТ | Прерывание по тайм-ауту сторожевого таймера | (ВДТ_вект) |
8 | 0x000E | ТАЙМЕР2 КОМПАС | Таймер/счетчик 2 Сравните соответствие A | (TIMER2_COMPA_vect) |
9 | 0x0010 | КОМПЛЕКТ ТАЙМЕРА 2 | Таймер/счетчик 2 Сравните соответствие B | (TIMER2_COMPB_vect) |
10 | 0x0012 | ТАЙМЕР2 OVF | Переполнение таймера/счетчика 2 | (TIMER2_OVF_vect) |
11 | 0x0014 | КОНТРОЛЬ ТАЙМЕРА 1 | Событие захвата таймера/счетчика 1 | (TIMER1_CAPT_vect) |
12 | 0x0016 | ТАЙМЕР 1 КОМПАС | Таймер/счетчик 1 Сравните соответствие A | (TIMER1_COMPA_vect) |
13 | 0x0018 | КОМПЛЕКТ ТАЙМЕРА 1 | Таймер/счетчик 1 Сравните соответствие B | (TIMER1_COMPB_vect) |
14 | 0x001A | ТАЙМЕР 1 OVF | Переполнение таймера/счетчика 1 | (TIMER1_OVF_vect) |
15 | 0x001C | ТАЙМЕР 0 КОМПАС | Таймер/Счетчик0 Сравните соответствие A | (TIMER0_COMPA_vect) |
16 | 0x001E | КОМПЛЕКС ТАЙМЕР0 | Таймер/Счетчик0 Сравните соответствие B | (TIMER0_COMPB_vect) |
17 | 0x0020 | ТАЙМЕР0 OVF | Переполнение таймера/счетчика 0 | (TIMER0_OVF_vect) |
18 | 0x0022 | СПИ, СТК | Последовательная передача SPI завершена | (SPI_STC_vect) |
19 | 0x0024 | USART, RX | USART, полный прием | (USART_RX_vect) |
20 | 0x0026 | USART, УДРЭ | USART, регистр данных пуст | (USART_UDRE_vect) |
21 | 0x0028 | USART, Техас | USART, передача завершена | (USART_TX_vect) |
22 | 0x002A | АЦП | Преобразование АЦП завершено | (АДК_вект) |
23 | 0x002C | ЕЕ ГОТОВ | ЭСППЗУ готово | (EE_READY_vect) |
24 | 0x002E | АНАЛОГОВЫЙ КОМПЬЮТЕР | Аналоговый компаратор | (ANALOG_COMP_vect) |
25 | 0x0030 | ТВИ | 2-проводной последовательный интерфейс | (I2C) (TWI_vect) |
26 | 0x0032 | СПМ ГОТОВ | Сохранить память программы готова | (SPM_READY_vect) |
ATmega328P Управление внешним прерыванием
- Прерывания INT0 и INT1 могут быть вызваны низким логическим уровнем, изменением логики и передним или задним фронтом.
Рис. 2. Регистр управления внешними прерываниями A
- Это настроено, как указано в спецификации для внешнего регистра управления прерываниями A — EICRA, как определено в разделе 12.2.1 EICRA таблицы данных. Число «n» может быть 0 или 1.
ISCn1 | ISCn0 | Режим Ардуино | Описание |
---|---|---|---|
0 | 0 | НИЗКИЙ | Низкий уровень INTn генерирует запрос на прерывание |
0 | 1 | ИЗМЕНЕНИЕ | Любое логическое изменение в INTn генерирует и прерывает запрос |
1 | 0 | ПАДЕНИЕ | Задний фронт INT0 генерирует запрос на прерывание |
1 | 1 | ПОДЪЕМ | Нарастающий фронт INT0 генерирует запрос на прерывание |
Включение внешнего прерывания ATmega328P
- Всем прерываниям назначаются отдельные биты разрешения, которые должны быть записаны в логическую единицу вместе с битом глобального разрешения прерывания в регистре состояния (SREG), чтобы разрешить прерывание.
Рисунок 3: Регистр состояния
- ATmega 328P поддерживает два внешних прерывания, которые по отдельности разрешаются установкой битов INT1 и INT0 в регистре маски внешнего прерывания (раздел 12.2.2 EIMSK).
Рис. 4. Регистр маски внешнего прерывания
- Давайте рассмотрим пример. Когда фронт или логическое изменение на выводе INT0 запускает запрос на прерывание, INTF0 устанавливается (единица). Если бит I в SREG и бит INT0 в EIMSK установлены (единица), MCU перейдет к соответствующему вектору прерывания.Флаг сбрасывается при выполнении процедуры обработки прерывания.
Рис. 5. Регистр флага внешнего прерывания
- В качестве альтернативы флаг можно очистить, записав в него логическую единицу. Регистр EIFR находится в пределах диапазона адресов ввода-вывода (от 0x00 до 0x1F) инструкции установки бита в регистре ввода-вывода (SBI). Этот флаг всегда сбрасывается, когда INT0 настроен как прерывание по уровню.
Когда будут срабатывать внешние прерывания?
Если прерывания INT0 или INT1 разрешены и сконфигурированы как инициируемые по низкому уровню (тип 2), прерывания будут срабатывать до тех пор, пока…
- Штифт удерживается низко.
- Низкий уровень удерживается до завершения текущей выполняемой инструкции.
- Уровень удерживается достаточно долго, чтобы MCU полностью проснулся (при условии, что он спал).
— Прерывание низкого уровня на INT0 и INT1 обнаружено асинхронно (часы не требуются). Часы ввода-вывода останавливаются во всех спящих режимах, кроме режима ожидания. Поэтому прерывания низкого уровня могут использоваться для пробуждения компонента из всех спящих режимов. - Среди других приложений прерывания низкого уровня могут использоваться для реализации протокола квитирования.
Если прерывания INT0 или INT1 разрешены и сконфигурированы как срабатывание по фронту или логическому изменению (переключение), (тип 11) прерывания будут срабатывать до тех пор, пока…
- Тактовый сигнал ввода/вывода присутствует.
— Это означает, что эти прерывания нельзя использовать для пробуждения устройства из спящих режимов, кроме режима ожидания. - Импульс длится дольше одного периода синхронизации ввода-вывода. Не гарантируется, что более короткие импульсы вызовут прерывание.
Прерывания по изменению PIN-кода
- В дополнение к нашим двум (2) внешним прерываниям можно запрограммировать двадцать три (23) вывода для запуска прерывания, если этот вывод изменит состояние.
- Эти 23 контакта, в свою очередь, разделены на три (3) группы прерываний (PCI 2:0), соответствующие трем портам GPIO B, C и D
- Каждой группе назначается один бит флага прерывания смены контакта (PCIF) (2:0).
- Флаг прерывания смены контакта будет установлен, если прерывание разрешено (см. Как включить прерывание смены контакта), и любой контакт, назначенный группе, меняет состояние (переключается).
Рис. 6. Регистр прерывания смены контакта
Как работает прерывание смены PIN-кода
Вот как это работает…
Как включить прерывание смены PIN-кода
В дополнение к нашим двум (2) внешним прерываниям, двадцать три (23) вывода PCINT 23:16, 14:0 можно запрограммировать на запуск прерывания при изменении состояния вывода.Эти 23 контакта разделены на три (3) группы прерываний (PCI 2:0) из восьми (8), семи (7) и (8). Следовательно, для разрешения и прерывания смены отдельного контакта 3 бита маски прерывания должны быть установлены в единицу (1).
- Бит I разрешения глобального прерывания SREG
- Группа битов разрешения прерывания смены контакта (PCIE 2:0), назначенная контакту. В частности, прерывание смены контакта PCI2 сработает, если какой-либо включенный контакт PCINT23..16 переключится. Прерывание смены контакта PCI1 сработает, если какой-либо включенный PCINT14..8 контактные переключатели. Прерывание смены контакта PCI0 сработает, если какой-либо включенный контакт PCINT7..0 переключится.
Регистр управления прерыванием смены контакта
- Установлен бит маски разрешения прерывания смены отдельного контакта, назначенный контакту (PCINT 23:0). Эти биты маски расположены в трех регистрах маски смены контактов, назначенных каждой группе.
Маска смены контакта, регистр 2
Маска смены контакта, регистр 1
Регистр маски смены контакта 0
Обработка прерываний ATmega328P (ОБЗОР)
Программирование Arduino для обработки внешних прерываний
- Остановите оптимизацию компилятором переменных в ISR, добавив квалификатор volatile.Это сохраняет текущее значение в SRAM до тех пор, пока оно не понадобится.
постоянный байт pin = 8; // зеленый светодиод 0
volatile int state = LOW;
- Добавьте переходы в процедуру IVT to ISR, настройте внешний регистр управления прерываниями A (EICRA) и включите локальные и глобальные биты флага прерывания.
- Процедура обслуживания прерывания записи (ISR)
пустое мерцание()
{
состояние = !состояние;
}
Чтобы отключить прерывания глобально (очистить бит I в SREG), вызовите функцию noInterrupts().Чтобы снова разрешить прерывания (установите бит I в SREG), вызовите функцию interrupts().
Программирование Arduino для обработки прерываний
- В среде AVR-GCC, на основе которой построен язык Arduino, таблица векторов прерываний (IVT) предопределена, чтобы указывать на подпрограммы прерывания с предопределенными именами (см. «Таблица векторов прерываний ATmega328P» на стр. 6).
- Вы создаете ISR, используя макрос ISR() и эти имена.
#include
ISR(ADC_vect)
{
// здесь код пользователя
}
- Теперь, когда вы определили ISR, вам необходимо включить его локально и глобально. Вот соответствующие ссылки, чтобы узнать, как завершить определение ISR.
Практические задачи
Пример конструкции — отказ переключателя
- Когда вы нажимаете кнопку, ее контакты размыкаются и закрываются много раз, прежде чем они, наконец, останутся на месте. Это известно как контактный отказ.
- В зависимости от конструкции переключателя этот механический дребезг контактов может продолжаться до 10 или 20 миллисекунд. Это не проблема для ламп, дверных звонков и звуковых цепей, но это может привести к хаосу с нашей схемой прерывания, запускаемой по фронту.
Отскок переключателя
- Что касается приведенной выше формы сигнала, решение по подавлению дребезга коммутатора должно быть разработано для фильтрации этих переходов.
Решения для устранения отказов коммутатора
Итак, как мы можем разработать «схему устранения дребезга», чтобы отфильтровать эти переходы.
- Самое дешевое решение не требует оборудования. В частности, мы отключаем внешнее прерывание во время дребезга коммутатора. Это решение было реализовано для Arduino Ником Гэммоном с кодом Arduino, представленным здесь, в разделе «Пример кода таймера насоса».
- Для получения информации о некоторых простых электрических решениях посетите http://www.patchn.com/Debounce.htm.
- Для нашего решения я добавил D-триггер, который работает на частоте менее 50 Гц (T p = 20 миллисекунд).Эта цифровая схема действует как фильтр нижних частот, блокируя реакцию схемы прерывания AVR на любой из этих дополнительных фронтов.
Схема подавления помех переключателя — простой цифровой фильтр нижних частот
Из предварительной лаборатории
Приложение
Как я разработал схему защиты от дребезга
Вот реальная проблема, которую я рассматривал при разработке схемы Debounce.
Логические уровни
Между логическим 0 и логической 1 находится неопределенная область.На рисунке ниже показаны уровни входного и выходного напряжения TTL, соответствующие логическим единицам и 0 (источник: Theory of TTL Logic Family).
Рекомендуемое значение: уровни напряжения логических сигналов
Логические уровни на основе сигнала напряжения
Время нарастания и спада (скорость нарастания)
Электрические сигналы имеют конечный период прохождения через эту область, технически известный для времени нарастания и спада или скорости нарастания.
График скорости нарастания
В таблице ниже представлены данные о задержке распространения и скорости нарастания для каждого из перечисленных семейств.Не допускайте, чтобы скорость нарастания цифровой логики была меньше, чем указано в спецификации. Все семейства цифровой логики будут колебаться с медленным временем нарастания.
Задержка распространения и скорость нарастания для каждого семейства цифровой логики
Для некоторых входов микроконтроллера время нарастания и спада может быть не более 20 нс. Если эта спецификация нарушена, вход может начать колебаться, вызывая хаос внутри устройства и, в конечном итоге, разрушая структуру входного затвора приемного затвора.
Выходной сигнал искажен из-за более низкой скорости нарастания
Входные цепи МОП-устройств, таких как наш микроконтроллер AVR, можно охарактеризовать как емкостные по своей природе (можно смоделировать в первом порядке конденсатором). Для некоторых входов эта емкость может достигать 10 пФ (пико = 10 -12 ). Теперь предположим внешний подтягивающий резистор номиналом 10 кОм. Учитывая эту информацию, мы получаем расчетную постоянную времени (RC) «обратной стороны конверта» 100 нс.
Очевидно, у нас проблема.Я решил эту проблему, добавив устройство TTL между коммутатором и микроконтроллером. Вход 74ALS74 можно охарактеризовать как резистивный по своей природе (можно смоделировать резистором). В сочетании с подтягивающим сопротивлением (10 кОм) проблема ввода улучшается.
Выход устройства 74ALS74 TTL поступает непосредственно на вход микроконтроллера AVR, решающего нашу проблему скорости нарастания. Однако эта новая более быстрая схема создает свои проблемы, которые обсуждаются в следующем разделе.
внешних прерываний в системе x86.Часть 1. Эволюция контроллера прерываний / Хабр
Эта статья посвящена процессу доставки прерываний от внешних устройств в системе x86. Он пытается ответить на такие вопросы, как:
- Что такое PIC и для чего он нужен?
- Что такое APIC и для чего он нужен? Каково назначение LAPIC и I/O APIC?
- В чем разница между APIC, xAPIC и x2APIC?
- Что такое MSI? В чем разница между MSI и MSI-X?
- Какова роль таблиц $PIR, MPtable и ACPI?
Если вы хотите узнать ответ на один из этих вопросов или просто хотите узнать об эволюции контроллера прерываний, пожалуйста, добро пожаловать.
Введение
Для тех, кто не знает, что такое прерывание, вот цитата из Википедии:
В системном программировании прерывание — это сигнал процессору, испускаемый аппаратным или программным обеспечением, указывающий на событие, требующее немедленного внимания. Прерывание предупреждает процессор о состоянии с высоким приоритетом, требующем прерывания текущего кода, выполняемого процессором. Процессор отвечает, приостанавливая свою текущую деятельность, сохраняя свое состояние и выполняя функцию, называемую обработчиком прерывания (или подпрограммой обслуживания прерывания, ISR), для обработки события.Это прерывание является временным, и после завершения работы обработчика прерывания процессор возобновляет нормальную работу.Существует два типа прерываний: аппаратные прерывания и программные прерывания (программные прерывания):
- Аппаратные прерывания используются устройствами для сообщения о том, что они требуют внимания со стороны операционной системы. Внутри аппаратные прерывания реализуются с использованием электронных предупреждающих сигналов, которые отправляются процессору с внешнего устройства, которое является либо частью самого компьютера, например контроллером диска, либо внешним периферийным устройством.Например, нажатие клавиши на клавиатуре или перемещение мыши вызывает аппаратные прерывания, которые заставляют процессор считывать нажатие клавиши или положение мыши. Действие по инициированию аппаратного прерывания называется запросом на прерывание (IRQ).
- Программное прерывание вызвано либо исключительной ситуацией в самом процессоре, либо специальной инструкцией в наборе команд, которая вызывает прерывание при ее выполнении. Первый часто называют ловушкой или исключением и используется для ошибок или событий, возникающих во время выполнения программы, которые являются достаточно исключительными, чтобы их нельзя было обработать в самой программе.Например, будет выдано исключение деления на ноль, если арифметико-логическому блоку процессора будет дана команда разделить число на ноль, поскольку эта инструкция является ошибкой и невозможна.
Эта статья о аппаратных/внешних прерываниях IRQ.
Какова цель прерываний? Например, мы хотим выполнить действие с входящим пакетом от сетевой карты, как только пакет придёт. Если вы не хотите постоянно спрашивать сетевую карту «Мой пакет пришел?» и тратить время вашего процессора, вы можете использовать внешнее аппаратное прерывание IRQ.Линия прерывания от устройства должна быть подключена к линии INTR ЦП, и после получения каждого пакета сетевая карта будет подавать сигнал по этой линии. ЦП обнаружит этот сигнал и узнает, что сетевая карта имеет для него информацию. Только после этого процессор прочитает входящий пакет.
Но что делать, если внешних устройств много? Было бы очень непродуктивно делать тонну пинов INTR на CPU для всех них.
Для решения этой проблемы была придумана специальная микросхема — контроллер прерываний.
ПОС
(
wiki/
osdev)
Первым чипом контроллера прерываний был Intel 8259 PIC. У него было 8 входных линий (IRQ0-7) и 1 выходная линия (которая соединяет контроллер прерываний с линией INTR ЦП). Когда есть прерывание от одного из устройств на его входных линиях, 8259 подаст сигнал по линии INTR. После этого процессор будет знать, что какое-то устройство требует его немедленного внимания, и запросит у PIC, какая из 8 входных линий (IRQx) была источником этого прерывания.Этот опрос имеет некоторые накладные расходы, но теперь у нас 8 линий прерывания вместо 1.
Вскоре 8 линий стало недостаточно. Для увеличения общего количества линий прерывания два контроллера 8259 (ведущий и ведомый) были соединены в каскад (Dual PIC).
IRQ с 0 по 7 обрабатываются первой PIC Intel 8259 (главной), а IRQ с 8 по 15 обрабатываются второй PIC Intel 8259 (ведомой). Только мастер подключен к ЦП и может сигнализировать о входящих прерываниях.Если есть прерывание на линиях 8-15, второй PIC (ведомый) сигнализирует об этом мастеру по линии IRQ2, а после этого мастер сигнализирует ЦП. Это каскадное прерывание отнимает 1 из 16 линий, но дает в общей сложности 15 прерываний для всех внешних устройств.
Эта схема была принята сообществом, и теперь, когда кто-то говорит о PIC (контроллере программных прерываний), они имеют в виду эту систему Dual PIC. Через некоторое время контроллеры 8259 были усовершенствованы и получили новое название: 8259A.С этими контроллерами в набор микросхем была включена система DUAL PIC. Во времена, когда основной шиной для подключения внешних устройств была ISA, этой системы было достаточно. Нужно было только, чтобы разные устройства не подключались к одной и той же линии IRQ, так как прерывания ISA не являются общими.
Отображение прерывания устройства было довольно стандартным:
Пример (отсюда):
IRQ 0 — системный таймер
IRQ 1 — контроллер клавиатуры
IRQ 2 — каскад (прерывание от ведомого контроллера)
IRQ 3 — последовательный порт COM2
IRQ 4 — последовательный порт COM1
IRQ 5 — параллельный порт 2 и 3 или звуковая карта
IRQ 6 — контроллер гибких дисков
IRQ 7 — параллельный порт 1
IRQ 8 — таймер RTC
Прерывание 9 — ACPI
IRQ 10 — открытый/SCSI/сетевой адаптер
IRQ 11 — открытый/SCSI/сетевой адаптер
IRQ 12 — контроллер мыши
IRQ 13 — математический сопроцессор
IRQ 14 — канал ATA 1
IRQ 15 — ATA канал 2
Настройка и работа с чипами 8259 осуществляется с портами ввода/вывода:
Полную документацию по 8259A можно найти
здесь.
Шина PCI позднее заменила шину ISA. К сожалению, количество устройств стало превышать число 15. Также вместо статической шины ISA, устройства на шине PCI могут добавляться в систему динамически, что потенциально может привести к еще большим проблемам. Но, к счастью, прерывания на шине PCI можно использовать совместно, поэтому к одной линии прерывания IRQ можно подключить несколько устройств. В итоге для решения проблемы отсутствия линий прерывания было решено сгруппировать прерывания от всех PCI устройств в линии PIRQ (Programmable Interrupt Request).
Например, предположим, что у нас есть 4 свободных линии прерывания на PIC-контроллере и 20 устройств PCI. Мы можем объединить прерывания от 5 устройств в одну линию PIRQx, и подключить эти линии PIRQx к PIC-контроллеру. В этом случае, если есть прерывание на одной из линий PIRQx, процессор должен будет опрашивать все устройства, подключенные к этой линии, о прерывании, чтобы узнать, кто за него отвечает, но в итоге это решает проблему. Устройство, которое соединяет линии прерывания PCI с линиями PIRQ, часто называют маршрутизатором PIR.
При этом методе необходимо убедиться, что линии PIRQx не подключаются к линиям с прерываниями ISA (поскольку это приведет к конфликтам) и что линии PIRQx сбалансированы (чем больше устройств мы подключаем к одной линии, тем больше устройств процессор нужно будет опрашивать, когда нужно проверить, какое устройство отвечает за прерывание).
Примечание : на изображении сопоставление устройства PCI -> PIR изображено абстрактно, так как в реальном случае оно несколько сложнее.В реальном мире каждое устройство PCI имеет 4 линии прерывания (INTA, INTB, INTC, INTD) и до 8 функций, где каждая функция может иметь только одно из этих прерываний INTx. Какая линия INTx будет использоваться каждой функцией, определяется конфигурацией набора микросхем.
По своей природе функции представляют собой отдельные логические блоки. Например, одно устройство PCI может иметь функцию контроллера Smbus, функцию контроллера SATA и функцию моста LPC. С точки зрения операционной системы (ОС) каждая функция подобна отдельному устройству со своим конфигурационным пространством (PCI config).
Информация о маршрутизации прерываний PIC-контроллера передается в ОС через BIOS, с помощью таблицы $PIR и через регистры 3Ch (INT_LN Interrupt Line (R/W)) и 3Dh (INT_PN Interrupt Pin (RO) ) пространства конфигурации PCI для каждой функции.
Спецификация таблицы $PIR недавно была размещена на веб-сайте Microsoft, но в настоящее время недоступна. Содержимое таблицы можно понять из спецификации PCI BIOS [4.2.2. Получить PCI Interrupt Routing Options] или отсюда (последняя ссылка на русском, но можно попробовать погуглить «Спецификация таблицы маршрутизации PCI IRQ»)
APIC
(
wiki,
osdev)
Последний метод работал до появления мультипроцессорных систем.По своей природе PIC может отправлять прерывания только одному ЦП, а в многопроцессорной системе желательно загружать ЦП сбалансированным образом. Решением этой проблемы стал новый интерфейс APIC (Advanced PIC).
Для каждого процессора был добавлен специальный контроллер под названием LAPIC (Local APIC), а также контроллер I/O APIC для маршрутизации прерываний от внешних устройств. Все эти контроллеры объединены в общую шину с названием APIC (обратите внимание, что современные системы используют для этой задачи стандартную системную шину вместо отдельной шины APIC).
Когда на вход I/O APIC поступает внешнее прерывание, контроллер отправляет сообщение о прерывании на LAPIC одного из системных ЦП. Таким образом, контроллер I/O APIC помогает сбалансировать нагрузку прерываний между процессорами.
Первым чипом APIC был 82489DX, который представлял собой отдельный чип с подключенным LAPIC и APIC ввода-вывода внутри себя. Для двухпроцессорной системы требовалось три таких микросхемы: две для LAPIC и одна для I/O APIC. Позже функциональность LAPIC была непосредственно включена в процессоры, а часть APIC ввода-вывода была отделена от микросхемы 82093AA.
I/O APIC 82093AA имел 24 входа, а архитектура APIC могла поддерживать до 16 ЦП. Прерывания 0-15 были оставлены для старых прерываний ISA для совместимости со старыми системами, а прерывания 16-23 предназначались для всех устройств PCI. При таком разграничении всех конфликтов между прерываниями ISA и PCI можно было бы легко избежать. С увеличением количества свободных линий прерывания также стало возможным увеличить количество линий PIRQx.
Программирование I/O APIC и LAPIC выполняется с помощью MMIO.Регистры LAPIC обычно размещаются по адресу 0xFEE00000, а регистры I/O APIC по адресу 0xFEС00000, хотя их можно переконфигурировать.
Как и в случае с PIC, вначале отдельные микросхемы стали частью чипсета.
Архитектура APIC позже была модернизирована, и ее новый вариант получил название xAPIC (x — расширенный). Благодаря полной обратной совместимости общее количество возможных процессоров в системе было увеличено до 256.
Следующий шаг в развитии архитектуры получил название x2APIC.32. Эти контроллеры могут работать в режиме обратной совместимости с xAPIC, либо они могут работать в новом режиме x2APIC. В этом новом режиме программирование контроллера осуществляется не через MMIO, а через регистры MSR (что гораздо быстрее). По этой ссылке для этого режима необходима поддержка IOMMU.
Стоит отметить, что в системе может быть несколько контроллеров I/O APIC. Например, один на 24 прерывания в южном мосту, а другой на 32 прерывания в северном мосту.В контексте I/O APIC прерывания обычно называются GSI (Global System Interrupt). Итак, вышеупомянутая система имеет GSI 0-55.
Как определить, есть ли в ЦП внутренний LAPIC и какую архитектуру APIC он поддерживает? На эти вопросы можно ответить, проверив битовые флаги из CPUID.
Чтобы помочь ОС обнаружить LAPIC и I/O APIC, BIOS должен предоставить информацию о них либо через MPtable (старый метод), либо через таблицу ACPI (в данном случае таблицу MADT).Помимо общей информации, и MPtable, и ACPI (в данном случае таблица DSDT) должны содержать информацию о маршрутизации прерываний. Это означает информацию о том, какое устройство использует какую линию прерывания (аналогично таблице $PIR).
Вы можете прочитать о MPtable в официальной спецификации. Ранее спецификация была на сайте Intel, но сейчас найти ее можно только в архивной версии. Спецификацию ACPI можно найти на веб-сайте UEFI (текущая версия — 6.2). Стоит отметить, что с помощью ACPI можно объявить маршрутизацию прерываний для систем без APIC (вместо предоставления отдельной таблицы $PIR).
МСИ
(
wiki)
Последний вариант APIC был хорош, но не без недостатков. Все линии прерывания от устройств сильно усложняли систему и, таким образом, увеличивали вероятность ошибки. На смену шине PCI пришла шина PCI Express, которая полностью упростила все системы прерываний. У него вообще нет линий прерывания.Для обратной совместимости сигналы прерывания (INTx#) эмулируются с помощью отдельного вида сообщений. С линиями прерывания PCI их соединение осуществлялось физическими проводами. С линиями прерывания PCI Express соединение является логическим и осуществляется с помощью мостов PCI Express. Но эта поддержка устаревших прерываний INTx существует только для обратной совместимости с шиной PCI. PCI Express представляет совершенно новый метод доставки прерываний — MSI (Message Signaled Interrupts). В этом методе устройство сигнализирует о прерывании, просто записывая в специальное место в области MMIO процессоров LAPIC.
Если раньше одно PCI-устройство (то есть все его функции) могло иметь только 4 прерывания, то теперь стало возможно адресовать до 32 прерываний.
В случае MSI нет разделения линий прерывания: каждое прерывание естественно соответствует своему устройству.
Прерывания MSI также решают еще одну проблему. Например, давайте представим ситуацию, когда устройство совершает транзакцию записи в память и хочет сигнализировать о ее завершении через прерывание.Но транзакция записи может задерживаться на шине в процессе ее передачи (и устройство не может об этом знать). В этом случае сигнал о прерывании сначала придет на ЦП, поэтому процессор будет читать еще неверные данные. Если используется MSI, информация о MSI передается так же, как и сообщения данных, поэтому она не может прийти раньше.
Стоит отметить, что прерывания MSI не могут работать без LAPIC, но MSI могут заменить I/O APIC (еще одно упрощение конструкции).
Через некоторое время метод MSI был расширен до MSI-X. Теперь каждое устройство может иметь до 2048 прерываний. Также теперь можно указать, какой ЦП должен обрабатывать какое прерывание. Это может быть очень полезно для высоконагруженных устройств, таких как, например, сетевые карты.
Нет необходимости в отдельной таблице BIOS для поддержки MSI. Но устройство должно указать свою поддержку MSI через одну из возможностей в своем пространстве конфигурации PCI. Также драйвер устройства должен включать всю необходимую поддержку для работы с MSI.
Заключение
В этой статье мы изучили информацию об эволюции контроллера прерываний и получили общие теоретические знания о доставке прерываний от внешних устройств в системе x86.
В следующей части мы попрактикуемся и посмотрим, как задействовать каждый из вышеупомянутых контроллеров прерываний в Linux.
В третьей части мы заглянем в код coreboot и посмотрим, какие настройки нужны в чипсете для корректной маршрутизации прерываний.
Ссылки:
Благодарности
Особая благодарность Джейкобу Гарберу из сообщества
corebootза помощь в переводе этой статьи.
Что такое внешние аппаратные прерывания?
Что такое внешние аппаратные прерывания? Существует два типа внешних аппаратных прерываний:
АКТИВАЦИЯ ВНЕШНИХ ПРЕРЫВАНИЙ
8051 имеет 2 внешних аппаратных прерывания.Вывод (P3.2) и вывод тринадцать (P3.3) 8051, выбранные как INTO и INT1, используются как внешние аппаратные прерывания. При активации этих контактов 8051 прерывается независимо от того, что он делает, и переходит к таблице векторов для выполнения функции прерывания. в этом разделе мы хотели бы рассмотреть эти два внешних аппаратных прерывания процессора 8051.
АКТИВАЦИЯ INTO И INT1
Внешние прерывания INTO и INT1. В 8051 есть только 2 внешних аппаратных прерывания: INTO и INT1.они расположены на контактах P3.2 и P3.3 третьего порта по отдельности. Блоки 0003H и 0013H в таблице векторов прерываний пропущены для INTO и INT1 по отдельности. Как упоминалось в Разделе 11.1, они включают и отключают зарегистрированную виктимизацию.
Существует два вида активации измерения:
- УРОВЕНЬ ЗАПУСКАЕТСЯ
- Срабатывание по фронту
Давайте проверим все.Во-первых, мы решили выяснить, как работает прерывание по уровню.
В режиме с запуском по уровню контакты INTO и INT1 обычно имеют высокий уровень измерения (как и все контакты порта ввода-вывода), и если на них подается сигнал низкого уровня, это вызывает прерывание. Затем микроконтроллер останавливается независимо от того, что он делает, и переходит к таблице векторов прерываний для обслуживания этого прерывания. это часто можно отметить как прерывание, запускаемое уровнем или активируемое уровнем, и это режим по умолчанию при сбросе 8051.
Сигнал низкого уровня на выводе INT должен быть снят перед выполнением последней инструкции функции прерывания RETI; в противном случае будет сгенерировано другое прерывание. Другими словами, если сигнал прерывания низкого уровня не удаляется до завершения ISR, он понимается как другое прерывание, а также 8051 переходит к таблице векторов, чтобы снова выполнить ISR. Проверьте на примере:
ПРИМЕР :Предположим, что контакт INT1 подключен к переключателю, который обычно имеет высокий уровень.Всякий раз, когда он становится низким, он должен активировать светодиод. Светодиод подключен к PI .3 и часто не горит. Когда он повернут, он должен оставаться на долю секунды. Пока переключатель нажат низко, светодиод должен продолжать гореть.
.В этой программе микроконтроллер непрерывно выполняет цикл внутри цикла ЗДЕСЬ. Всякий раз, когда включается INT1 (контакт P3.3), микроконтроллер выходит из цикла и переходит к позиции вектора 0013H. ISR для INT1 активирует светодиод, поддерживает его включенным в течение длительного времени и выключает, прежде чем он вернется.
Если к моменту выполнения инструкции RETI на выводе INT1 остается низкий уровень, микроконтроллер снова инициирует прерывание. Поэтому, чтобы решить эту проблему, вывод INT1 должен быть возвращен в состояние высокого уровня к моменту выполнения RETI.
аппаратные прерыванияКак было сказано ранее, после сброса 8051 создает низкоуровневые прерывания INTO и INT1. чтобы создать прерывания по фронту, мы должны запрограммировать биты регистра TCON. Регистр TCON содержит, среди прочего, флаговые биты ITO и IT1, которые определяют режим аппаратных прерываний, запускаемых по уровню или по фронту.
ITO и IT1 — это биты DO и D2 регистра TCON соответственно. их также называют TCON.O и TCON.2, поскольку регистр TCON имеет побитовую адресацию. После сброса TCON.O (ITO) и TCON.2 (III) оба находятся в состоянии 0, что означает, что внешние аппаратные прерывания на выводах INTO и INT1 срабатывают по низкому уровню.
Установив биты TCON.O и TCON.2 в высокие значения с помощью таких инструкций, как «SETB TCON. 0″ и «SETB TCON. 2″, внешние аппаратные прерывания INTO и INT1 срабатывают по фронту. например, инструкция «SETB CON.2″ делает INT1 так называемым прерыванием по фронту, в котором при подаче сигнала с высокого на низкий на контакт P3.3, в этом случае контроллер прерывается и вынужден перейти к ячейке 0013H в таблице векторов. для обслуживания ISR (при условии, что бит прерывания включен в регистре IE).
регистр прерыванийTF1 TCON.7 Флаг переполнения таймера 1. Устанавливается аппаратно, когда таймер/счетчик 1
переполнения. Очищается аппаратно, поскольку процессор обращается к подпрограмме прерывания.
TR1 TCON.6 Бит управления запуском таймера 1. Программно устанавливается/сбрасывается, чтобы включить/выключить таймер/счетчик 1
.
TF0 TCON.5 Флаг переполнения таймера 0. Устанавливается аппаратно, когда таймер/счетчик 0
переполняется. Очищается аппаратно, потому что процессор переключается на подпрограмму.
TR0 TCON.4 Таймер 0, бит управления работой. Программно устанавливается/сбрасывается, чтобы включить/выключить таймер/счетчик 0
.
IE1 TCON.3 Флаг фронта внешнего прерывания 1. Устанавливается ЦП при обнаружении фронта внешнего прерывания
(переход из H в L). Очищается процессором при обработке прерывания.Примечание. Этот флаг не фиксирует прерывания низкого уровня.
IT1 TCON.2 Тип прерывания 1, управляющий бит. Устанавливается/сбрасывается программно в
, чтобы указать спадающий фронт/внешнее прерывание, запускаемое по низкому уровню.
IE0 TCON.1 Флаг фронта 0 внешнего прерывания. Устанавливается ЦП при обнаружении фронта внешнего прерывания
(переход из H в L). Очищается процессором при обработке прерывания. Примечание. Этот флаг не фиксирует прерывания низкого уровня.
IT0 TCON.0 Прерывание типа 0, управляющий бит. Устанавливается/сбрасывается программно, чтобы указать
спадающий фронт/низкоуровневое внешнее прерывание.
8051 имеет два внешних аппаратных прерывания. Пири 12 (P3.2) и контакт 13 (P3.3) 8051, обозначенные как INTO и INT1, используются в качестве внешних аппаратных прерываний. При активации этих контактов 8051 прерывается во всем, что он делает, и переходит к таблице векторов для выполнения подпрограммы прерывания. в этом разделе мы изучим эти два внешних аппаратных прерывания 8051 на нескольких примерах.
ДИАГРАММА : прерывания типаТакже читайте здесь
https://eevibes.com/computing/introduction-to-computing/what-is-the-difference-b-w-synchronous-asynchronous-communication/
В чем разница между синхронной и асинхронной связью?
Несколько внешних прерываний в PIC16F877A с использованием прерывания PORTB ⋆ ETX
Эта статья является продолжением серии руководств по микроконтроллеру PIC16F877A. Цель этой серии — предоставить простые и практические примеры, понятные каждому.Мы уже видели внешние прерывания, последовательные прерывания и прерывания по таймеру в нашем предыдущем уроке. В этом уроке мы увидим, как использовать множественные внешние прерывания в PIC16F877A.
Прерывания в PIC16F877A
Как следует из названия, прерывания — это особые события, требующие немедленного внимания, они останавливают выполнение микроконтроллером/микропроцессором задачи и выполняют специальную задачу, известную как программа обслуживания прерываний (ISR) или обработчик прерываний.
PIC 16F877A имеет следующие 15 источников прерывания:
- Timer 0
- Timer 0
- Timer 1
- RB Port Change
- Parallel Port Port Read / Write
- A / D Converter
- USART Reverse
- синхронный последовательный порт
- CCP1 (захват, сравнить, ШИМ)
- CCP2 (захват, сравнить, PWM)
- TMR2 в PR2 Match
- компаратор
- EEPROM EPRALY
- Автозависимость шины
, как мы уже знаем , у нас есть только одно внешнее прерывание, которое находится в PortB.0. Например, в моем проекте мне нужно использовать много внешних прерываний. Как использовать много, так как у нас есть только один в PORTB.0. Итак, в этом уроке мы увидим, как использовать множественные внешние прерывания в PIC16F877A.
Прерывание PORTB в PIC16F877A
В PIC16F877A у нас есть одно прерывание, которое является прерыванием изменения PORTB. Это прерывание используется для идентификации смены порта в PORTB. При этом будут отслеживаться только порты PORTB.4, PORTB.5, PORTB.6 и PORTB.7. Итак, сначала мы увидим это прерывание изменения PORTB.Для этого вам необходимо ознакомиться с регистром прерывания, доступным в PIC16F877A. Мы уже обсуждали эти регистры. Вы можете обновить здесь.
Действия, которые необходимо выполнить
- Включить прерывание PORTB Change.
- Подключите внешние контакты прерываний к RB4, RB5, RB6 и RB7 (PORTB.4 – PORTB.7).
- Всякий раз, когда изменяется состояние любого из RB4, RB5, RB6, RB7, срабатывает ISR.
- В ISR вы должны прочитать регистр PORTB. Только тогда он очистит прерывание PORTB.
Исходный код
При каждом изменении состояния RB4, RB5, RB6, RB7 происходит прерывание. В ISR я переключаю светодиод в PORTD.
//Прерывание PORTB #include# определить задержку для (i=0; i<= 50000; i++) #define LED PORTD беззнаковое целое я; недействительное прерывание ISR (пустое) { беззнаковый символ temp_PORTB = PORTB; светодиод = 0xff; задерживать; светодиод=0x00; РФИФ=0; } недействительный основной (пустой) { /*Порт B в качестве входа */ ТРИСБ0=0xFF; /*Порт D как выход */ ТРИСД=0; светодиод=0; /* Зарегистрировать прерывание PORTB */ OPTION_REG |= 0b00000000; ИНТКОН |= 0b10011000; в то время как (1) { } }
Вывод
[Пожалуйста, найдите изображение вывода здесь]
Несколько внешних прерываний в PIC16F877A
Действия, которые необходимо выполнить
- Перед инициализацией прерывания сначала сохраните значение PORTB в одну переменную.
- Включить прерывание по изменению PORTB.
- Подключите внешние контакты прерываний к RB4, RB5, RB6 и RB7 (PORTB.4 – PORTB.7).
- Всякий раз, когда срабатывает ISR, вам нужно считать значение PORTB и сравнить его со старым значением PORTB с помощью метода XOR.
- Затем вы получите новое значение, а затем, используя оператор ИЛИ, вы сможете найти точный прерванный контакт.
Исходный код
В этом источнике при каждом изменении PORTB.4 – PORTB.7 я должен мигать соответствующим светодиодом, подключенным к PORTD.новый_PORTB; если (key_pressed и PORTB_4) { Светодиод = ПОРТB_4; } иначе, если (key_pressed и PORTB_5) { Светодиод = ПОРТB_5; } иначе, если (key_pressed и PORTB_6) { Светодиод = ПОРТB_6; } иначе, если (key_pressed и PORTB_7) { Светодиод = ПОРТB_7; } еще { // нежелательное прерывание } задерживать; РФИФ=0; } недействительный основной (пустой) { /*Порт B в качестве входа */ ТРИСБ0=0xFF; /*Порт D как выход */ ТРИСД=0; светодиод=0; /*Сохранение исходного значения PORTB*/ старый_PORTB = ПОРТB; /* Зарегистрировать прерывание PORTB */ OPTION_REG |= 0b00000000; ИНТКОН |= 0b10011000; в то время как (1) { светодиод=0x00; } }
Вывод
[Пожалуйста, найдите изображение вывода здесь]
Итак, теперь у нас есть 5 внешних прерываний, включая PORTB.0 прерывание. Вы можете играть с ним.
В нашем следующем уроке мы увидим, как использовать ЖК-дисплей с PIC16F877A.
Вы также можете прочитать приведенные ниже руководства.
4,5 2 голосов
Рейтинг статьи
Приключения в науке: выровняйте свой код Arduino с помощью внешних прерываний — Новости
Давайте продолжим углубляться в Arduino, чтобы увидеть, что на самом деле происходит с регистрами.
Избранное Любимый 2В прошлый раз, когда мы смотрели код Arduino, мы изучали, как работают регистры в ATmega328P.Мы продолжаем заглядывать под капот, чтобы увидеть, как настроить внешние прерывания с помощью прямой записи в регистр.
Прерывание — это все, что может остановить основной поток выполнения программы и заставить процессор выполнить какое-либо действие, прежде чем вернуться к этому основному потоку. В случае внешних прерываний можно настроить что-то вроде нажатия кнопки, чтобы вызвать эту короткую паузу, позволяющую запустить какой-либо другой фрагмент кода.
В ATmega328P память программ разделена на три основных раздела:
- Таблица векторов прерываний (IVT) — Сообщает процессору, куда следует перейти, чтобы найти подпрограмму обслуживания прерываний (ISR) для каждого источника прерывания (т.г., порт D, контакт 2, задний фронт).
- Программное пространство — Здесь находится ваша основная программа. Любые ISR, которые вы напишете, также будут жить здесь.
- Загрузчик — Необязательный раздел кода, который сначала запускается на микроконтроллере и позволяет отправлять на него новые программы нетрадиционными способами (например, через порт UART вместо порта ISP). Его можно настроить для выполнения других задач, но именно возможность загрузки программ через UART делает работу Arduino такой приятной.
Когда вы включаете (или перезагружаете) ваш ATmega328P, самая первая загружаемая инструкция находится по адресу программной памяти 0x0000. Это просто вектор RESET. Обычно единственной инструкцией является команда перехода в другое место в памяти (обычно 0 x 0034 — начало области вашей программы). Ваша программа начинает выполняться последовательно оттуда. Часть кода установки может сообщать процессору, что вы открыты для внешнего прерывания, когда порт D, контакт 2 (также известный как источник прерывания «INT0») испытывает спадающий фронт (логический ВЫСОКИЙ на логический НИЗКИЙ).
Обратите внимание, что обычно для запуска триггера прерывания должны произойти три вещи:
- Должны быть разрешены глобальные прерывания (в AVR это выполняется с помощью функции
sei()
). Обратите внимание, что глобальные прерывания включены в Arduino по умолчанию. - Отдельное прерывание должно быть разрешено (обычно путем установки бита в определенном регистре, связанном с этим прерыванием).
- Должно быть выполнено условие прерывания (например, спадающий фронт на определенном выводе).
При выполнении всех трех условий сработает прерывание. Выполнение вашей основной программы остановится, все переменные состояния или числа, над которыми работал процессор, будут сохранены в памяти, а выполнение перейдет к IVT. Какая запись в таблице перемещается, зависит от того, какое прерывание сработало. Например, задний фронт на порте D, вывод 2 является прерыванием INT0, поэтому выполнение перейдет к адресу 0 x 0002 (см. таблицу «Векторы сброса и прерывания» в техническом описании ATmega328P).
Часто по адресу прерывания находится только одна инструкция. Обычно это команда перехода в другое место в памяти программ, где находится ISR. Ячейка памяти ISR известна как «вектор прерывания». Таким образом, наш процессор перейдет к ISR, выполнит любые инструкции, которые он там найдет, а затем вернется к основной программе, чтобы продолжить с того места, где он остановился (восстановив все сохраненные переменные, которые он мог ранее сохранить).