[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
при входе в прерывание АППАРАТНО:
1)сбрасывается флаг разрешения всех прерываний (cli) и флаг _этого_ прерывания,
2)сохраняется в стеке адрес возврата,
3)выполяется переход на начало программы обработки прерывания.
Это все занимает 4 машинных цикла.
О приоритетах можно говорить лишь тогда, когда два или более прерывания пришли ОДНОВРЕМЕННО, [ т.е. за время выполнения одной команды (прерывание не может прервать команду, даже ту, что выполняется несколько тактов)], либо если прерывания были запрещены, и накопилось несколько необработанных прерываний. В этом случае первым обрабатывается прерывание с меньшим адресом вектора 0x001,0x003,и т.д.
Приоритеты можно организовать программно. Для этого при входе в обработчик надо запретить прерывания с меньшим (как Вы предполагаете) приоритетом, разрешить с бОльшим и разрешить прерывания (sei). При этом не следует забывать запретить то прерывание, которое обрабатывается в данный момент, чтобы не допустить повторного вхождения в него до завершения его обработки.
E-mail: info@telesys.ru