Провёл эксперимент на реал Векторе (02).
Написал программку:
.org 0
EI
HLT
JMP 0
.org 38h
RET
.
Это просто цикл прерываний.
Результат такой:
Через 4 такта после фронта "F50Гц", "INTE" падает в "0" и отключает "INT".
INTE восстанавливается в "1" через 44 такта.
Если убрать EI (заменить NOPом, или вроде пробовал JMP 0001) - прерывания никогда не наступают.
Если вставлять "NOP" между HLT и JMP 0 - это приводит к тому, что каждый NOP задерживает восстановление INTE на 4 такта.
Если заменить
RET
на
EI
RET
т.е. разрешить прерывания сразу после перехода к ним, то INTE восстанавливается через 20 тактов.
Т.е. INTE - падает в 0 (запрет прерываний) как программный, так и аппаратный выходной сигнал процессора, поскольку я не использовал DI, а он сам срабатывал.
И разрешать прерывания на Векторе нужно программно - обязательно (если они нужны).
Вроде на процах Мега есть специальная команда выхода из прерывания, которая кроме обычного RETURN сама выполняет ещё и EI, но я опять-же могу путать... склероз аднака...![]()




Ответить с цитированием