Код
VPBDIV = 0x00; // перед изменением EXTPOLAR или EXTMODE сбросить в ноль
EXTMODE = 0x0f; // все прерывания по изменению (edge)
VPBDIV = 0x0f; // то же самое значение, что и в EXTMODE
VPBDIV = 0x00; // перед изменением EXTPOLAR или EXTMODE сбросить в ноль
EXTPOLAR = 0x0f; // все прерывания по фронту
VPBDIV = 0x00; // то же самое значение, что и в EXTPOLAR
VPBDIV = 0x00; // перед изменением EXTPOLAR или EXTMODE сбросить в ноль (хз, может и не надо)
EXTINT = 0x0f; // сброс текущих флагов
VPBDIV = 0x01; // окончательное значение (можно изменить на другое)
VICProtection = 0;
VICIntEnClear = -1UL;
VICSoftIntClear = -1UL;
// VICDefVectAddr = (unsigned long)&DefDummyInterrupt;
VICVectAddr = 0;
VICIntSelect &= ~(1 << VIC_EINT0); // IRQ on EINT0
VICVectAddr3 = (unsigned long)&EInt0Interrupt;
VICVectCntl3 = 0x20 | VIC_EINT0;
VICIntEnable = (1 << VIC_EINT0);
__enable_interrupt();
С EINTx есть ещё некоторые тонкости. Настройки для EINTx не всегда устанавливаются. Поищите по форуму.
zltigo обнаруживал кое-что, чего нет даже в мануале.