У меня 2 кнопки на PCINT12/13 и сигнал на PCINT20. Т.е кнопки в одном блоке сигнал в другом PCIE1 / PCIE2
после нажатия кнопки нужно "включить" прерывание от СИГНАЛА. Но не получается. Пишу в CVAVR симулирую в Proteus.
Перепробовал много вариаций регистров:
PCIFR=0x04; - тут флаги, т.е если прерывание сработало то 1 если нет то 0 (регистр нужен только для чтения?)
PCICR=0x04; - регистр вкл/выкл прерываний
PCMSK1=0x30; - регистр для 1 группы (8-14)
PCMSK2=0x10; - регистр для 2 группы (16-23)
(поправьте если не так понимаю назначение регистров)
но симуляция прекращается как только я пытаюсь что-то записать в регистр PCICR. Как я понимаю он то как раз и отвечает от какой группы будет прерывание (PCIE1 / PCIE2 / PCIE0).
P.S: и вообще симуляция падает если в регистр PCICR пытаться что-то записать второй раз.
Код: Выделить всё
main ()
{
//... Инициализация портов таймеров и прерываний в самом начале
PCICR=0x02;
PCMSK1=0x30; //30
PCMSK2=0x10; //10
PCIFR=0x02;
...
}
// прерывание кнопок
interrupt [PC_INT1] void pin_change_isr1(void)
{
//...
PCICR=0x04; // Не выполняет - вылетает
//...
}