|
см, например, регистр[ы] IPL у MCS51. Но это ещё не есть "совсем нормальная".
При "совсем нормальной" системе прерываний вообще можно при отработке любого места программы указать - а вот всё, что ниже уронвня M - не моги прервать программу, а что выше - завсегда пожалуйста. Называется "приоритет процессора". Если приоритет процессора выше приоритета преиферийного устройства, то прерывание от этого устройства не будет обслуживаться (пока не понизится приоритет процессора).
В обработчике прерывания с высоким приоритетом N можно сделать критическую обработку, затем понизить приоритет процессора до какого-то уровня M - уже прерывания с уровнем выше M смогут прервать данный обработчик, а ниже M - не могут.
У AVR ничего близкого к этому нет.
В терминологии "Электроники-60" :-) у AVR - единственный уровень прерываний, просто, скажем, INT1 ближе к процессору, чем RXC.
То, что они - одного приоритета, можно показать следующим образом.
Пусть я обрабатываю прерывание int1. Я в принципе не могу сделать так, чтобы после отработки критического куска дать возможность обработчикам RXC, TXC меня прервать, а вот обработчики АЦП и конца записи в EEPROM чтобы не могли. Т.е. с точки зрения обработчика int1 прерывания RXC, TXC, ADIF, ... и даже int0 - имеют одинаковый приоритет, так как их можно разрешить/запретить только все вместе. А их так называемые "приоритеты" - это не приоритеты вообще, так как стоит TXC возникнуть на 1 такт раньше INT0, и выполняться начнёт он, стоит мне разрешить в обработчике TXC прерывания, и после обработки INT0 влезет ADIF и отодвинет якобы более приоритетный обработчик TXC в самый хвост.
Надеюсь, понятно объяснил.
E-mail: info@telesys.ru