Что можно писать в подпрограмме прерывания PMP20?
Только простые команды, которые гарантированно выполняются за один цикл: установка и сброс битов, передача данных, арифметика и сравнение. Всё, что требует непрерывного выполнения, в прерывании работать не будет.
Что запрещено:
- команды выдачи импульсов;
- команды выдержки времени, кроме точной синхронизации;
- команды связи (обмен по Modbus и в свободном формате).
Устройство программы: основная часть заканчивается командой FEND, после неё идут метки прерываний и их подпрограммы, каждая завершается IRET, а всё вместе — командой END. Метка прерывания обязана стоять после FEND.
Управление разрешением: EI разрешает прерывания, DI запрещает, участок между DI и EI — зона, где прерывания не отрабатываются. Если запрет не нужен, достаточно EI; контроллер и так стартует с разрешёнными прерываниями.
Есть тонкая настройка в системном flash-регистре SFD3: бит 1 переводит подпрограмму внешнего прерывания в настоящий режим прерывания (вместо выполнения в задаче), а бит 2 повышает её приоритет до максимального. Режим используют, когда внешних сигналов реального времени много. Плата за это — в такой подпрограмме нельзя вызывать функциональные блоки на языке C.
Прикреплённая документация
Георгий Жуков
Ведущий инженер