4 #include <avr/interrupt.h> 6 #define attachInterrupt(num, func, mode) enableInterrupt(num) 7 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 8 #define SCRAMBLE_INT_ORDER(num) ((num < 4) ? num + 2 : ((num < 6) ? num - 4 : num)) 9 #define DESCRAMBLE_INT_ORDER(num) ((num < 2) ? num + 4 : ((num < 6) ? num - 2 : num)) 11 #define SCRAMBLE_INT_ORDER(num) (num) 12 #define DESCRAMBLE_INT_ORDER(num) (num) 15 static void enableInterrupt(uint8_t num)
17 switch (DESCRAMBLE_INT_ORDER(num)) {
18 #if defined(EICRA) && defined(EIMSK) 20 EICRA = (EICRA & 0xFC) | 0x01;
24 EICRA = (EICRA & 0xF3) | 0x04;
28 EICRA = (EICRA & 0xCF) | 0x10;
32 EICRA = (EICRA & 0x3F) | 0x40;
35 #elif defined(MCUCR) && defined(GICR) 37 MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
41 MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
44 #elif defined(MCUCR) && defined(GIMSK) 46 MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
50 MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
54 #if defined(EICRB) && defined(EIMSK) 56 EICRB = (EICRB & 0xFC) | 0x01;
60 EICRB = (EICRB & 0xF3) | 0x04;
64 EICRB = (EICRB & 0xCF) | 0x10;
68 EICRB = (EICRB & 0x3F) | 0x40;
75 #elif defined(__PIC32MX__) 77 #ifdef ENCODER_OPTIMIZE_INTERRUPTS 78 #undef ENCODER_OPTIMIZE_INTERRUPTS 83 #ifdef ENCODER_OPTIMIZE_INTERRUPTS 84 #undef ENCODER_OPTIMIZE_INTERRUPTS