|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206 |
- #ifndef _core_pins_h_
- #define _core_pins_h_
-
- #include <avr/io.h>
-
- #if (GCC_VERSION >= 40300) && (GCC_VERSION < 40302)
- #error "Buggy GCC 4.3.0 compiler, please upgrade!"
- #endif
-
-
- // This will speed up digitalWrite slightly, but it
- // adds to your code size. However, if you don't
- // have many digitalWrites, or most are compile time
- // constant inputs, then this might be worthwhile
- //#define DIGITAL_WRITE_EXPENSIVE_INLINE_OPTIMIZATION
-
- // This removes checking in digitalWrite for pin numbers
- // beyond the maximum number of pins. Your program
- // WILL CRASH is digitalWrite is called with a pin number
- // too large, when this is enabled. However, if you don't
- // make such mistakes, you'll get a minor speedup.
- //#define DIGITAL_WRITE_RISKY_OMIT_OVERFLOW_CHECK
-
- #define HIGH 0x1
- #define LOW 0x0
-
- #define INPUT 0x0
- #define OUTPUT 0x1
- #define INPUT_PULLUP 0x2
-
- #define LSBFIRST 0
- #define MSBFIRST 1
-
- #ifndef _BV
- #define _BV(n) (1<<(n))
- #endif
-
- ////////////////////////////////////
- // Teensy 2.0
- ////////////////////////////////////
- #if defined(__AVR_ATmega32U4__)
- #define CORE_NUM_TOTAL_PINS 25
- #define CORE_NUM_DIGITAL 13
- #define CORE_NUM_ANALOG 12
- #define CORE_NUM_PWM 7
- #define CORE_NUM_INTERRUPT 4
- #define PIN_B0 0
- #define PIN_B1 1
- #define PIN_B2 2
- #define PIN_B3 3
- #define PIN_B7 4
- #define PIN_D0 5
- #define PIN_D1 6
- #define PIN_D2 7
- #define PIN_D3 8
- #define PIN_C6 9
- #define PIN_C7 10
- #define PIN_D6 11
- #define PIN_D7 12
- #define PIN_B4 13
- #define PIN_B5 14
- #define PIN_B6 15
- #define PIN_F7 16
- #define PIN_F6 17
- #define PIN_F5 18
- #define PIN_F4 19
- #define PIN_F1 20
- #define PIN_F0 21
- #define PIN_D4 22
- #define PIN_D5 23
- #define PIN_E6 24
- #define CORE_PIN0_BIT 0
- #define CORE_PIN1_BIT 1
- #define CORE_PIN2_BIT 2
- #define CORE_PIN3_BIT 3
- #define CORE_PIN4_BIT 7
- #define CORE_PIN5_BIT 0
- #define CORE_PIN6_BIT 1
- #define CORE_PIN7_BIT 2
- #define CORE_PIN8_BIT 3
- #define CORE_PIN9_BIT 6
- #define CORE_PIN10_BIT 7
- #define CORE_PIN11_BIT 6
- #define CORE_PIN12_BIT 7
- #define CORE_PIN13_BIT 4
- #define CORE_PIN14_BIT 5
- #define CORE_PIN15_BIT 6
- #define CORE_PIN16_BIT 7
- #define CORE_PIN17_BIT 6
- #define CORE_PIN18_BIT 5
- #define CORE_PIN19_BIT 4
- #define CORE_PIN20_BIT 1
- #define CORE_PIN21_BIT 0
- #define CORE_PIN22_BIT 4
- #define CORE_PIN23_BIT 5
- #define CORE_PIN24_BIT 6
- #define CORE_PIN0_BITMASK _BV(CORE_PIN0_BIT)
- #define CORE_PIN1_BITMASK _BV(CORE_PIN1_BIT)
- #define CORE_PIN2_BITMASK _BV(CORE_PIN2_BIT)
- #define CORE_PIN3_BITMASK _BV(CORE_PIN3_BIT)
- #define CORE_PIN4_BITMASK _BV(CORE_PIN4_BIT)
- #define CORE_PIN5_BITMASK _BV(CORE_PIN5_BIT)
- #define CORE_PIN6_BITMASK _BV(CORE_PIN6_BIT)
- #define CORE_PIN7_BITMASK _BV(CORE_PIN7_BIT)
- #define CORE_PIN8_BITMASK _BV(CORE_PIN8_BIT)
- #define CORE_PIN9_BITMASK _BV(CORE_PIN9_BIT)
- #define CORE_PIN10_BITMASK _BV(CORE_PIN10_BIT)
- #define CORE_PIN11_BITMASK _BV(CORE_PIN11_BIT)
- #define CORE_PIN12_BITMASK _BV(CORE_PIN12_BIT)
- #define CORE_PIN13_BITMASK _BV(CORE_PIN13_BIT)
- #define CORE_PIN14_BITMASK _BV(CORE_PIN14_BIT)
- #define CORE_PIN15_BITMASK _BV(CORE_PIN15_BIT)
- #define CORE_PIN16_BITMASK _BV(CORE_PIN16_BIT)
- #define CORE_PIN17_BITMASK _BV(CORE_PIN17_BIT)
- #define CORE_PIN18_BITMASK _BV(CORE_PIN18_BIT)
- #define CORE_PIN19_BITMASK _BV(CORE_PIN19_BIT)
- #define CORE_PIN20_BITMASK _BV(CORE_PIN20_BIT)
- #define CORE_PIN21_BITMASK _BV(CORE_PIN21_BIT)
- #define CORE_PIN22_BITMASK _BV(CORE_PIN22_BIT)
- #define CORE_PIN23_BITMASK _BV(CORE_PIN23_BIT)
- #define CORE_PIN24_BITMASK _BV(CORE_PIN24_BIT)
- #define CORE_PIN0_PORTREG PORTB
- #define CORE_PIN1_PORTREG PORTB
- #define CORE_PIN2_PORTREG PORTB
- #define CORE_PIN3_PORTREG PORTB
- #define CORE_PIN4_PORTREG PORTB
- #define CORE_PIN5_PORTREG PORTD
- #define CORE_PIN6_PORTREG PORTD
- #define CORE_PIN7_PORTREG PORTD
- #define CORE_PIN8_PORTREG PORTD
- #define CORE_PIN9_PORTREG PORTC
- #define CORE_PIN10_PORTREG PORTC
- #define CORE_PIN11_PORTREG PORTD
- #define CORE_PIN12_PORTREG PORTD
- #define CORE_PIN13_PORTREG PORTB
- #define CORE_PIN14_PORTREG PORTB
- #define CORE_PIN15_PORTREG PORTB
- #define CORE_PIN16_PORTREG PORTF
- #define CORE_PIN17_PORTREG PORTF
- #define CORE_PIN18_PORTREG PORTF
- #define CORE_PIN19_PORTREG PORTF
- #define CORE_PIN20_PORTREG PORTF
- #define CORE_PIN21_PORTREG PORTF
- #define CORE_PIN22_PORTREG PORTD
- #define CORE_PIN23_PORTREG PORTD
- #define CORE_PIN24_PORTREG PORTE
- #define CORE_PIN0_DDRREG DDRB
- #define CORE_PIN1_DDRREG DDRB
- #define CORE_PIN2_DDRREG DDRB
- #define CORE_PIN3_DDRREG DDRB
- #define CORE_PIN4_DDRREG DDRB
- #define CORE_PIN5_DDRREG DDRD
- #define CORE_PIN6_DDRREG DDRD
- #define CORE_PIN7_DDRREG DDRD
- #define CORE_PIN8_DDRREG DDRD
- #define CORE_PIN9_DDRREG DDRC
- #define CORE_PIN10_DDRREG DDRC
- #define CORE_PIN11_DDRREG DDRD
- #define CORE_PIN12_DDRREG DDRD
- #define CORE_PIN13_DDRREG DDRB
- #define CORE_PIN14_DDRREG DDRB
- #define CORE_PIN15_DDRREG DDRB
- #define CORE_PIN16_DDRREG DDRF
- #define CORE_PIN17_DDRREG DDRF
- #define CORE_PIN18_DDRREG DDRF
- #define CORE_PIN19_DDRREG DDRF
- #define CORE_PIN20_DDRREG DDRF
- #define CORE_PIN21_DDRREG DDRF
- #define CORE_PIN22_DDRREG DDRD
- #define CORE_PIN23_DDRREG DDRD
- #define CORE_PIN24_DDRREG DDRE
- #define CORE_PIN0_PINREG PINB
- #define CORE_PIN1_PINREG PINB
- #define CORE_PIN2_PINREG PINB
- #define CORE_PIN3_PINREG PINB
- #define CORE_PIN4_PINREG PINB
- #define CORE_PIN5_PINREG PIND
- #define CORE_PIN6_PINREG PIND
- #define CORE_PIN7_PINREG PIND
- #define CORE_PIN8_PINREG PIND
- #define CORE_PIN9_PINREG PINC
- #define CORE_PIN10_PINREG PINC
- #define CORE_PIN11_PINREG PIND
- #define CORE_PIN12_PINREG PIND
- #define CORE_PIN13_PINREG PINB
- #define CORE_PIN14_PINREG PINB
- #define CORE_PIN15_PINREG PINB
- #define CORE_PIN16_PINREG PINF
- #define CORE_PIN17_PINREG PINF
- #define CORE_PIN18_PINREG PINF
- #define CORE_PIN19_PINREG PINF
- #define CORE_PIN20_PINREG PINF
- #define CORE_PIN21_PINREG PINF
- #define CORE_PIN22_PINREG PIND
- #define CORE_PIN23_PINREG PIND
- #define CORE_PIN24_PINREG PINE
- #define CORE_ADC0_PIN PIN_F0
- #define CORE_ADC1_PIN PIN_F1
- #define CORE_ADC4_PIN PIN_F4
- #define CORE_ADC5_PIN PIN_F5
- #define CORE_ADC6_PIN PIN_F6
- #define CORE_ADC7_PIN PIN_F7
- #define CORE_ADC8_PIN PIN_D4
- #define CORE_ADC9_PIN PIN_D6
- #define CORE_ADC10_PIN PIN_D7
- #define CORE_ADC11_PIN PIN_B4
- #define CORE_ADC12_PIN PIN_B5
- #define CORE_ADC13_PIN PIN_B6
- #define CORE_RXD1_PIN PIN_D2
- #define CORE_TXD1_PIN PIN_D3
- #define CORE_XCK1_PIN PIN_D5
- #define CORE_SDA0_PIN PIN_D1
- #define CORE_SCL0_PIN PIN_D0
- #define CORE_INT0_PIN PIN_D0
- #define CORE_INT1_PIN PIN_D1
- #define CORE_INT2_PIN PIN_D2
- #define CORE_INT3_PIN PIN_D3
- #define CORE_SS0_PIN PIN_B0
- #define CORE_MOSI0_PIN PIN_B2
- #define CORE_MISO0_PIN PIN_B3
- #define CORE_SCLK0_PIN PIN_B1
- #define CORE_T0_PIN PIN_D7
- #define CORE_T1_PIN PIN_D6
- #define CORE_ICP1_PIN PIN_D4
- #define CORE_ICP3_PIN PIN_C7
- #define CORE_OC0A_PIN PIN_B7
- #define CORE_OC0B_PIN PIN_D0
- #define CORE_OC1A_PIN PIN_B5
- #define CORE_OC1B_PIN PIN_B6
- #define CORE_OC1C_PIN PIN_B7
- #define CORE_OC3A_PIN PIN_C6
- #define CORE_OC4A_PIN PIN_C7
- #define CORE_OC4AN_PIN PIN_C6
- #define CORE_OC4B_PIN PIN_B6
- #define CORE_OC4BN_PIN PIN_B5
- #define CORE_OC4D_PIN PIN_D7
- #define CORE_OC4DN_PIN PIN_D6
- #define CORE_PCINT0_PIN PIN_B0
- #define CORE_PCINT1_PIN PIN_B1
- #define CORE_PCINT2_PIN PIN_B2
- #define CORE_PCINT3_PIN PIN_B3
- #define CORE_PCINT4_PIN PIN_B4
- #define CORE_PCINT5_PIN PIN_B5
- #define CORE_PCINT6_PIN PIN_B6
- #define CORE_PCINT7_PIN PIN_B7
- #define CORE_LED0_PIN PIN_D6
- #define CORE_PWM0_PIN CORE_OC1C_PIN // B7 4
- #define CORE_PWM1_PIN CORE_OC0B_PIN // D0 5
- #define CORE_PWM2_PIN CORE_OC3A_PIN // C6 9
- #define CORE_PWM3_PIN CORE_OC4A_PIN // C7 10
- #define CORE_PWM4_PIN CORE_OC4D_PIN // D7 12
- #define CORE_PWM5_PIN CORE_OC1A_PIN // B5 14
- #define CORE_PWM6_PIN CORE_OC1B_PIN // B6 15
- #define CORE_ANALOG0_PIN PIN_F0 // 21 ADC0
- #define CORE_ANALOG1_PIN PIN_F1 // 20 ADC1
- #define CORE_ANALOG2_PIN PIN_F4 // 19 ADC4
- #define CORE_ANALOG3_PIN PIN_F5 // 18 ADC5
- #define CORE_ANALOG4_PIN PIN_F6 // 17 ADC6
- #define CORE_ANALOG5_PIN PIN_F7 // 16 ADC7
- #define CORE_ANALOG6_PIN PIN_B6 // 15 ADC13
- #define CORE_ANALOG7_PIN PIN_B5 // 14 ADC12
- #define CORE_ANALOG8_PIN PIN_B4 // 13 ADC11
- #define CORE_ANALOG9_PIN PIN_D7 // 12 ADC10
- #define CORE_ANALOG10_PIN PIN_D6 // 11 ADC9
- #define CORE_ANALOG11_PIN PIN_D4 // 22 ADC8
-
-
- ////////////////////////////////////
- // Teensy 1.0
- ////////////////////////////////////
- #elif defined(__AVR_AT90USB162__)
- #define CORE_NUM_TOTAL_PINS 21
- #define CORE_NUM_DIGITAL 21
- #define CORE_NUM_ANALOG 0
- #define CORE_NUM_PWM 4
- #define CORE_NUM_INTERRUPT 8
- #define PIN_D0 0
- #define PIN_D1 1
- #define PIN_D2 2
- #define PIN_D3 3
- #define PIN_D4 4
- #define PIN_D5 5
- #define PIN_D6 6
- #define PIN_D7 7
- #define PIN_SS 8
- #define PIN_SCLK 9
- #define PIN_MOSI 10
- #define PIN_MISO 11
- #define PIN_B0 8
- #define PIN_B1 9
- #define PIN_B2 10
- #define PIN_B3 11
- #define PIN_B4 12
- #define PIN_B5 13
- #define PIN_B6 14
- #define PIN_B7 15
- #define PIN_C7 16
- #define PIN_C6 17
- #define PIN_C5 18
- #define PIN_C4 19
- #define PIN_C2 20
- #define CORE_PIN0_BIT 0
- #define CORE_PIN1_BIT 1
- #define CORE_PIN2_BIT 2
- #define CORE_PIN3_BIT 3
- #define CORE_PIN4_BIT 4
- #define CORE_PIN5_BIT 5
- #define CORE_PIN6_BIT 6
- #define CORE_PIN7_BIT 7
- #define CORE_PIN8_BIT 0
- #define CORE_PIN9_BIT 1
- #define CORE_PIN10_BIT 2
- #define CORE_PIN11_BIT 3
- #define CORE_PIN12_BIT 4
- #define CORE_PIN13_BIT 5
- #define CORE_PIN14_BIT 6
- #define CORE_PIN15_BIT 7
- #define CORE_PIN16_BIT 7
- #define CORE_PIN17_BIT 6
- #define CORE_PIN18_BIT 5
- #define CORE_PIN19_BIT 4
- #define CORE_PIN20_BIT 2
- #define CORE_PIN0_BITMASK _BV(CORE_PIN0_BIT)
- #define CORE_PIN1_BITMASK _BV(CORE_PIN1_BIT)
- #define CORE_PIN2_BITMASK _BV(CORE_PIN2_BIT)
- #define CORE_PIN3_BITMASK _BV(CORE_PIN3_BIT)
- #define CORE_PIN4_BITMASK _BV(CORE_PIN4_BIT)
- #define CORE_PIN5_BITMASK _BV(CORE_PIN5_BIT)
- #define CORE_PIN6_BITMASK _BV(CORE_PIN6_BIT)
- #define CORE_PIN7_BITMASK _BV(CORE_PIN7_BIT)
- #define CORE_PIN8_BITMASK _BV(CORE_PIN8_BIT)
- #define CORE_PIN9_BITMASK _BV(CORE_PIN9_BIT)
- #define CORE_PIN10_BITMASK _BV(CORE_PIN10_BIT)
- #define CORE_PIN11_BITMASK _BV(CORE_PIN11_BIT)
- #define CORE_PIN12_BITMASK _BV(CORE_PIN12_BIT)
- #define CORE_PIN13_BITMASK _BV(CORE_PIN13_BIT)
- #define CORE_PIN14_BITMASK _BV(CORE_PIN14_BIT)
- #define CORE_PIN15_BITMASK _BV(CORE_PIN15_BIT)
- #define CORE_PIN16_BITMASK _BV(CORE_PIN16_BIT)
- #define CORE_PIN17_BITMASK _BV(CORE_PIN17_BIT)
- #define CORE_PIN18_BITMASK _BV(CORE_PIN18_BIT)
- #define CORE_PIN19_BITMASK _BV(CORE_PIN19_BIT)
- #define CORE_PIN20_BITMASK _BV(CORE_PIN20_BIT)
- #define CORE_PIN0_PORTREG PORTD
- #define CORE_PIN1_PORTREG PORTD
- #define CORE_PIN2_PORTREG PORTD
- #define CORE_PIN3_PORTREG PORTD
- #define CORE_PIN4_PORTREG PORTD
- #define CORE_PIN5_PORTREG PORTD
- #define CORE_PIN6_PORTREG PORTD
- #define CORE_PIN7_PORTREG PORTD
- #define CORE_PIN8_PORTREG PORTB
- #define CORE_PIN9_PORTREG PORTB
- #define CORE_PIN10_PORTREG PORTB
- #define CORE_PIN11_PORTREG PORTB
- #define CORE_PIN12_PORTREG PORTB
- #define CORE_PIN13_PORTREG PORTB
- #define CORE_PIN14_PORTREG PORTB
- #define CORE_PIN15_PORTREG PORTB
- #define CORE_PIN16_PORTREG PORTC
- #define CORE_PIN17_PORTREG PORTC
- #define CORE_PIN18_PORTREG PORTC
- #define CORE_PIN19_PORTREG PORTC
- #define CORE_PIN20_PORTREG PORTC
- #define CORE_PIN0_DDRREG DDRD
- #define CORE_PIN1_DDRREG DDRD
- #define CORE_PIN2_DDRREG DDRD
- #define CORE_PIN3_DDRREG DDRD
- #define CORE_PIN4_DDRREG DDRD
- #define CORE_PIN5_DDRREG DDRD
- #define CORE_PIN6_DDRREG DDRD
- #define CORE_PIN7_DDRREG DDRD
- #define CORE_PIN8_DDRREG DDRB
- #define CORE_PIN9_DDRREG DDRB
- #define CORE_PIN10_DDRREG DDRB
- #define CORE_PIN11_DDRREG DDRB
- #define CORE_PIN12_DDRREG DDRB
- #define CORE_PIN13_DDRREG DDRB
- #define CORE_PIN14_DDRREG DDRB
- #define CORE_PIN15_DDRREG DDRB
- #define CORE_PIN16_DDRREG DDRC
- #define CORE_PIN17_DDRREG DDRC
- #define CORE_PIN18_DDRREG DDRC
- #define CORE_PIN19_DDRREG DDRC
- #define CORE_PIN20_DDRREG DDRC
- #define CORE_PIN0_PINREG PIND
- #define CORE_PIN1_PINREG PIND
- #define CORE_PIN2_PINREG PIND
- #define CORE_PIN3_PINREG PIND
- #define CORE_PIN4_PINREG PIND
- #define CORE_PIN5_PINREG PIND
- #define CORE_PIN6_PINREG PIND
- #define CORE_PIN7_PINREG PIND
- #define CORE_PIN8_PINREG PINB
- #define CORE_PIN9_PINREG PINB
- #define CORE_PIN10_PINREG PINB
- #define CORE_PIN11_PINREG PINB
- #define CORE_PIN12_PINREG PINB
- #define CORE_PIN13_PINREG PINB
- #define CORE_PIN14_PINREG PINB
- #define CORE_PIN15_PINREG PINB
- #define CORE_PIN16_PINREG PINC
- #define CORE_PIN17_PINREG PINC
- #define CORE_PIN18_PINREG PINC
- #define CORE_PIN19_PINREG PINC
- #define CORE_PIN20_PINREG PINC
- #define CORE_T1_PIN PIN_B4
- #define CORE_ICP1_PIN PIN_C7
- #define CORE_OC0A_PIN PIN_B7
- #define CORE_OC0B_PIN PIN_D0
- #define CORE_OC1A_PIN PIN_C6
- #define CORE_OC1B_PIN PIN_C5
- #define CORE_OC1C_PIN PIN_B7
- #define CORE_RXD1_PIN PIN_D2
- #define CORE_TXD1_PIN PIN_D3
- #define CORE_XCK1_PIN PIN_D5
- #define CORE_INT0_PIN PIN_D0
- #define CORE_INT1_PIN PIN_D1
- #define CORE_INT2_PIN PIN_D2
- #define CORE_INT3_PIN PIN_D3
- #define CORE_INT4_PIN PIN_C2
- #define CORE_INT5_PIN PIN_D4
- #define CORE_INT6_PIN PIN_D6
- #define CORE_INT7_PIN PIN_D7
- #define CORE_SS0_PIN PIN_B0
- #define CORE_MOSI0_PIN PIN_B2
- #define CORE_MISO0_PIN PIN_B3
- #define CORE_SCLK0_PIN PIN_B1
- #define CORE_AIN0_PIN PIN_D1
- #define CORE_AIN1_PIN PIN_D2
- #define CORE_PCINT0_PIN PIN_B0
- #define CORE_PCINT1_PIN PIN_B1
- #define CORE_PCINT2_PIN PIN_B2
- #define CORE_PCINT3_PIN PIN_B3
- #define CORE_PCINT4_PIN PIN_B4
- #define CORE_PCINT5_PIN PIN_B5
- #define CORE_PCINT6_PIN PIN_B6
- #define CORE_PCINT7_PIN PIN_B7
- #define CORE_PCINT8_PIN PIN_C6
- #define CORE_PCINT9_PIN PIN_C5
- #define CORE_PCINT10_PIN PIN_C4
- #define CORE_PCINT11_PIN PIN_C2
- #define CORE_PCINT12_PIN PIN_D5
- #define CORE_LED0_PIN PIN_D6
- #define CORE_PWM0_PIN CORE_OC0B_PIN // D0, 0
- #define CORE_PWM1_PIN CORE_OC1C_PIN // B7, 15
- #define CORE_PWM2_PIN CORE_OC1A_PIN // C6, 17
- #define CORE_PWM3_PIN CORE_OC1B_PIN // C5, 18
-
-
- ////////////////////////////////////
- // Teensy++ 1.0 & 2.0
- ////////////////////////////////////
- #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
- #define CORE_NUM_TOTAL_PINS 46
- #define CORE_NUM_DIGITAL 38
- #define CORE_NUM_ANALOG 8
- #define CORE_NUM_PWM 9
- #define CORE_NUM_INTERRUPT 8
- #define PIN_D0 0
- #define PIN_D1 1
- #define PIN_D2 2
- #define PIN_D3 3
- #define PIN_D4 4
- #define PIN_D5 5
- #define PIN_D6 6
- #define PIN_D7 7
- #define PIN_E0 8
- #define PIN_E1 9
- #define PIN_C0 10
- #define PIN_C1 11
- #define PIN_C2 12
- #define PIN_C3 13
- #define PIN_C4 14
- #define PIN_C5 15
- #define PIN_C6 16
- #define PIN_C7 17
- #define PIN_E6 18
- #define PIN_E7 19
- #define PIN_SS 20
- #define PIN_SCLK 21
- #define PIN_MOSI 22
- #define PIN_MISO 23
- #define PIN_B0 20
- #define PIN_B1 21
- #define PIN_B2 22
- #define PIN_B3 23
- #define PIN_B4 24
- #define PIN_B5 25
- #define PIN_B6 26
- #define PIN_B7 27
- #define PIN_A0 28
- #define PIN_A1 29
- #define PIN_A2 30
- #define PIN_A3 31
- #define PIN_A4 32
- #define PIN_A5 33
- #define PIN_A6 34
- #define PIN_A7 35
- #define PIN_E4 36
- #define PIN_E5 37
- #define PIN_F0 38
- #define PIN_F1 39
- #define PIN_F2 40
- #define PIN_F3 41
- #define PIN_F4 42
- #define PIN_F5 43
- #define PIN_F6 44
- #define PIN_F7 45
- #define CORE_PIN0_BIT 0
- #define CORE_PIN1_BIT 1
- #define CORE_PIN2_BIT 2
- #define CORE_PIN3_BIT 3
- #define CORE_PIN4_BIT 4
- #define CORE_PIN5_BIT 5
- #define CORE_PIN6_BIT 6
- #define CORE_PIN7_BIT 7
- #define CORE_PIN8_BIT 0
- #define CORE_PIN9_BIT 1
- #define CORE_PIN10_BIT 0
- #define CORE_PIN11_BIT 1
- #define CORE_PIN12_BIT 2
- #define CORE_PIN13_BIT 3
- #define CORE_PIN14_BIT 4
- #define CORE_PIN15_BIT 5
- #define CORE_PIN16_BIT 6
- #define CORE_PIN17_BIT 7
- #define CORE_PIN18_BIT 6
- #define CORE_PIN19_BIT 7
- #define CORE_PIN20_BIT 0
- #define CORE_PIN21_BIT 1
- #define CORE_PIN22_BIT 2
- #define CORE_PIN23_BIT 3
- #define CORE_PIN24_BIT 4
- #define CORE_PIN25_BIT 5
- #define CORE_PIN26_BIT 6
- #define CORE_PIN27_BIT 7
- #define CORE_PIN28_BIT 0
- #define CORE_PIN29_BIT 1
- #define CORE_PIN30_BIT 2
- #define CORE_PIN31_BIT 3
- #define CORE_PIN32_BIT 4
- #define CORE_PIN33_BIT 5
- #define CORE_PIN34_BIT 6
- #define CORE_PIN35_BIT 7
- #define CORE_PIN36_BIT 4
- #define CORE_PIN37_BIT 5
- #define CORE_PIN38_BIT 0
- #define CORE_PIN39_BIT 1
- #define CORE_PIN40_BIT 2
- #define CORE_PIN41_BIT 3
- #define CORE_PIN42_BIT 4
- #define CORE_PIN43_BIT 5
- #define CORE_PIN44_BIT 6
- #define CORE_PIN45_BIT 7
- #define CORE_PIN0_BITMASK _BV(CORE_PIN0_BIT)
- #define CORE_PIN1_BITMASK _BV(CORE_PIN1_BIT)
- #define CORE_PIN2_BITMASK _BV(CORE_PIN2_BIT)
- #define CORE_PIN3_BITMASK _BV(CORE_PIN3_BIT)
- #define CORE_PIN4_BITMASK _BV(CORE_PIN4_BIT)
- #define CORE_PIN5_BITMASK _BV(CORE_PIN5_BIT)
- #define CORE_PIN6_BITMASK _BV(CORE_PIN6_BIT)
- #define CORE_PIN7_BITMASK _BV(CORE_PIN7_BIT)
- #define CORE_PIN8_BITMASK _BV(CORE_PIN8_BIT)
- #define CORE_PIN9_BITMASK _BV(CORE_PIN9_BIT)
- #define CORE_PIN10_BITMASK _BV(CORE_PIN10_BIT)
- #define CORE_PIN11_BITMASK _BV(CORE_PIN11_BIT)
- #define CORE_PIN12_BITMASK _BV(CORE_PIN12_BIT)
- #define CORE_PIN13_BITMASK _BV(CORE_PIN13_BIT)
- #define CORE_PIN14_BITMASK _BV(CORE_PIN14_BIT)
- #define CORE_PIN15_BITMASK _BV(CORE_PIN15_BIT)
- #define CORE_PIN16_BITMASK _BV(CORE_PIN16_BIT)
- #define CORE_PIN17_BITMASK _BV(CORE_PIN17_BIT)
- #define CORE_PIN18_BITMASK _BV(CORE_PIN18_BIT)
- #define CORE_PIN19_BITMASK _BV(CORE_PIN19_BIT)
- #define CORE_PIN20_BITMASK _BV(CORE_PIN20_BIT)
- #define CORE_PIN21_BITMASK _BV(CORE_PIN21_BIT)
- #define CORE_PIN22_BITMASK _BV(CORE_PIN22_BIT)
- #define CORE_PIN23_BITMASK _BV(CORE_PIN23_BIT)
- #define CORE_PIN24_BITMASK _BV(CORE_PIN24_BIT)
- #define CORE_PIN25_BITMASK _BV(CORE_PIN25_BIT)
- #define CORE_PIN26_BITMASK _BV(CORE_PIN26_BIT)
- #define CORE_PIN27_BITMASK _BV(CORE_PIN27_BIT)
- #define CORE_PIN28_BITMASK _BV(CORE_PIN28_BIT)
- #define CORE_PIN29_BITMASK _BV(CORE_PIN29_BIT)
- #define CORE_PIN30_BITMASK _BV(CORE_PIN30_BIT)
- #define CORE_PIN31_BITMASK _BV(CORE_PIN31_BIT)
- #define CORE_PIN32_BITMASK _BV(CORE_PIN32_BIT)
- #define CORE_PIN33_BITMASK _BV(CORE_PIN33_BIT)
- #define CORE_PIN34_BITMASK _BV(CORE_PIN34_BIT)
- #define CORE_PIN35_BITMASK _BV(CORE_PIN35_BIT)
- #define CORE_PIN36_BITMASK _BV(CORE_PIN36_BIT)
- #define CORE_PIN37_BITMASK _BV(CORE_PIN37_BIT)
- #define CORE_PIN38_BITMASK _BV(CORE_PIN38_BIT)
- #define CORE_PIN39_BITMASK _BV(CORE_PIN39_BIT)
- #define CORE_PIN40_BITMASK _BV(CORE_PIN40_BIT)
- #define CORE_PIN41_BITMASK _BV(CORE_PIN41_BIT)
- #define CORE_PIN42_BITMASK _BV(CORE_PIN42_BIT)
- #define CORE_PIN43_BITMASK _BV(CORE_PIN43_BIT)
- #define CORE_PIN44_BITMASK _BV(CORE_PIN44_BIT)
- #define CORE_PIN45_BITMASK _BV(CORE_PIN45_BIT)
- #define CORE_PIN0_PORTREG PORTD
- #define CORE_PIN1_PORTREG PORTD
- #define CORE_PIN2_PORTREG PORTD
- #define CORE_PIN3_PORTREG PORTD
- #define CORE_PIN4_PORTREG PORTD
- #define CORE_PIN5_PORTREG PORTD
- #define CORE_PIN6_PORTREG PORTD
- #define CORE_PIN7_PORTREG PORTD
- #define CORE_PIN8_PORTREG PORTE
- #define CORE_PIN9_PORTREG PORTE
- #define CORE_PIN10_PORTREG PORTC
- #define CORE_PIN11_PORTREG PORTC
- #define CORE_PIN12_PORTREG PORTC
- #define CORE_PIN13_PORTREG PORTC
- #define CORE_PIN14_PORTREG PORTC
- #define CORE_PIN15_PORTREG PORTC
- #define CORE_PIN16_PORTREG PORTC
- #define CORE_PIN17_PORTREG PORTC
- #define CORE_PIN18_PORTREG PORTE
- #define CORE_PIN19_PORTREG PORTE
- #define CORE_PIN20_PORTREG PORTB
- #define CORE_PIN21_PORTREG PORTB
- #define CORE_PIN22_PORTREG PORTB
- #define CORE_PIN23_PORTREG PORTB
- #define CORE_PIN24_PORTREG PORTB
- #define CORE_PIN25_PORTREG PORTB
- #define CORE_PIN26_PORTREG PORTB
- #define CORE_PIN27_PORTREG PORTB
- #define CORE_PIN28_PORTREG PORTA
- #define CORE_PIN29_PORTREG PORTA
- #define CORE_PIN30_PORTREG PORTA
- #define CORE_PIN31_PORTREG PORTA
- #define CORE_PIN32_PORTREG PORTA
- #define CORE_PIN33_PORTREG PORTA
- #define CORE_PIN34_PORTREG PORTA
- #define CORE_PIN35_PORTREG PORTA
- #define CORE_PIN36_PORTREG PORTE
- #define CORE_PIN37_PORTREG PORTE
- #define CORE_PIN38_PORTREG PORTF
- #define CORE_PIN39_PORTREG PORTF
- #define CORE_PIN40_PORTREG PORTF
- #define CORE_PIN41_PORTREG PORTF
- #define CORE_PIN42_PORTREG PORTF
- #define CORE_PIN43_PORTREG PORTF
- #define CORE_PIN44_PORTREG PORTF
- #define CORE_PIN45_PORTREG PORTF
- #define CORE_PIN0_DDRREG DDRD
- #define CORE_PIN1_DDRREG DDRD
- #define CORE_PIN2_DDRREG DDRD
- #define CORE_PIN3_DDRREG DDRD
- #define CORE_PIN4_DDRREG DDRD
- #define CORE_PIN5_DDRREG DDRD
- #define CORE_PIN6_DDRREG DDRD
- #define CORE_PIN7_DDRREG DDRD
- #define CORE_PIN8_DDRREG DDRE
- #define CORE_PIN9_DDRREG DDRE
- #define CORE_PIN10_DDRREG DDRC
- #define CORE_PIN11_DDRREG DDRC
- #define CORE_PIN12_DDRREG DDRC
- #define CORE_PIN13_DDRREG DDRC
- #define CORE_PIN14_DDRREG DDRC
- #define CORE_PIN15_DDRREG DDRC
- #define CORE_PIN16_DDRREG DDRC
- #define CORE_PIN17_DDRREG DDRC
- #define CORE_PIN18_DDRREG DDRE
- #define CORE_PIN19_DDRREG DDRE
- #define CORE_PIN20_DDRREG DDRB
- #define CORE_PIN21_DDRREG DDRB
- #define CORE_PIN22_DDRREG DDRB
- #define CORE_PIN23_DDRREG DDRB
- #define CORE_PIN24_DDRREG DDRB
- #define CORE_PIN25_DDRREG DDRB
- #define CORE_PIN26_DDRREG DDRB
- #define CORE_PIN27_DDRREG DDRB
- #define CORE_PIN28_DDRREG DDRA
- #define CORE_PIN29_DDRREG DDRA
- #define CORE_PIN30_DDRREG DDRA
- #define CORE_PIN31_DDRREG DDRA
- #define CORE_PIN32_DDRREG DDRA
- #define CORE_PIN33_DDRREG DDRA
- #define CORE_PIN34_DDRREG DDRA
- #define CORE_PIN35_DDRREG DDRA
- #define CORE_PIN36_DDRREG DDRE
- #define CORE_PIN37_DDRREG DDRE
- #define CORE_PIN38_DDRREG DDRF
- #define CORE_PIN39_DDRREG DDRF
- #define CORE_PIN40_DDRREG DDRF
- #define CORE_PIN41_DDRREG DDRF
- #define CORE_PIN42_DDRREG DDRF
- #define CORE_PIN43_DDRREG DDRF
- #define CORE_PIN44_DDRREG DDRF
- #define CORE_PIN45_DDRREG DDRF
- #define CORE_PIN0_PINREG PIND
- #define CORE_PIN1_PINREG PIND
- #define CORE_PIN2_PINREG PIND
- #define CORE_PIN3_PINREG PIND
- #define CORE_PIN4_PINREG PIND
- #define CORE_PIN5_PINREG PIND
- #define CORE_PIN6_PINREG PIND
- #define CORE_PIN7_PINREG PIND
- #define CORE_PIN8_PINREG PINE
- #define CORE_PIN9_PINREG PINE
- #define CORE_PIN10_PINREG PINC
- #define CORE_PIN11_PINREG PINC
- #define CORE_PIN12_PINREG PINC
- #define CORE_PIN13_PINREG PINC
- #define CORE_PIN14_PINREG PINC
- #define CORE_PIN15_PINREG PINC
- #define CORE_PIN16_PINREG PINC
- #define CORE_PIN17_PINREG PINC
- #define CORE_PIN18_PINREG PINE
- #define CORE_PIN19_PINREG PINE
- #define CORE_PIN20_PINREG PINB
- #define CORE_PIN21_PINREG PINB
- #define CORE_PIN22_PINREG PINB
- #define CORE_PIN23_PINREG PINB
- #define CORE_PIN24_PINREG PINB
- #define CORE_PIN25_PINREG PINB
- #define CORE_PIN26_PINREG PINB
- #define CORE_PIN27_PINREG PINB
- #define CORE_PIN28_PINREG PINA
- #define CORE_PIN29_PINREG PINA
- #define CORE_PIN30_PINREG PINA
- #define CORE_PIN31_PINREG PINA
- #define CORE_PIN32_PINREG PINA
- #define CORE_PIN33_PINREG PINA
- #define CORE_PIN34_PINREG PINA
- #define CORE_PIN35_PINREG PINA
- #define CORE_PIN36_PINREG PINE
- #define CORE_PIN37_PINREG PINE
- #define CORE_PIN38_PINREG PINF
- #define CORE_PIN39_PINREG PINF
- #define CORE_PIN40_PINREG PINF
- #define CORE_PIN41_PINREG PINF
- #define CORE_PIN42_PINREG PINF
- #define CORE_PIN43_PINREG PINF
- #define CORE_PIN44_PINREG PINF
- #define CORE_PIN45_PINREG PINF
- #define CORE_ADC0_PIN PIN_F0
- #define CORE_ADC1_PIN PIN_F1
- #define CORE_ADC2_PIN PIN_F2
- #define CORE_ADC3_PIN PIN_F3
- #define CORE_ADC4_PIN PIN_F4
- #define CORE_ADC5_PIN PIN_F5
- #define CORE_ADC6_PIN PIN_F6
- #define CORE_ADC7_PIN PIN_F7
- #define CORE_RXD1_PIN PIN_D2
- #define CORE_TXD1_PIN PIN_D3
- #define CORE_XCK1_PIN PIN_D5
- #define CORE_SDA0_PIN PIN_D1
- #define CORE_SCL0_PIN PIN_D0
- #define CORE_INT0_PIN PIN_D0
- #define CORE_INT1_PIN PIN_D1
- #define CORE_INT2_PIN PIN_D2
- #define CORE_INT3_PIN PIN_D3
- #define CORE_INT4_PIN PIN_E4
- #define CORE_INT5_PIN PIN_E5
- #define CORE_INT6_PIN PIN_E6
- #define CORE_INT7_PIN PIN_E7
- #define CORE_SS0_PIN PIN_B0
- #define CORE_MOSI0_PIN PIN_B2
- #define CORE_MISO0_PIN PIN_B3
- #define CORE_SCLK0_PIN PIN_B1
- #define CORE_T0_PIN PIN_D7
- #define CORE_T1_PIN PIN_D6
- #define CORE_ICP1_PIN PIN_D4
- #define CORE_ICP3_PIN PIN_C7
- #define CORE_OC0A_PIN PIN_B7
- #define CORE_OC0B_PIN PIN_D0
- #define CORE_OC1A_PIN PIN_B5
- #define CORE_OC1B_PIN PIN_B6
- #define CORE_OC1C_PIN PIN_B7
- #define CORE_OC2A_PIN PIN_B4
- #define CORE_OC2B_PIN PIN_D1
- #define CORE_OC3A_PIN PIN_C6
- #define CORE_OC3B_PIN PIN_C5
- #define CORE_OC3C_PIN PIN_C4
- #define CORE_PCINT0_PIN PIN_B0
- #define CORE_PCINT1_PIN PIN_B1
- #define CORE_PCINT2_PIN PIN_B2
- #define CORE_PCINT3_PIN PIN_B3
- #define CORE_PCINT4_PIN PIN_B4
- #define CORE_PCINT5_PIN PIN_B5
- #define CORE_PCINT6_PIN PIN_B6
- #define CORE_PCINT7_PIN PIN_B7
- #define CORE_LED0_PIN PIN_D6
- #define CORE_PWM0_PIN CORE_OC0B_PIN // D0, 0
- #define CORE_PWM1_PIN CORE_OC2B_PIN // D1, 1
- #define CORE_PWM2_PIN CORE_OC3C_PIN // C4, 14
- #define CORE_PWM3_PIN CORE_OC3B_PIN // C5, 15
- #define CORE_PWM4_PIN CORE_OC3A_PIN // C6, 16
- #define CORE_PWM5_PIN CORE_OC2A_PIN // B4, 24
- #define CORE_PWM6_PIN CORE_OC1A_PIN // B5, 25
- #define CORE_PWM7_PIN CORE_OC1B_PIN // B6, 26
- #define CORE_PWM8_PIN CORE_OC1C_PIN // B7, 27
- #define CORE_ANALOG0_PIN PIN_F0
- #define CORE_ANALOG1_PIN PIN_F1
- #define CORE_ANALOG2_PIN PIN_F2
- #define CORE_ANALOG3_PIN PIN_F3
- #define CORE_ANALOG4_PIN PIN_F4
- #define CORE_ANALOG5_PIN PIN_F5
- #define CORE_ANALOG6_PIN PIN_F6
- #define CORE_ANALOG7_PIN PIN_F7
-
- #endif
-
-
- #define CORE_BIT(pin) CORE_PIN_CONCATENATE(pin, BIT)
- #define CORE_BITMASK(pin) CORE_PIN_CONCATENATE(pin, BITMASK)
- #define CORE_PORTREG(pin) CORE_PIN_CONCATENATE(pin, PORTREG)
- #define CORE_DDRREG(pin) CORE_PIN_CONCATENATE(pin, DDRREG)
- #define CORE_PINREG(pin) CORE_PIN_CONCATENATE(pin, PINREG)
- #define CORE_PIN_CONCATENATE(pin, reg) (CORE_PIN ## pin ## _ ## reg)
-
- #ifdef __cplusplus
- extern "C"{
- #endif
-
-
- extern void _digitalWrite(void);
- extern void _digitalWrite_HIGH(void);
- extern void _digitalWrite_LOW(void);
-
- static inline void digitalWrite(uint8_t, uint8_t) __attribute__((always_inline, unused));
- static inline void digitalWrite(uint8_t pin, uint8_t val)
- {
- if (__builtin_constant_p(pin)) {
- if (val) {
- if (pin == 0) {
- CORE_PIN0_PORTREG |= CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_PORTREG |= CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_PORTREG |= CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_PORTREG |= CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_PORTREG |= CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_PORTREG |= CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_PORTREG |= CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_PORTREG |= CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_PORTREG |= CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_PORTREG |= CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_PORTREG |= CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_PORTREG |= CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_PORTREG |= CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_PORTREG |= CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_PORTREG |= CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_PORTREG |= CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_PORTREG |= CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_PORTREG |= CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_PORTREG |= CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_PORTREG |= CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_PORTREG |= CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_PORTREG |= CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_PORTREG |= CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_PORTREG |= CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_PORTREG |= CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_PORTREG |= CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_PORTREG |= CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_PORTREG |= CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_PORTREG |= CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_PORTREG |= CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_PORTREG |= CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_PORTREG |= CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_PORTREG |= CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_PORTREG |= CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_PORTREG |= CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_PORTREG |= CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_PORTREG |= CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_PORTREG |= CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_PORTREG |= CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_PORTREG |= CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_PORTREG |= CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_PORTREG |= CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_PORTREG |= CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_PORTREG |= CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_PORTREG |= CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_PORTREG |= CORE_PIN45_BITMASK;
- }
- #endif
- } else {
- if (pin == 0) {
- CORE_PIN0_PORTREG &= ~CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_PORTREG &= ~CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_PORTREG &= ~CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_PORTREG &= ~CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_PORTREG &= ~CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_PORTREG &= ~CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_PORTREG &= ~CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_PORTREG &= ~CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_PORTREG &= ~CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_PORTREG &= ~CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_PORTREG &= ~CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_PORTREG &= ~CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_PORTREG &= ~CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_PORTREG &= ~CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_PORTREG &= ~CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_PORTREG &= ~CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_PORTREG &= ~CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_PORTREG &= ~CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_PORTREG &= ~CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_PORTREG &= ~CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_PORTREG &= ~CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_PORTREG &= ~CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_PORTREG &= ~CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_PORTREG &= ~CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_PORTREG &= ~CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_PORTREG &= ~CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_PORTREG &= ~CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_PORTREG &= ~CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_PORTREG &= ~CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_PORTREG &= ~CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_PORTREG &= ~CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_PORTREG &= ~CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_PORTREG &= ~CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_PORTREG &= ~CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_PORTREG &= ~CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_PORTREG &= ~CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_PORTREG &= ~CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_PORTREG &= ~CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_PORTREG &= ~CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_PORTREG &= ~CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_PORTREG &= ~CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_PORTREG &= ~CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_PORTREG &= ~CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_PORTREG &= ~CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_PORTREG &= ~CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_PORTREG &= ~CORE_PIN45_BITMASK;
- }
- #endif
- }
- if (pin == CORE_OC0B_PIN) {
- _SFR_BYTE(TCCR0A) &= ~(1<<COM0B1);
- } else if (pin == CORE_OC1A_PIN) {
- TCCR1A &= ~(1<<COM1A1);
- } else if (pin == CORE_OC1B_PIN) {
- TCCR1A &= ~(1<<COM1B1);
- } else if (pin == CORE_OC1C_PIN) {
- TCCR1A &= ~(1<<COM1C1);
- }
- #if defined(__AVR_ATmega32U4__)
- else if (pin == CORE_OC3A_PIN) {
- TCCR3A &= ~(1<<COM3A1);
- } else if (pin == CORE_OC4A_PIN) {
- TCCR4A &= ~(1<<COM4A1);
- } else if (pin == CORE_OC4D_PIN) {
- TCCR4C &= ~(1<<COM4D1);
- }
- #endif
- #if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
- else if (pin == CORE_OC2A_PIN) {
- TCCR2A &= ~(1<<COM2A1);
- } else if (pin == CORE_OC2B_PIN) {
- TCCR2A &= ~(1<<COM2B1);
- } else if (pin == CORE_OC3A_PIN) {
- TCCR3A &= ~(1<<COM3A1);
- } else if (pin == CORE_OC3B_PIN) {
- TCCR3A &= ~(1<<COM3B1);
- } else if (pin == CORE_OC3C_PIN) {
- TCCR3A &= ~(1<<COM3C1);
- }
- #endif
- } else {
- if (__builtin_constant_p(val)) {
- if (val) {
- uint16_t tmp = (pin);
- asm volatile(
- #if defined(DIGITAL_WRITE_EXPENSIVE_INLINE_OPTIMIZATION)
- #if !defined(DIGITAL_WRITE_RISKY_OMIT_OVERFLOW_CHECK)
- "cpi r30, %1" "\n\t"
- "brsh L%=end1" "\n\t"
- #endif
- "lsl r30" "\n\t"
- //"clr r31" "\n\t"
- "subi r30, lo8(-(pm(_digitalWrite_HIGH_TABLE)))" "\n\t"
- "sbci r31, hi8(-(pm(_digitalWrite_HIGH_TABLE)))" "\n\t"
- "icall" "\n\t"
- "L%=end1:" "\n"
- #else
- "call _digitalWrite_HIGH"
- #endif
- : "+z" (tmp)
- : "I" (CORE_NUM_TOTAL_PINS)
- );
- } else {
- uint16_t tmp = (pin);
- asm volatile(
- #if defined(DIGITAL_WRITE_EXPENSIVE_INLINE_OPTIMIZATION)
- #if !defined(DIGITAL_WRITE_RISKY_OMIT_OVERFLOW_CHECK)
- "cpi r30, %1" "\n\t"
- "brsh L%=end2" "\n\t"
- #endif
- "lsl r30" "\n\t"
- //"clr r31" "\n\t"
- "subi r30, lo8(-(pm(_digitalWrite_LOW_TABLE)))" "\n\t"
- "sbci r31, hi8(-(pm(_digitalWrite_LOW_TABLE)))" "\n\t"
- "icall" "\n\t"
- "L%=end2:" "\n"
- #else
- "call _digitalWrite_LOW"
- #endif
- : "+z" (tmp)
- : "I" (CORE_NUM_TOTAL_PINS)
- );
- }
- } else {
- uint16_t tmp1 = (pin);
- uint8_t tmp2 = (val);
- asm volatile(
- #if defined(DIGITAL_WRITE_EXPENSIVE_INLINE_OPTIMIZATION)
- #if !defined(DIGITAL_WRITE_RISKY_OMIT_OVERFLOW_CHECK)
- "cpi %0, %2" "\n\t"
- "brsh L%=end3" "\n\t"
- #endif
- "lsl r30" "\n\t"
- //"clr r31" "\n\t"
- "tst %1" "\n\t"
- "breq L%=low" "\n\t"
- "subi r30, lo8(-(pm(_digitalWrite_HIGH_TABLE)))" "\n\t"
- "sbci r31, hi8(-(pm(_digitalWrite_HIGH_TABLE)))" "\n\t"
- "icall" "\n\t"
- "rjmp L%=end3" "\n\t"
- "L%=low:" "\n\t"
- "subi r30, lo8(-(pm(_digitalWrite_LOW_TABLE)))" "\n\t"
- "sbci r31, hi8(-(pm(_digitalWrite_LOW_TABLE)))" "\n\t"
- "icall" "\n\t"
- "L%=end3:" "\n\t"
- : "+z" (tmp1)
- : "d" (tmp2), "I" (CORE_NUM_TOTAL_PINS)
- #else
- "mov __tmp_reg__, %1" "\n\t"
- "call _digitalWrite"
- : "+z" (tmp1)
- : "r" (tmp2)
- #endif
- );
- }
- }
- }
-
- static inline void digitalWriteFast(uint8_t, uint8_t) __attribute__((always_inline, unused));
- static inline void digitalWriteFast(uint8_t pin, uint8_t val)
- {
- if (__builtin_constant_p(pin)) {
- if (val) {
- if (pin == 0) {
- CORE_PIN0_PORTREG |= CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_PORTREG |= CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_PORTREG |= CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_PORTREG |= CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_PORTREG |= CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_PORTREG |= CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_PORTREG |= CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_PORTREG |= CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_PORTREG |= CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_PORTREG |= CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_PORTREG |= CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_PORTREG |= CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_PORTREG |= CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_PORTREG |= CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_PORTREG |= CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_PORTREG |= CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_PORTREG |= CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_PORTREG |= CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_PORTREG |= CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_PORTREG |= CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_PORTREG |= CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_PORTREG |= CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_PORTREG |= CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_PORTREG |= CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_PORTREG |= CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_PORTREG |= CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_PORTREG |= CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_PORTREG |= CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_PORTREG |= CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_PORTREG |= CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_PORTREG |= CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_PORTREG |= CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_PORTREG |= CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_PORTREG |= CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_PORTREG |= CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_PORTREG |= CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_PORTREG |= CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_PORTREG |= CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_PORTREG |= CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_PORTREG |= CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_PORTREG |= CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_PORTREG |= CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_PORTREG |= CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_PORTREG |= CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_PORTREG |= CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_PORTREG |= CORE_PIN45_BITMASK;
- }
- #endif
- } else {
- if (pin == 0) {
- CORE_PIN0_PORTREG &= ~CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_PORTREG &= ~CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_PORTREG &= ~CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_PORTREG &= ~CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_PORTREG &= ~CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_PORTREG &= ~CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_PORTREG &= ~CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_PORTREG &= ~CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_PORTREG &= ~CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_PORTREG &= ~CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_PORTREG &= ~CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_PORTREG &= ~CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_PORTREG &= ~CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_PORTREG &= ~CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_PORTREG &= ~CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_PORTREG &= ~CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_PORTREG &= ~CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_PORTREG &= ~CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_PORTREG &= ~CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_PORTREG &= ~CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_PORTREG &= ~CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_PORTREG &= ~CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_PORTREG &= ~CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_PORTREG &= ~CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_PORTREG &= ~CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_PORTREG &= ~CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_PORTREG &= ~CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_PORTREG &= ~CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_PORTREG &= ~CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_PORTREG &= ~CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_PORTREG &= ~CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_PORTREG &= ~CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_PORTREG &= ~CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_PORTREG &= ~CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_PORTREG &= ~CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_PORTREG &= ~CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_PORTREG &= ~CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_PORTREG &= ~CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_PORTREG &= ~CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_PORTREG &= ~CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_PORTREG &= ~CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_PORTREG &= ~CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_PORTREG &= ~CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_PORTREG &= ~CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_PORTREG &= ~CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_PORTREG &= ~CORE_PIN45_BITMASK;
- }
- #endif
- }
- } else {
- digitalWrite(pin, val);
- }
- }
-
-
- extern void _digitalRead(void) __attribute__((noinline));
-
- static inline uint8_t digitalRead(uint8_t) __attribute__((always_inline, unused));
- static inline uint8_t digitalRead(uint8_t pin)
- {
- if (__builtin_constant_p(pin)) {
- if (pin == 0) {
- return (CORE_PIN0_PINREG & CORE_PIN0_BITMASK) ? 1 : 0;
- } else if (pin == 1) {
- return (CORE_PIN1_PINREG & CORE_PIN1_BITMASK) ? 1 : 0;
- } else if (pin == 2) {
- return (CORE_PIN2_PINREG & CORE_PIN2_BITMASK) ? 1 : 0;
- } else if (pin == 3) {
- return (CORE_PIN3_PINREG & CORE_PIN3_BITMASK) ? 1 : 0;
- } else if (pin == 4) {
- return (CORE_PIN4_PINREG & CORE_PIN4_BITMASK) ? 1 : 0;
- } else if (pin == 5) {
- return (CORE_PIN5_PINREG & CORE_PIN5_BITMASK) ? 1 : 0;
- } else if (pin == 6) {
- return (CORE_PIN6_PINREG & CORE_PIN6_BITMASK) ? 1 : 0;
- } else if (pin == 7) {
- return (CORE_PIN7_PINREG & CORE_PIN7_BITMASK) ? 1 : 0;
- } else if (pin == 8) {
- return (CORE_PIN8_PINREG & CORE_PIN8_BITMASK) ? 1 : 0;
- } else if (pin == 9) {
- return (CORE_PIN9_PINREG & CORE_PIN9_BITMASK) ? 1 : 0;
- } else if (pin == 10) {
- return (CORE_PIN10_PINREG & CORE_PIN10_BITMASK) ? 1 : 0;
- } else if (pin == 11) {
- return (CORE_PIN11_PINREG & CORE_PIN11_BITMASK) ? 1 : 0;
- } else if (pin == 12) {
- return (CORE_PIN12_PINREG & CORE_PIN12_BITMASK) ? 1 : 0;
- } else if (pin == 13) {
- return (CORE_PIN13_PINREG & CORE_PIN13_BITMASK) ? 1 : 0;
- } else if (pin == 14) {
- return (CORE_PIN14_PINREG & CORE_PIN14_BITMASK) ? 1 : 0;
- } else if (pin == 15) {
- return (CORE_PIN15_PINREG & CORE_PIN15_BITMASK) ? 1 : 0;
- } else if (pin == 16) {
- return (CORE_PIN16_PINREG & CORE_PIN16_BITMASK) ? 1 : 0;
- } else if (pin == 17) {
- return (CORE_PIN17_PINREG & CORE_PIN17_BITMASK) ? 1 : 0;
- } else if (pin == 18) {
- return (CORE_PIN18_PINREG & CORE_PIN18_BITMASK) ? 1 : 0;
- } else if (pin == 19) {
- return (CORE_PIN19_PINREG & CORE_PIN19_BITMASK) ? 1 : 0;
- } else if (pin == 20) {
- return (CORE_PIN20_PINREG & CORE_PIN20_BITMASK) ? 1 : 0;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- return (CORE_PIN21_PINREG & CORE_PIN21_BITMASK) ? 1 : 0;
- } else if (pin == 22) {
- return (CORE_PIN22_PINREG & CORE_PIN22_BITMASK) ? 1 : 0;
- } else if (pin == 23) {
- return (CORE_PIN23_PINREG & CORE_PIN23_BITMASK) ? 1 : 0;
- } else if (pin == 24) {
- return (CORE_PIN24_PINREG & CORE_PIN24_BITMASK) ? 1 : 0;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- return (CORE_PIN25_PINREG & CORE_PIN25_BITMASK) ? 1 : 0;
- } else if (pin == 26) {
- return (CORE_PIN26_PINREG & CORE_PIN26_BITMASK) ? 1 : 0;
- } else if (pin == 27) {
- return (CORE_PIN27_PINREG & CORE_PIN27_BITMASK) ? 1 : 0;
- } else if (pin == 28) {
- return (CORE_PIN28_PINREG & CORE_PIN28_BITMASK) ? 1 : 0;
- } else if (pin == 29) {
- return (CORE_PIN29_PINREG & CORE_PIN29_BITMASK) ? 1 : 0;
- } else if (pin == 30) {
- return (CORE_PIN30_PINREG & CORE_PIN30_BITMASK) ? 1 : 0;
- } else if (pin == 31) {
- return (CORE_PIN31_PINREG & CORE_PIN31_BITMASK) ? 1 : 0;
- } else if (pin == 32) {
- return (CORE_PIN32_PINREG & CORE_PIN32_BITMASK) ? 1 : 0;
- } else if (pin == 33) {
- return (CORE_PIN33_PINREG & CORE_PIN33_BITMASK) ? 1 : 0;
- } else if (pin == 34) {
- return (CORE_PIN34_PINREG & CORE_PIN34_BITMASK) ? 1 : 0;
- } else if (pin == 35) {
- return (CORE_PIN35_PINREG & CORE_PIN35_BITMASK) ? 1 : 0;
- } else if (pin == 36) {
- return (CORE_PIN36_PINREG & CORE_PIN36_BITMASK) ? 1 : 0;
- } else if (pin == 37) {
- return (CORE_PIN37_PINREG & CORE_PIN37_BITMASK) ? 1 : 0;
- } else if (pin == 38) {
- return (CORE_PIN38_PINREG & CORE_PIN38_BITMASK) ? 1 : 0;
- } else if (pin == 39) {
- return (CORE_PIN39_PINREG & CORE_PIN39_BITMASK) ? 1 : 0;
- } else if (pin == 40) {
- return (CORE_PIN40_PINREG & CORE_PIN40_BITMASK) ? 1 : 0;
- } else if (pin == 41) {
- return (CORE_PIN41_PINREG & CORE_PIN41_BITMASK) ? 1 : 0;
- } else if (pin == 42) {
- return (CORE_PIN42_PINREG & CORE_PIN42_BITMASK) ? 1 : 0;
- } else if (pin == 43) {
- return (CORE_PIN43_PINREG & CORE_PIN43_BITMASK) ? 1 : 0;
- } else if (pin == 44) {
- return (CORE_PIN44_PINREG & CORE_PIN44_BITMASK) ? 1 : 0;
- } else if (pin == 45) {
- return (CORE_PIN45_PINREG & CORE_PIN45_BITMASK) ? 1 : 0;
- }
- #endif
- else {
- return 0;
- }
- } else {
- uint16_t tmp = (pin);
- asm volatile(
- "call _digitalRead"
- : "+z" (tmp)
- :);
- return (uint8_t)tmp;
- }
- }
-
- static inline uint8_t digitalReadFast(uint8_t) __attribute__((always_inline, unused));
- static inline uint8_t digitalReadFast(uint8_t pin)
- {
- return digitalRead(pin);
- }
-
- extern void _pinMode(uint8_t pin, uint8_t mode) __attribute__((noinline));
- extern void _pinMode_output(uint8_t pin) __attribute__((noinline));
- extern void _pinMode_input(uint8_t pin) __attribute__((noinline));
- extern void _pinMode_input_pullup(uint8_t pin) __attribute__((noinline));
-
- static inline void pinMode(uint8_t, uint8_t) __attribute__((always_inline, unused));
- static inline void pinMode(uint8_t pin, uint8_t mode)
- {
- if (__builtin_constant_p(pin) && __builtin_constant_p(mode)) {
- if (mode == OUTPUT) {
- if (pin == 0) {
- CORE_PIN0_DDRREG |= CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_DDRREG |= CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_DDRREG |= CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_DDRREG |= CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_DDRREG |= CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_DDRREG |= CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_DDRREG |= CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_DDRREG |= CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_DDRREG |= CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_DDRREG |= CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_DDRREG |= CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_DDRREG |= CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_DDRREG |= CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_DDRREG |= CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_DDRREG |= CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_DDRREG |= CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_DDRREG |= CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_DDRREG |= CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_DDRREG |= CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_DDRREG |= CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_DDRREG |= CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_DDRREG |= CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_DDRREG |= CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_DDRREG |= CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_DDRREG |= CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_DDRREG |= CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_DDRREG |= CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_DDRREG |= CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_DDRREG |= CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_DDRREG |= CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_DDRREG |= CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_DDRREG |= CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_DDRREG |= CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_DDRREG |= CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_DDRREG |= CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_DDRREG |= CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_DDRREG |= CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_DDRREG |= CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_DDRREG |= CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_DDRREG |= CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_DDRREG |= CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_DDRREG |= CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_DDRREG |= CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_DDRREG |= CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_DDRREG |= CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_DDRREG |= CORE_PIN45_BITMASK;
- }
- #endif
- } else if (mode == INPUT_PULLUP) {
- if (pin == 0) {
- CORE_PIN0_DDRREG &= ~CORE_PIN0_BITMASK;
- CORE_PIN0_PORTREG |= CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_DDRREG &= ~CORE_PIN1_BITMASK;
- CORE_PIN1_PORTREG |= CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_DDRREG &= ~CORE_PIN2_BITMASK;
- CORE_PIN2_PORTREG |= CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_DDRREG &= ~CORE_PIN3_BITMASK;
- CORE_PIN3_PORTREG |= CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_DDRREG &= ~CORE_PIN4_BITMASK;
- CORE_PIN4_PORTREG |= CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_DDRREG &= ~CORE_PIN5_BITMASK;
- CORE_PIN5_PORTREG |= CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_DDRREG &= ~CORE_PIN6_BITMASK;
- CORE_PIN6_PORTREG |= CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_DDRREG &= ~CORE_PIN7_BITMASK;
- CORE_PIN7_PORTREG |= CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_DDRREG &= ~CORE_PIN8_BITMASK;
- CORE_PIN8_PORTREG |= CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_DDRREG &= ~CORE_PIN9_BITMASK;
- CORE_PIN9_PORTREG |= CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_DDRREG &= ~CORE_PIN10_BITMASK;
- CORE_PIN10_PORTREG |= CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_DDRREG &= ~CORE_PIN11_BITMASK;
- CORE_PIN11_PORTREG |= CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_DDRREG &= ~CORE_PIN12_BITMASK;
- CORE_PIN12_PORTREG |= CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_DDRREG &= ~CORE_PIN13_BITMASK;
- CORE_PIN13_PORTREG |= CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_DDRREG &= ~CORE_PIN14_BITMASK;
- CORE_PIN14_PORTREG |= CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_DDRREG &= ~CORE_PIN15_BITMASK;
- CORE_PIN15_PORTREG |= CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_DDRREG &= ~CORE_PIN16_BITMASK;
- CORE_PIN16_PORTREG |= CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_DDRREG &= ~CORE_PIN17_BITMASK;
- CORE_PIN17_PORTREG |= CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_DDRREG &= ~CORE_PIN18_BITMASK;
- CORE_PIN18_PORTREG |= CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_DDRREG &= ~CORE_PIN19_BITMASK;
- CORE_PIN19_PORTREG |= CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_DDRREG &= ~CORE_PIN20_BITMASK;
- CORE_PIN20_PORTREG |= CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_DDRREG &= ~CORE_PIN21_BITMASK;
- CORE_PIN21_PORTREG |= CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_DDRREG &= ~CORE_PIN22_BITMASK;
- CORE_PIN22_PORTREG |= CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_DDRREG &= ~CORE_PIN23_BITMASK;
- CORE_PIN23_PORTREG |= CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_DDRREG &= ~CORE_PIN24_BITMASK;
- CORE_PIN24_PORTREG |= CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_DDRREG &= ~CORE_PIN25_BITMASK;
- CORE_PIN25_PORTREG |= CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_DDRREG &= ~CORE_PIN26_BITMASK;
- CORE_PIN26_PORTREG |= CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_DDRREG &= ~CORE_PIN27_BITMASK;
- CORE_PIN27_PORTREG |= CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_DDRREG &= ~CORE_PIN28_BITMASK;
- CORE_PIN28_PORTREG |= CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_DDRREG &= ~CORE_PIN29_BITMASK;
- CORE_PIN29_PORTREG |= CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_DDRREG &= ~CORE_PIN30_BITMASK;
- CORE_PIN30_PORTREG |= CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_DDRREG &= ~CORE_PIN31_BITMASK;
- CORE_PIN31_PORTREG |= CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_DDRREG &= ~CORE_PIN32_BITMASK;
- CORE_PIN32_PORTREG |= CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_DDRREG &= ~CORE_PIN33_BITMASK;
- CORE_PIN33_PORTREG |= CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_DDRREG &= ~CORE_PIN34_BITMASK;
- CORE_PIN34_PORTREG |= CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_DDRREG &= ~CORE_PIN35_BITMASK;
- CORE_PIN35_PORTREG |= CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_DDRREG &= ~CORE_PIN36_BITMASK;
- CORE_PIN36_PORTREG |= CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_DDRREG &= ~CORE_PIN37_BITMASK;
- CORE_PIN37_PORTREG |= CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_DDRREG &= ~CORE_PIN38_BITMASK;
- CORE_PIN38_PORTREG |= CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_DDRREG &= ~CORE_PIN39_BITMASK;
- CORE_PIN39_PORTREG |= CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_DDRREG &= ~CORE_PIN40_BITMASK;
- CORE_PIN40_PORTREG |= CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_DDRREG &= ~CORE_PIN41_BITMASK;
- CORE_PIN41_PORTREG |= CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_DDRREG &= ~CORE_PIN42_BITMASK;
- CORE_PIN42_PORTREG |= CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_DDRREG &= ~CORE_PIN43_BITMASK;
- CORE_PIN43_PORTREG |= CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_DDRREG &= ~CORE_PIN44_BITMASK;
- CORE_PIN44_PORTREG |= CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_DDRREG &= ~CORE_PIN45_BITMASK;
- CORE_PIN45_PORTREG |= CORE_PIN45_BITMASK;
- }
- #endif
- } else {
- if (pin == 0) {
- CORE_PIN0_DDRREG &= ~CORE_PIN0_BITMASK;
- CORE_PIN0_PORTREG &= ~CORE_PIN0_BITMASK;
- } else if (pin == 1) {
- CORE_PIN1_DDRREG &= ~CORE_PIN1_BITMASK;
- CORE_PIN1_PORTREG &= ~CORE_PIN1_BITMASK;
- } else if (pin == 2) {
- CORE_PIN2_DDRREG &= ~CORE_PIN2_BITMASK;
- CORE_PIN2_PORTREG &= ~CORE_PIN2_BITMASK;
- } else if (pin == 3) {
- CORE_PIN3_DDRREG &= ~CORE_PIN3_BITMASK;
- CORE_PIN3_PORTREG &= ~CORE_PIN3_BITMASK;
- } else if (pin == 4) {
- CORE_PIN4_DDRREG &= ~CORE_PIN4_BITMASK;
- CORE_PIN4_PORTREG &= ~CORE_PIN4_BITMASK;
- } else if (pin == 5) {
- CORE_PIN5_DDRREG &= ~CORE_PIN5_BITMASK;
- CORE_PIN5_PORTREG &= ~CORE_PIN5_BITMASK;
- } else if (pin == 6) {
- CORE_PIN6_DDRREG &= ~CORE_PIN6_BITMASK;
- CORE_PIN6_PORTREG &= ~CORE_PIN6_BITMASK;
- } else if (pin == 7) {
- CORE_PIN7_DDRREG &= ~CORE_PIN7_BITMASK;
- CORE_PIN7_PORTREG &= ~CORE_PIN7_BITMASK;
- } else if (pin == 8) {
- CORE_PIN8_DDRREG &= ~CORE_PIN8_BITMASK;
- CORE_PIN8_PORTREG &= ~CORE_PIN8_BITMASK;
- } else if (pin == 9) {
- CORE_PIN9_DDRREG &= ~CORE_PIN9_BITMASK;
- CORE_PIN9_PORTREG &= ~CORE_PIN9_BITMASK;
- } else if (pin == 10) {
- CORE_PIN10_DDRREG &= ~CORE_PIN10_BITMASK;
- CORE_PIN10_PORTREG &= ~CORE_PIN10_BITMASK;
- } else if (pin == 11) {
- CORE_PIN11_DDRREG &= ~CORE_PIN11_BITMASK;
- CORE_PIN11_PORTREG &= ~CORE_PIN11_BITMASK;
- } else if (pin == 12) {
- CORE_PIN12_DDRREG &= ~CORE_PIN12_BITMASK;
- CORE_PIN12_PORTREG &= ~CORE_PIN12_BITMASK;
- } else if (pin == 13) {
- CORE_PIN13_DDRREG &= ~CORE_PIN13_BITMASK;
- CORE_PIN13_PORTREG &= ~CORE_PIN13_BITMASK;
- } else if (pin == 14) {
- CORE_PIN14_DDRREG &= ~CORE_PIN14_BITMASK;
- CORE_PIN14_PORTREG &= ~CORE_PIN14_BITMASK;
- } else if (pin == 15) {
- CORE_PIN15_DDRREG &= ~CORE_PIN15_BITMASK;
- CORE_PIN15_PORTREG &= ~CORE_PIN15_BITMASK;
- } else if (pin == 16) {
- CORE_PIN16_DDRREG &= ~CORE_PIN16_BITMASK;
- CORE_PIN16_PORTREG &= ~CORE_PIN16_BITMASK;
- } else if (pin == 17) {
- CORE_PIN17_DDRREG &= ~CORE_PIN17_BITMASK;
- CORE_PIN17_PORTREG &= ~CORE_PIN17_BITMASK;
- } else if (pin == 18) {
- CORE_PIN18_DDRREG &= ~CORE_PIN18_BITMASK;
- CORE_PIN18_PORTREG &= ~CORE_PIN18_BITMASK;
- } else if (pin == 19) {
- CORE_PIN19_DDRREG &= ~CORE_PIN19_BITMASK;
- CORE_PIN19_PORTREG &= ~CORE_PIN19_BITMASK;
- } else if (pin == 20) {
- CORE_PIN20_DDRREG &= ~CORE_PIN20_BITMASK;
- CORE_PIN20_PORTREG &= ~CORE_PIN20_BITMASK;
- }
- #if CORE_NUM_TOTAL_PINS > 21
- else if (pin == 21) {
- CORE_PIN21_DDRREG &= ~CORE_PIN21_BITMASK;
- CORE_PIN21_PORTREG &= ~CORE_PIN21_BITMASK;
- } else if (pin == 22) {
- CORE_PIN22_DDRREG &= ~CORE_PIN22_BITMASK;
- CORE_PIN22_PORTREG &= ~CORE_PIN22_BITMASK;
- } else if (pin == 23) {
- CORE_PIN23_DDRREG &= ~CORE_PIN23_BITMASK;
- CORE_PIN23_PORTREG &= ~CORE_PIN23_BITMASK;
- } else if (pin == 24) {
- CORE_PIN24_DDRREG &= ~CORE_PIN24_BITMASK;
- CORE_PIN24_PORTREG &= ~CORE_PIN24_BITMASK;
- }
- #endif
- #if CORE_NUM_TOTAL_PINS > 25
- else if (pin == 25) {
- CORE_PIN25_DDRREG &= ~CORE_PIN25_BITMASK;
- CORE_PIN25_PORTREG &= ~CORE_PIN25_BITMASK;
- } else if (pin == 26) {
- CORE_PIN26_DDRREG &= ~CORE_PIN26_BITMASK;
- CORE_PIN26_PORTREG &= ~CORE_PIN26_BITMASK;
- } else if (pin == 27) {
- CORE_PIN27_DDRREG &= ~CORE_PIN27_BITMASK;
- CORE_PIN27_PORTREG &= ~CORE_PIN27_BITMASK;
- } else if (pin == 28) {
- CORE_PIN28_DDRREG &= ~CORE_PIN28_BITMASK;
- CORE_PIN28_PORTREG &= ~CORE_PIN28_BITMASK;
- } else if (pin == 29) {
- CORE_PIN29_DDRREG &= ~CORE_PIN29_BITMASK;
- CORE_PIN29_PORTREG &= ~CORE_PIN29_BITMASK;
- } else if (pin == 30) {
- CORE_PIN30_DDRREG &= ~CORE_PIN30_BITMASK;
- CORE_PIN30_PORTREG &= ~CORE_PIN30_BITMASK;
- } else if (pin == 31) {
- CORE_PIN31_DDRREG &= ~CORE_PIN31_BITMASK;
- CORE_PIN31_PORTREG &= ~CORE_PIN31_BITMASK;
- } else if (pin == 32) {
- CORE_PIN32_DDRREG &= ~CORE_PIN32_BITMASK;
- CORE_PIN32_PORTREG &= ~CORE_PIN32_BITMASK;
- } else if (pin == 33) {
- CORE_PIN33_DDRREG &= ~CORE_PIN33_BITMASK;
- CORE_PIN33_PORTREG &= ~CORE_PIN33_BITMASK;
- } else if (pin == 34) {
- CORE_PIN34_DDRREG &= ~CORE_PIN34_BITMASK;
- CORE_PIN34_PORTREG &= ~CORE_PIN34_BITMASK;
- } else if (pin == 35) {
- CORE_PIN35_DDRREG &= ~CORE_PIN35_BITMASK;
- CORE_PIN35_PORTREG &= ~CORE_PIN35_BITMASK;
- } else if (pin == 36) {
- CORE_PIN36_DDRREG &= ~CORE_PIN36_BITMASK;
- CORE_PIN36_PORTREG &= ~CORE_PIN36_BITMASK;
- } else if (pin == 37) {
- CORE_PIN37_DDRREG &= ~CORE_PIN37_BITMASK;
- CORE_PIN37_PORTREG &= ~CORE_PIN37_BITMASK;
- } else if (pin == 38) {
- CORE_PIN38_DDRREG &= ~CORE_PIN38_BITMASK;
- CORE_PIN38_PORTREG &= ~CORE_PIN38_BITMASK;
- } else if (pin == 39) {
- CORE_PIN39_DDRREG &= ~CORE_PIN39_BITMASK;
- CORE_PIN39_PORTREG &= ~CORE_PIN39_BITMASK;
- } else if (pin == 40) {
- CORE_PIN40_DDRREG &= ~CORE_PIN40_BITMASK;
- CORE_PIN40_PORTREG &= ~CORE_PIN40_BITMASK;
- } else if (pin == 41) {
- CORE_PIN41_DDRREG &= ~CORE_PIN41_BITMASK;
- CORE_PIN41_PORTREG &= ~CORE_PIN41_BITMASK;
- } else if (pin == 42) {
- CORE_PIN42_DDRREG &= ~CORE_PIN42_BITMASK;
- CORE_PIN42_PORTREG &= ~CORE_PIN42_BITMASK;
- } else if (pin == 43) {
- CORE_PIN43_DDRREG &= ~CORE_PIN43_BITMASK;
- CORE_PIN43_PORTREG &= ~CORE_PIN43_BITMASK;
- } else if (pin == 44) {
- CORE_PIN44_DDRREG &= ~CORE_PIN44_BITMASK;
- CORE_PIN44_PORTREG &= ~CORE_PIN44_BITMASK;
- } else if (pin == 45) {
- CORE_PIN45_DDRREG &= ~CORE_PIN45_BITMASK;
- CORE_PIN45_PORTREG &= ~CORE_PIN45_BITMASK;
- }
- #endif
- }
- #if defined(__AVR_ATmega32U4__)
- if (mode == INPUT || mode == INPUT_PULLUP) {
- if (pin == 11) {
- DIDR2 &= ~0x02;
- } else if (pin == 12) {
- DIDR2 &= ~0x04;
- } else if (pin == 13) {
- DIDR2 &= ~0x08;
- } else if (pin == 14) {
- DIDR2 &= ~0x10;
- } else if (pin == 15) {
- DIDR2 &= ~0x20;
- } else if (pin == 16) {
- DIDR0 &= ~0x80;
- } else if (pin == 17) {
- DIDR0 &= ~0x40;
- } else if (pin == 18) {
- DIDR0 &= ~0x20;
- } else if (pin == 19) {
- DIDR0 &= ~0x10;
- } else if (pin == 20) {
- DIDR0 &= ~0x02;
- } else if (pin == 21) {
- DIDR0 &= ~0x01;
- } else if (pin == 22) {
- DIDR2 &= ~0x01;
- }
- }
- #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
- if (mode == INPUT || mode == INPUT_PULLUP) {
- if (pin == 38) {
- DIDR0 &= ~0x01;
- } else if (pin == 39) {
- DIDR0 &= ~0x02;
- } else if (pin == 40) {
- DIDR0 &= ~0x04;
- } else if (pin == 41) {
- DIDR0 &= ~0x08;
- } else if (pin == 42) {
- DIDR0 &= ~0x10;
- } else if (pin == 43) {
- DIDR0 &= ~0x20;
- } else if (pin == 44) {
- DIDR0 &= ~0x40;
- } else if (pin == 45) {
- DIDR0 &= ~0x80;
- }
- }
- #endif
- } else if (__builtin_constant_p(mode)) {
- if (mode == OUTPUT) {
- _pinMode_output(pin);
- } else if (mode == INPUT_PULLUP) {
- _pinMode_input_pullup(pin);
- } else {
- _pinMode_input(pin);
- }
- } else {
- _pinMode(pin, mode);
- }
- }
-
- extern void _init_Teensyduino_internal_(void);
- extern int analogRead(uint8_t);
-
- extern void _analogWrite(uint8_t pin, int val) __attribute__((noinline));
-
- static inline void analogWrite(uint8_t, int) __attribute__((always_inline, unused));
- static inline void analogWrite(uint8_t pin, int val)
- {
- if (__builtin_constant_p(pin)) {
- if (pin == CORE_OC0B_PIN) { // TIMER0B
- CORE_DDRREG(CORE_OC0B_PIN) |= CORE_BITMASK(CORE_OC0B_PIN);
- if (val) {
- OCR0B = val;
- _SFR_BYTE(TCCR0A) |= (1<<COM0B1);
- } else {
- CORE_PORTREG(CORE_OC0B_PIN) &= ~CORE_BITMASK(CORE_OC0B_PIN);
- _SFR_BYTE(TCCR0A) &= ~(1<<COM0B1);
- }
- } else if (pin == CORE_OC1A_PIN) { //TIMER1A
- CORE_DDRREG(CORE_OC1A_PIN) |= CORE_BITMASK(CORE_OC1A_PIN);
- OCR1A = val;
- TCCR1A |= (1<<COM1A1);
- } else if (pin == CORE_OC1B_PIN) { //TIMER1B
- CORE_DDRREG(CORE_OC1B_PIN) |= CORE_BITMASK(CORE_OC1B_PIN);
- OCR1B = val;
- TCCR1A |= (1<<COM1B1);
- } else if (pin == CORE_OC1C_PIN) { //TIMER1C
- CORE_DDRREG(CORE_OC1C_PIN) |= CORE_BITMASK(CORE_OC1C_PIN);
- OCR1C = val;
- TCCR1A |= (1<<COM1C1);
- }
- #if defined(__AVR_ATmega32U4__)
- else if (pin == CORE_OC3A_PIN) { //TIMER3A
- CORE_DDRREG(CORE_OC3A_PIN) |= CORE_BITMASK(CORE_OC3A_PIN);
- OCR3A = val;
- TCCR3A |= (1<<COM3A1);
- } else if (pin == CORE_OC4A_PIN) { //TIMER4A
- CORE_DDRREG(CORE_OC4A_PIN) |= CORE_BITMASK(CORE_OC4A_PIN);
- OCR4A = val;
- TCCR4A |= (1<<COM4A1);
- } else if (pin == CORE_OC4D_PIN) { //TIMER4D
- CORE_DDRREG(CORE_OC4D_PIN) |= CORE_BITMASK(CORE_OC4D_PIN);
- OCR4D = val;
- TCCR4C |= (1<<COM4D1);
- }
- #endif
- #if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
- else if (pin == CORE_OC2A_PIN) { //TIMER2A
- CORE_DDRREG(CORE_OC2A_PIN) |= CORE_BITMASK(CORE_OC2A_PIN);
- OCR2A = val;
- TCCR2A |= (1<<COM2A1);
- } else if (pin == CORE_OC2B_PIN) { //TIMER2B
- CORE_DDRREG(CORE_OC2B_PIN) |= CORE_BITMASK(CORE_OC2B_PIN);
- OCR2B = val;
- TCCR2A |= (1<<COM2B1);
- } else if (pin == CORE_OC3A_PIN) { //TIMER3A
- CORE_DDRREG(CORE_OC3A_PIN) |= CORE_BITMASK(CORE_OC3A_PIN);
- OCR3A = val;
- TCCR3A |= (1<<COM3A1);
- } else if (pin == CORE_OC3B_PIN) { //TIMER3B
- CORE_DDRREG(CORE_OC3B_PIN) |= CORE_BITMASK(CORE_OC3B_PIN);
- OCR3B = val;
- TCCR3A |= (1<<COM3B1);
- } else if (pin == CORE_OC3C_PIN) { //TIMER3C
- CORE_DDRREG(CORE_OC3C_PIN) |= CORE_BITMASK(CORE_OC3C_PIN);
- OCR3C = val;
- TCCR3A |= (1<<COM3C1);
- }
- #endif
- else {
- if (pin < CORE_NUM_TOTAL_PINS) {
- pinMode(pin, OUTPUT);
- if (val < 128) {
- digitalWrite(pin, LOW);
- } else {
- digitalWrite(pin, HIGH);
- }
- }
- }
- } else {
- _analogWrite(pin, val);
- }
- }
-
- static inline void shiftOut(uint8_t, uint8_t, uint8_t, uint8_t) __attribute__((always_inline, unused));
- extern void _shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value) __attribute__((noinline));
- extern void shiftOut_lsbFirst(uint8_t dataPin, uint8_t clockPin, uint8_t value) __attribute__((noinline));
- extern void shiftOut_msbFirst(uint8_t dataPin, uint8_t clockPin, uint8_t value) __attribute__((noinline));
-
- static inline void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value)
- {
- if (__builtin_constant_p(bitOrder)) {
- if (bitOrder == LSBFIRST) {
- shiftOut_lsbFirst(dataPin, clockPin, value);
- } else {
- shiftOut_msbFirst(dataPin, clockPin, value);
- }
- } else {
- _shiftOut(dataPin, clockPin, bitOrder, value);
- }
- }
-
- static inline uint8_t shiftIn(uint8_t, uint8_t, uint8_t) __attribute__((always_inline, unused));
- extern uint8_t _shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) __attribute__((noinline));
- extern uint8_t shiftIn_lsbFirst(uint8_t dataPin, uint8_t clockPin) __attribute__((noinline));
- extern uint8_t shiftIn_msbFirst(uint8_t dataPin, uint8_t clockPin) __attribute__((noinline));
-
- static inline uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder)
- {
- if (__builtin_constant_p(bitOrder)) {
- if (bitOrder == LSBFIRST) {
- return shiftIn_lsbFirst(dataPin, clockPin);
- } else {
- return shiftIn_msbFirst(dataPin, clockPin);
- }
- } else {
- return _shiftIn(dataPin, clockPin, bitOrder);
- }
- }
-
- void _reboot_Teensyduino_(void) __attribute__((noreturn));
- void _restart_Teensyduino_(void) __attribute__((noreturn));
-
-
- #if defined(__AVR_AT90USB162__)
- #define analogReference(mode)
- #else
- extern uint8_t w_analog_reference;
- static inline void analogReference(uint8_t mode)
- {
- w_analog_reference = (mode << 6);
- }
- #endif
-
- void yield(void);
-
- extern void delay(uint32_t);
-
- extern volatile uint32_t timer0_millis_count;
-
- static inline uint32_t millis(void) __attribute__((always_inline, unused));
- static inline uint32_t millis(void)
- {
- uint32_t out;
- asm volatile(
- "in __tmp_reg__, __SREG__" "\n\t"
- "cli" "\n\t"
- "lds %A0, timer0_millis_count" "\n\t"
- "lds %B0, timer0_millis_count+1" "\n\t"
- "lds %C0, timer0_millis_count+2" "\n\t"
- "lds %D0, timer0_millis_count+3" "\n\t"
- "out __SREG__, __tmp_reg__"
- : "=r" (out) : : "r0"
- );
- return out;
- }
-
- extern uint32_t _micros(void) __attribute__((noinline));
-
- static inline uint32_t micros(void) __attribute__((always_inline, unused));
- static inline uint32_t micros(void)
- {
- register uint32_t out asm("r22");
- asm volatile("call _micros" : "=d" (out) : : "r0");
- return out;
- }
-
-
- static inline void delayMicroseconds(uint16_t) __attribute__((always_inline, unused));
- static inline void delayMicroseconds(uint16_t usec)
- {
- if (__builtin_constant_p(usec)) {
- #if F_CPU == 16000000L
- uint16_t tmp = usec * 4;
- #elif F_CPU == 8000000L
- uint16_t tmp = usec * 2;
- #elif F_CPU == 4000000L
- uint16_t tmp = usec;
- #elif F_CPU == 2000000L
- uint16_t tmp = usec / 2;
- if (usec == 1) {
- asm volatile("rjmp L%=\nL%=:\n" ::);
- }
- #elif F_CPU == 1000000L
- uint16_t tmp = usec / 4;
- if (usec == 1) {
- asm volatile("nop\n");
- } else if (usec == 2) {
- asm volatile("rjmp L%=\nL%=:\n" ::);
- } else if (usec == 3) {
- asm volatile("rjmp L%=\nL%=:\n" ::);
- asm volatile("nop\n");
- }
- #else
- #error "Clock must be 16, 8, 4, 2 or 1 MHz"
- #endif
- if (tmp > 0) {
- if (tmp < 256) {
- uint8_t tmp2 = tmp;
- asm volatile(
- "L_%=_loop:" // 1 to load
- "subi %0, 1" "\n\t" // 1
- "nop" "\n\t" // 1
- "brne L_%=_loop" "\n\t" // 2 (1 on last)
- : "=d" (tmp2)
- : "0" (tmp2)
- );
- } else {
- asm volatile(
- "L_%=_loop:" // 2 to load
- "sbiw %A0, 1" "\n\t" // 2
- "brne L_%=_loop" "\n\t" // 2 (1 on last)
- : "=w" (tmp)
- : "0" (tmp)
- );
- }
- }
- } else {
- asm volatile(
- #if F_CPU == 16000000L
- "sbiw %A0, 2" "\n\t" // 2
- "brcs L_%=_end" "\n\t" // 1
- "breq L_%=_end" "\n\t" // 1
- "lsl %A0" "\n\t" // 1
- "rol %B0" "\n\t" // 1
- "lsl %A0" "\n\t" // 1
- "rol %B0" "\n\t" // 1 overhead: (8)/4 = 2us
- #elif F_CPU == 8000000L
- "sbiw %A0, 3" "\n\t" // 2
- "brcs L_%=_end" "\n\t" // 1
- "breq L_%=_end" "\n\t" // 1
- "lsl %A0" "\n\t" // 1
- "rol %B0" "\n\t" // 1 overhead: (6)/2 = 3 us
- #elif F_CPU == 4000000L
- "sbiw %A0, 4" "\n\t" // 2
- "brcs L_%=_end" "\n\t" // 1
- "breq L_%=_end" "\n\t" // 1 overhead: (4) = 4 us
- #elif F_CPU == 2000000L
- "sbiw %A0, 12" "\n\t" // 2
- "brcs L_%=_end" "\n\t" // 1
- "breq L_%=_end" "\n\t" // 1
- "lsr %B0" "\n\t" // 1
- "ror %A0" "\n\t" // 1 overhead: (6)*2 = 12 us
- #elif F_CPU == 1000000L
- "sbiw %A0, 32" "\n\t" // 2
- "brcs L_%=_end" "\n\t" // 1
- "breq L_%=_end" "\n\t" // 1
- "lsr %B0" "\n\t" // 1
- "ror %A0" "\n\t" // 1
- "lsr %B0" "\n\t" // 1
- "ror %A0" "\n\t" // 1 overhead: (8)*4 = 32 us
- #endif
- "L_%=_loop:"
- "sbiw %A0, 1" "\n\t" // 2
- "brne L_%=_loop" "\n\t" // 2
- "L_%=_end:"
- : "=w" (usec)
- : "0" (usec)
- );
- }
- }
-
-
-
-
- #ifdef __cplusplus
- } // extern "C"
- #endif
- #endif
|