![]() |
Repetier-Firmware 0.2
|
00001 #if !defined(digitalPinToPortReg) 00002 #if !(defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) ) 00003 00004 00005 // Standard Arduino Pins 00006 #define digitalPinToPortReg(P) \ 00007 (((P) >= 0 && (P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : &PORTC)) 00008 #define digitalPinToDDRReg(P) \ 00009 (((P) >= 0 && (P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : &DDRC)) 00010 #define digitalPinToPINReg(P) \ 00011 (((P) >= 0 && (P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : &PINC)) 00012 #define digitalPinToBit(P) \ 00013 (((P) >= 0 && (P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) - 8 : (P) - 14)) 00014 00015 #if defined(__AVR_ATmega8__) 00016 00017 // 3 PWM 00018 #define digitalPinToTimer(P) \ 00019 (((P) == 9 || (P) == 10) ? &TCCR1A : (((P) == 11) ? &TCCR2 : 0)) 00020 #define digitalPinToTimerBit(P) \ 00021 (((P) == 9) ? COM1A1 : (((P) == 10) ? COM1B1 : COM21)) 00022 #else 00023 00024 // 6 PWM 00025 #define digitalPinToTimer(P) \ 00026 (((P) == 6 || (P) == 5) ? &TCCR0A : \ 00027 (((P) == 9 || (P) == 10) ? &TCCR1A : \ 00028 (((P) == 11 || (P) == 3) ? &TCCR2A : 0))) 00029 #define digitalPinToTimerBit(P) \ 00030 (((P) == 6) ? COM0A1 : (((P) == 5) ? COM0B1 : \ 00031 (((P) == 9) ? COM1A1 : (((P) == 10) ? COM1B1 : \ 00032 (((P) == 11) ? COM2A1 : COM2B1))))) 00033 #endif 00034 00035 #else 00036 // Arduino Mega Pins 00037 #define digitalPinToPortReg(P) \ 00038 (((P) >= 22 && (P) <= 29) ? &PORTA : \ 00039 ((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &PORTB : \ 00040 (((P) >= 30 && (P) <= 37) ? &PORTC : \ 00041 ((((P) >= 18 && (P) <= 21) || (P) == 38) ? &PORTD : \ 00042 ((((P) >= 0 && (P) <= 3) || (P) == 5) ? &PORTE : \ 00043 (((P) >= 54 && (P) <= 61) ? &PORTF : \ 00044 ((((P) >= 39 && (P) <= 41) || (P) == 4) ? &PORTG : \ 00045 ((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &PORTH : \ 00046 (((P) == 14 || (P) == 15) ? &PORTJ : \ 00047 (((P) >= 62 && (P) <= 69) ? &PORTK : &PORTL)))))))))) 00048 00049 #define digitalPinToDDRReg(P) \ 00050 (((P) >= 22 && (P) <= 29) ? &DDRA : \ 00051 ((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &DDRB : \ 00052 (((P) >= 30 && (P) <= 37) ? &DDRC : \ 00053 ((((P) >= 18 && (P) <= 21) || (P) == 38) ? &DDRD : \ 00054 ((((P) >= 0 && (P) <= 3) || (P) == 5) ? &DDRE : \ 00055 (((P) >= 54 && (P) <= 61) ? &DDRF : \ 00056 ((((P) >= 39 && (P) <= 41) || (P) == 4) ? &DDRG : \ 00057 ((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &DDRH : \ 00058 (((P) == 14 || (P) == 15) ? &DDRJ : \ 00059 (((P) >= 62 && (P) <= 69) ? &DDRK : &DDRL)))))))))) 00060 00061 #define digitalPinToPINReg(P) \ 00062 (((P) >= 22 && (P) <= 29) ? &PINA : \ 00063 ((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &PINB : \ 00064 (((P) >= 30 && (P) <= 37) ? &PINC : \ 00065 ((((P) >= 18 && (P) <= 21) || (P) == 38) ? &PIND : \ 00066 ((((P) >= 0 && (P) <= 3) || (P) == 5) ? &PINE : \ 00067 (((P) >= 54 && (P) <= 61) ? &PINF : \ 00068 ((((P) >= 39 && (P) <= 41) || (P) == 4) ? &PING : \ 00069 ((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &PINH : \ 00070 (((P) == 14 || (P) == 15) ? &PINJ : \ 00071 (((P) >= 62 && (P) <= 69) ? &PINK : &PINL)))))))))) 00072 00073 #define digitalPinToBit(P) \ 00074 (((P) >= 7 && (P) <= 9) ? (P) - 3 : \ 00075 (((P) >= 10 && (P) <= 13) ? (P) - 6 : \ 00076 (((P) >= 22 && (P) <= 29) ? (P) - 22 : \ 00077 (((P) >= 30 && (P) <= 37) ? 37 - (P) : \ 00078 (((P) >= 39 && (P) <= 41) ? 41 - (P) : \ 00079 (((P) >= 42 && (P) <= 49) ? 49 - (P) : \ 00080 (((P) >= 50 && (P) <= 53) ? 53 - (P) : \ 00081 (((P) >= 54 && (P) <= 61) ? (P) - 54 : \ 00082 (((P) >= 62 && (P) <= 69) ? (P) - 62 : \ 00083 (((P) == 0 || (P) == 15 || (P) == 17 || (P) == 21) ? 0 : \ 00084 (((P) == 1 || (P) == 14 || (P) == 16 || (P) == 20) ? 1 : \ 00085 (((P) == 19) ? 2 : \ 00086 (((P) == 5 || (P) == 6 || (P) == 18) ? 3 : \ 00087 (((P) == 2) ? 4 : \ 00088 (((P) == 3 || (P) == 4) ? 5 : 7))))))))))))))) 00089 00090 // 15 PWM 00091 #define digitalPinToTimer(P) \ 00092 (((P) == 13 || (P) == 4) ? &TCCR0A : \ 00093 (((P) == 11 || (P) == 12) ? &TCCR1A : \ 00094 (((P) == 10 || (P) == 9) ? &TCCR2A : \ 00095 (((P) == 5 || (P) == 2 || (P) == 3) ? &TCCR3A : \ 00096 (((P) == 6 || (P) == 7 || (P) == 8) ? &TCCR4A : \ 00097 (((P) == 46 || (P) == 45 || (P) == 44) ? &TCCR5A : 0)))))) 00098 #define digitalPinToTimerBit(P) \ 00099 (((P) == 13) ? COM0A1 : (((P) == 4) ? COM0B1 : \ 00100 (((P) == 11) ? COM1A1 : (((P) == 12) ? COM1B1 : \ 00101 (((P) == 10) ? COM2A1 : (((P) == 9) ? COM2B1 : \ 00102 (((P) == 5) ? COM3A1 : (((P) == 2) ? COM3B1 : (((P) == 3) ? COM3C1 : \ 00103 (((P) == 6) ? COM4A1 : (((P) == 7) ? COM4B1 : (((P) == 8) ? COM4C1 : \ 00104 (((P) == 46) ? COM5A1 : (((P) == 45) ? COM5B1 : COM5C1)))))))))))))) 00105 00106 #endif 00107 #endif 00108 00109 #if !defined(digitalWriteFast) 00110 #define digitalWriteFast(P, V) \ 00111 if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \ 00112 if (digitalPinToTimer(P)) \ 00113 bitClear(*digitalPinToTimer(P), digitalPinToTimerBit(P)); \ 00114 bitWrite(*digitalPinToPortReg(P), digitalPinToBit(P), (V)); \ 00115 } else { \ 00116 digitalWrite((P), (V)); \ 00117 } 00118 #endif 00119 00120 #if !defined(pinModeFast) 00121 #define pinModeFast(P, V) \ 00122 if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \ 00123 bitWrite(*digitalPinToDDRReg(P), digitalPinToBit(P), (V)); \ 00124 } else { \ 00125 pinMode((P), (V)); \ 00126 } 00127 #endif 00128 00129 #if !defined(digitalReadFast) 00130 #define digitalReadFast(P) ( (int) __digitalReadFast__((P)) ) 00131 #define __digitalReadFast__(P ) \ 00132 (__builtin_constant_p(P) ) ? ( \ 00133 digitalPinToTimer(P) ? ( \ 00134 bitClear(*digitalPinToTimer(P), digitalPinToTimerBit(P)) , \ 00135 bitRead(*digitalPinToPINReg(P), digitalPinToBit(P))) : \ 00136 bitRead(*digitalPinToPINReg(P), digitalPinToBit(P))) : \ 00137 digitalRead((P)) 00138 #endif 00139 00140 #if !defined(digitalWriteFast2) 00141 #define digitalWriteFast2(P, V) \ 00142 if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \ 00143 bitWrite(*digitalPinToPortReg(P), digitalPinToBit(P), (V)); \ 00144 } else { \ 00145 digitalWrite((P), (V)); \ 00146 } 00147 #endif 00148 00149 #if !defined(pinModeFast2) 00150 #define pinModeFast2(P, V) \ 00151 if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \ 00152 if (digitalPinToTimer(P)) \ 00153 bitClear(*digitalPinToTimer(P), digitalPinToTimerBit(P)); \ 00154 bitWrite(*digitalPinToDDRReg(P), digitalPinToBit(P), (V)); \ 00155 } else { \ 00156 pinMode((P), (V)); \ 00157 } 00158 #endif 00159 00160 #if !defined(digitalReadFast2) 00161 #define digitalReadFast2(P) ( (int) __digitalReadFast2__((P)) ) 00162 #define __digitalReadFast2__(P ) \ 00163 (__builtin_constant_p(P) ) ? ( \ 00164 ( bitRead(*digitalPinToPINReg(P), digitalPinToBit(P))) ) : \ 00165 digitalRead((P)) 00166 #endif