Что произойдет если во время прерывания МК ATmega8 будет вызвано другое прерывание? Например есть прерывание на прием UART, и что будет если во время приема будет вызвано скажем внешнее прерывание INT0?

Комментарии: 7

  1. Dmitriy

    будет стоять в очереди, пока обработчик первого не поднимет флаг глобального разрешения, gie кажется При условии, что там нет приоритета обработчиков, насколько помню в меге8 нет...

    • Nikolay

      или не обработает флаг INT0 в том же цикле прерывания (смотря в какой момент времени пришло второе прерывание).

      • Dmitriy

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

        • Nikolay

          точно, там же отдельные вектора. Это я с пиками перепутал.

          • Dmitriy

            Все это верно в случае если мы уже обрабатываем первый запрос. В случае с одновременным приходом обоих запросов обычно есть аппаратный схемотехнический приоритет, вызывается более приоритетное, затем после обработки, то что в очереди У пиков также, почти. Только там поллинг делают софтварный , чтобы нтче не пропустить. А так да, если обработал там один, а перифериал висит, то он и останется висеть...

            • Nikolay

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

              • Dmitriy

                Я позже уточню, но пик 16 кажется должен также ввалиться после gie=1 если включенный перифериал остался У пик 18 есть уже 2 вектора и софт приоритета, там сложнее https://images.app.goo.gl/i7ybgn5tKosARUki7

Не нашли ответ?

Вам также может быть интересно