229 أسطر
5.2 KiB
C
229 أسطر
5.2 KiB
C
#if ! defined(EI_NOTINT0) && ! defined(EI_NOTINT1) && ! defined(EI_NOTINT2) && ! defined(EI_NOTINT3) && ! defined(EI_NOTINT4) && ! defined(EI_NOTINT5) && ! defined(EI_NOTINT6) && ! defined(EI_NOTINT7)
|
|
#ifdef EI_SECTION_ENABLEEXTERNAL
|
|
switch (arduinoPin) {
|
|
#ifndef EI_NOTINT0
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 18 : // INT0 (xxx1 - MegaCore pinout)
|
|
#else
|
|
case 21 : // INT0
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[0] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(0);
|
|
EICRA &= (~_BV(0) & ~_BV(1));
|
|
EICRA |= mode;
|
|
EIFR |= _BV(0);
|
|
EIMSK |= _BV(0);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT1
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 19 : // INT1
|
|
#else
|
|
case 20 : // INT1
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[1] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(1);
|
|
EICRA &= (~_BV(2) & ~_BV(3));
|
|
EICRA |= (mode << 2);
|
|
EIFR |= _BV(1);
|
|
EIMSK |= _BV(1);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT2
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 20 : // INT2
|
|
#else
|
|
case 19 : // INT2
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[2] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(2);
|
|
EICRA &= (~_BV(4) & ~_BV(5));
|
|
EICRA |= (mode << 4);
|
|
EIFR |= _BV(2);
|
|
EIMSK |= _BV(2);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT3
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 21 : // INT3
|
|
#else
|
|
case 18 : // INT3
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[3] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(3);
|
|
EICRA &= (~_BV(6) & ~_BV(7));
|
|
EICRA |= (mode << 6);
|
|
EIFR |= _BV(3);
|
|
EIMSK |= _BV(3);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT4
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 4 : // INT4
|
|
#else
|
|
case 2 : // INT4
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[4] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(4);
|
|
EICRB &= (~_BV(0) & ~_BV(1));
|
|
EICRB |= mode;
|
|
EIFR |= _BV(4);
|
|
EIMSK |= _BV(4);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT5
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 5 : // INT5
|
|
#else
|
|
case 3 : // INT5
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[5] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(5);
|
|
EICRB &= (~_BV(2) & ~_BV(3));
|
|
EICRB |= (mode << 2);
|
|
EIFR |= _BV(5);
|
|
EIMSK |= _BV(5);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT6
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 6 : // INT6
|
|
#else
|
|
case 75 : // INT6- Fake Arduino Pin
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[6] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(6);
|
|
EICRB &= (~_BV(4) & ~_BV(5));
|
|
EICRB |= (mode << 4);
|
|
EIFR |= _BV(6);
|
|
EIMSK |= _BV(6);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT7
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 7 : // INT7
|
|
#else
|
|
case 76 : // INT7- Fake Arduino Pin
|
|
#endif
|
|
#ifndef NEEDFORSPEED
|
|
functionPointerArrayEXTERNAL[7] = userFunction;
|
|
#endif
|
|
EIMSK &= ~_BV(7);
|
|
EICRB &= (~_BV(6) & ~_BV(7));
|
|
EICRB |= (mode << 6);
|
|
EIFR |= _BV(7);
|
|
EIMSK |= _BV(7);
|
|
break;
|
|
#endif
|
|
}
|
|
#endif // EI_SECTION_ENABLEEXTERNAL
|
|
|
|
#ifdef EI_SECTION_DISABLEEXTERNAL
|
|
switch (arduinoPin) {
|
|
#ifndef EI_NOTINT0
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 18 : // INT0
|
|
#else
|
|
case 21 : // INT0
|
|
#endif
|
|
EIMSK &= ~_BV(0);
|
|
EICRA &= (~_BV(0) & ~_BV(1));
|
|
EIFR |= _BV(0);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT1
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 19 : // INT1
|
|
#else
|
|
case 20 : // INT1
|
|
#endif
|
|
EIMSK &= ~_BV(1);
|
|
EICRA &= (~_BV(2) & ~_BV(3));
|
|
EIFR |= _BV(1);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT2
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 20 : // INT2
|
|
#else
|
|
case 19 : // INT2
|
|
#endif
|
|
EIMSK &= ~_BV(2);
|
|
EICRA &= (~_BV(4) & ~_BV(5));
|
|
EIFR |= _BV(2);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT3
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 21 : // INT3
|
|
#else
|
|
case 18 : // INT3
|
|
#endif
|
|
EIMSK &= ~_BV(3);
|
|
EICRA &= (~_BV(6) & ~_BV(7));
|
|
EIFR |= _BV(3);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT4
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 4 : // INT4
|
|
#else
|
|
case 2 : // INT4
|
|
#endif
|
|
EIMSK &= ~_BV(4);
|
|
EICRB &= (~_BV(0) & ~_BV(1));
|
|
EIFR |= _BV(4);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT5
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 5 : // INT5
|
|
#else
|
|
case 3 : // INT5
|
|
#endif
|
|
EIMSK &= ~_BV(5);
|
|
EICRB &= (~_BV(2) & ~_BV(3));
|
|
EIFR |= _BV(5);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT6
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 6 : // INT6
|
|
#else
|
|
case 75 : // INT6- Fake Arduino Pin
|
|
#endif
|
|
EIMSK &= ~_BV(6);
|
|
EICRB &= (~_BV(4) & ~_BV(5));
|
|
EIFR |= _BV(6);
|
|
break;
|
|
#endif
|
|
#ifndef EI_NOTINT7
|
|
#if defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__
|
|
case 7 : // INT7
|
|
#else
|
|
case 76 : // INT7- Fake Arduino Pin
|
|
#endif
|
|
EIMSK &= ~_BV(7);
|
|
EICRB &= (~_BV(6) & ~_BV(7));
|
|
EIFR |= _BV(7);
|
|
break;
|
|
#endif
|
|
}
|
|
#endif // EI_SECTION_DISABLEEXTERNAL
|
|
#endif // ! defined(EI_NOTINT0) && ! defined(EI_NOTINT1) && ! defined(EI_NOTINT2) && ! defined(EI_NOTINT3) && ! defined(EI_NOTINT4) && ! defined(EI_NOTINT5) && ! defined(EI_NOTINT6) && ! defined(EI_NOTINT7)
|
|
|