// The SC1A register is used for both software and hardware trigger modes of operation. | // The SC1A register is used for both software and hardware trigger modes of operation. | ||||
#if defined(__MK20DX128__) | #if defined(__MK20DX128__) | ||||
static const uint8_t channel2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, | |||||
0, 19, 3, 21, 26, 22, 23 | |||||
static const uint8_t pin2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 21, // 0-13 -> A0-A13 | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 | |||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, // 24-33 are digital only | |||||
0, 19, 3, 21, // 34-37 are A10-A13 | |||||
26, // 38 is temp sensor | |||||
22, // 39 is vref | |||||
23 // 40 is unused analog pin | |||||
}; | }; | ||||
#elif defined(__MK20DX256__) | #elif defined(__MK20DX256__) | ||||
static const uint8_t channel2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, | |||||
0, 19, 3, 19+128, 26, 18+128, 23, | |||||
5+192, 5+128, 4+128, 6+128, 7+128, 4+192 | |||||
// +64 -> use muxA | |||||
// +128 -> use ADC1 | |||||
// A15 26 E1 ADC1_SE5a 5+64 | |||||
// A16 27 C9 ADC1_SE5b 5 | |||||
// A17 28 C8 ADC1_SE4b 4 | |||||
// A18 29 C10 ADC1_SE6b 6 | |||||
// A19 30 C11 ADC1_SE7b 7 | |||||
// A20 31 E0 ADC1_SE4a 4+64 | |||||
static const uint8_t pin2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 19+128, // 0-13 -> A0-A13 | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 | |||||
255, 255, // 24-25 are digital only | |||||
5+192, 5+128, 4+128, 6+128, 7+128, 4+192, // 26-31 are A15-A20 | |||||
255, 255, // 32-33 are digital only | |||||
0, 19, 3, 19+128, // 34-37 are A10-A13 | |||||
26, // 38 is temp sensor, | |||||
18+128, // 39 is vref | |||||
23 // 40 is A14 | |||||
}; | }; | ||||
#elif defined(__MKL26Z64__) | #elif defined(__MKL26Z64__) | ||||
static const uint8_t channel2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 11, | |||||
0, 4+64, 23, 26, 27 | |||||
static const uint8_t pin2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 11, 0, 4+64, 23, // 0-12 -> A0-A12 | |||||
255, // 13 is digital only (no A13 alias) | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 11, 0, 4+64, 23, // 14-26 are A0-A12 | |||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, // 27-37 unused | |||||
26, // 38=temperature | |||||
27 // 39=bandgap ref (PMC_REGSC |= PMC_REGSC_BGBE) | |||||
}; | }; | ||||
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | ||||
static const uint8_t channel2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // A0-A9 | |||||
3, 19+128, // A10-A11 | |||||
// A10 ADC1_DP0/ADC0_DP3 | |||||
// A11 ADC1_DM0/ADC0_DM3 | |||||
14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // A12-A20 | |||||
// A12 PTB10 ADC1_SE14 | |||||
// A13 PTB11 ADC1_SE15 | |||||
// A14 PTE24 ADC0_SE17 | |||||
// A15 PTE25 ADC0_SE18 | |||||
// A16 PTC8 ADC1_SE4b | |||||
// A17 PTC9 ADC1_SE5b | |||||
// A18 PTC10 ADC1_SE6b | |||||
// A19 PTC11 ADC1_SE7b | |||||
// A20 PTA17 ADC1_SE17 | |||||
23, 23+128, 26, 18+128, 10+128, 11+128 // A21-A22, temp sensor, vref A23, A24 | |||||
// A21 DAC0 ADC0_SE23 | |||||
// A22 DAC1 ADC1_SE23 | |||||
static const uint8_t pin2sc1a[] = { | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 | |||||
5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 | |||||
255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only | |||||
14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 | |||||
255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only | |||||
10+128, 11+128, // 49-50 are A23-A24 | |||||
255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only | |||||
255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only | |||||
3, 19+128, // 64-65 are A10-A11 | |||||
23, 23+128,// 66-68 are A21-A22 (DAC pins) | |||||
1, 1+128, // 69-70 are A25-A26 (unused USB host port on Teensy 3.5) | |||||
26, // 71 is Temperature Sensor | |||||
18+128 // 72 is Vref | |||||
}; | }; | ||||
#endif | #endif | ||||
int analogRead(uint8_t pin) | int analogRead(uint8_t pin) | ||||
{ | { | ||||
int result; | int result; | ||||
uint8_t index, channel; | |||||
uint8_t channel; | |||||
//serial_phex(pin); | //serial_phex(pin); | ||||
//serial_print(" "); | //serial_print(" "); | ||||
#if defined(__MK20DX128__) | |||||
if (pin <= 13) { | |||||
index = pin; // 0-13 refer to A0-A13 | |||||
} else if (pin <= 23) { | |||||
index = pin - 14; // 14-23 are A0-A9 | |||||
} else if (pin >= 34 && pin <= 40) { | |||||
index = pin - 24; // 34-37 are A10-A13, 38 is temp sensor, | |||||
// 39 is vref, 40 is unused analog pin | |||||
} else { | |||||
return 0; | |||||
} | |||||
#elif defined(__MK20DX256__) | |||||
if (pin <= 13) { | |||||
index = pin; // 0-13 refer to A0-A13 | |||||
} else if (pin <= 23) { | |||||
index = pin - 14; // 14-23 are A0-A9 | |||||
} else if (pin >= 26 && pin <= 31) { | |||||
index = pin - 9; // 26-31 are A15-A20 | |||||
} else if (pin >= 34 && pin <= 40) { | |||||
index = pin - 24; // 34-37 are A10-A13, 38 is temp sensor, | |||||
// 39 is vref, 40 is A14 | |||||
} else { | |||||
return 0; | |||||
} | |||||
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||||
if (pin <= 13) { | |||||
index = pin; // 0-13 refer to A0-A13 | |||||
} else if (pin <= 23) { | |||||
index = pin - 14; // 14-23 are A0-A9 | |||||
} else if (pin >= 31 && pin <= 39) { | |||||
index = pin - 19; // 31-39 are A12-A20 | |||||
} else if (pin >= 40 && pin <= 41) { | |||||
index = pin - 30; // 40-41 are A10-A11 | |||||
} else if (pin >= 42 && pin <= 45) { | |||||
index = pin - 21; // 42-43 are A21-A22 | |||||
} else if (pin >= 49 && pin <= 50) { | |||||
index = pin - 24; // 49 and 50 are A23-A24 | |||||
} else { | |||||
return 0; | |||||
} | |||||
#elif defined(__MKL26Z64__) | |||||
if (pin <= 12) { | |||||
index = pin; // 0-12 refer to A0-A12 | |||||
} else if (pin >= 14 && pin <= 26) { | |||||
index = pin - 14; // 14-26 are A0-A12 | |||||
} else if (pin >= 38 && pin <= 39) { | |||||
index = pin - 25; // 38=temperature | |||||
// 39=bandgap ref (PMC_REGSC |= PMC_REGSC_BGBE) | |||||
} else { | |||||
return 0; | |||||
} | |||||
#endif | |||||
//serial_phex(index); | |||||
//serial_print(" "); | |||||
channel = channel2sc1a[index]; | |||||
//serial_phex(channel); | |||||
//serial_print(" "); | |||||
if (pin >= sizeof(pin2sc1a)) return 0; | |||||
channel = pin2sc1a[pin]; | |||||
if (channel == 255) return 0; | |||||
//serial_print("analogRead"); | |||||
//return 0; | |||||
if (calibrating) wait_for_cal(); | if (calibrating) wait_for_cal(); | ||||
//pin = 5; // PTD1/SE5b, pin 14, analog 0 | |||||
#ifdef HAS_KINETIS_ADC1 | #ifdef HAS_KINETIS_ADC1 | ||||
if (channel & 0x80) goto beginADC1; | if (channel & 0x80) goto beginADC1; |
#define PIN_A7 (21) | #define PIN_A7 (21) | ||||
#define PIN_A8 (22) | #define PIN_A8 (22) | ||||
#define PIN_A9 (23) | #define PIN_A9 (23) | ||||
const static uint8_t A0 = 14; | |||||
const static uint8_t A1 = 15; | |||||
const static uint8_t A2 = 16; | |||||
const static uint8_t A3 = 17; | |||||
const static uint8_t A4 = 18; | |||||
const static uint8_t A5 = 19; | |||||
const static uint8_t A6 = 20; | |||||
const static uint8_t A7 = 21; | |||||
const static uint8_t A8 = 22; | |||||
const static uint8_t A9 = 23; | |||||
const static uint8_t A0 = PIN_A0; | |||||
const static uint8_t A1 = PIN_A1; | |||||
const static uint8_t A2 = PIN_A2; | |||||
const static uint8_t A3 = PIN_A3; | |||||
const static uint8_t A4 = PIN_A4; | |||||
const static uint8_t A5 = PIN_A5; | |||||
const static uint8_t A6 = PIN_A6; | |||||
const static uint8_t A7 = PIN_A7; | |||||
const static uint8_t A8 = PIN_A8; | |||||
const static uint8_t A9 = PIN_A9; | |||||
#if defined(__MK20DX128__) | #if defined(__MK20DX128__) | ||||
#define PIN_A10 (34) | #define PIN_A10 (34) | ||||
#define PIN_A11 (35) | #define PIN_A11 (35) | ||||
#define PIN_A12 (36) | #define PIN_A12 (36) | ||||
#define PIN_A13 (37) | #define PIN_A13 (37) | ||||
const static uint8_t A10 = 34; | |||||
const static uint8_t A11 = 35; | |||||
const static uint8_t A12 = 36; | |||||
const static uint8_t A13 = 37; | |||||
const static uint8_t A10 = PIN_A10; | |||||
const static uint8_t A11 = PIN_A11; | |||||
const static uint8_t A12 = PIN_A12; | |||||
const static uint8_t A13 = PIN_A13; | |||||
#elif defined(__MK20DX256__) | #elif defined(__MK20DX256__) | ||||
#define PIN_A10 (34) | #define PIN_A10 (34) | ||||
#define PIN_A18 (29) | #define PIN_A18 (29) | ||||
#define PIN_A19 (30) | #define PIN_A19 (30) | ||||
#define PIN_A20 (31) | #define PIN_A20 (31) | ||||
const static uint8_t A10 = 34; | |||||
const static uint8_t A11 = 35; | |||||
const static uint8_t A12 = 36; | |||||
const static uint8_t A13 = 37; | |||||
const static uint8_t A14 = 40; | |||||
const static uint8_t A15 = 26; | |||||
const static uint8_t A16 = 27; | |||||
const static uint8_t A17 = 28; | |||||
const static uint8_t A18 = 29; | |||||
const static uint8_t A19 = 30; | |||||
const static uint8_t A20 = 31; | |||||
const static uint8_t A10 = PIN_A10; | |||||
const static uint8_t A11 = PIN_A11; | |||||
const static uint8_t A12 = PIN_A12; | |||||
const static uint8_t A13 = PIN_A13; | |||||
const static uint8_t A14 = PIN_A14; | |||||
const static uint8_t A15 = PIN_A15; | |||||
const static uint8_t A16 = PIN_A16; | |||||
const static uint8_t A17 = PIN_A17; | |||||
const static uint8_t A18 = PIN_A18; | |||||
const static uint8_t A19 = PIN_A19; | |||||
const static uint8_t A20 = PIN_A20; | |||||
#elif defined(__MKL26Z64__) | #elif defined(__MKL26Z64__) | ||||
#define PIN_A10 (24) | #define PIN_A10 (24) | ||||
#define PIN_A11 (25) | #define PIN_A11 (25) | ||||
#define PIN_A12 (26) | #define PIN_A12 (26) | ||||
const static uint8_t A10 = 24; | |||||
const static uint8_t A11 = 25; | |||||
const static uint8_t A12 = 26; | |||||
const static uint8_t A10 = PIN_A10; | |||||
const static uint8_t A11 = PIN_A11; | |||||
const static uint8_t A12 = PIN_A12; | |||||
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | ||||
#define PIN_A10 (40) | |||||
#define PIN_A11 (41) | |||||
#define PIN_A10 (64) | |||||
#define PIN_A11 (65) | |||||
#define PIN_A12 (31) | #define PIN_A12 (31) | ||||
#define PIN_A13 (32) | #define PIN_A13 (32) | ||||
#define PIN_A14 (33) | #define PIN_A14 (33) | ||||
#define PIN_A18 (37) | #define PIN_A18 (37) | ||||
#define PIN_A19 (38) | #define PIN_A19 (38) | ||||
#define PIN_A20 (39) | #define PIN_A20 (39) | ||||
#define PIN_A21 (42) | |||||
#define PIN_A22 (43) | |||||
#define PIN_A21 (66) | |||||
#define PIN_A22 (67) | |||||
#define PIN_A23 (49) | #define PIN_A23 (49) | ||||
#define PIN_A24 (50) | #define PIN_A24 (50) | ||||
const static uint8_t A10 = 40; | |||||
const static uint8_t A11 = 41; | |||||
const static uint8_t A12 = 31; | |||||
const static uint8_t A13 = 32; | |||||
const static uint8_t A14 = 33; | |||||
const static uint8_t A15 = 34; | |||||
const static uint8_t A16 = 35; | |||||
const static uint8_t A17 = 36; | |||||
const static uint8_t A18 = 37; | |||||
const static uint8_t A19 = 38; | |||||
const static uint8_t A20 = 39; | |||||
const static uint8_t A21 = 42; | |||||
const static uint8_t A22 = 43; | |||||
const static uint8_t A23 = 49; | |||||
const static uint8_t A24 = 50; | |||||
#define PIN_A25 (68) | |||||
#define PIN_A26 (69) | |||||
const static uint8_t A10 = PIN_A10; | |||||
const static uint8_t A11 = PIN_A11; | |||||
const static uint8_t A12 = PIN_A12; | |||||
const static uint8_t A13 = PIN_A13; | |||||
const static uint8_t A14 = PIN_A14; | |||||
const static uint8_t A15 = PIN_A15; | |||||
const static uint8_t A16 = PIN_A16; | |||||
const static uint8_t A17 = PIN_A17; | |||||
const static uint8_t A18 = PIN_A18; | |||||
const static uint8_t A19 = PIN_A19; | |||||
const static uint8_t A20 = PIN_A20; | |||||
const static uint8_t A21 = PIN_A21; | |||||
const static uint8_t A22 = PIN_A22; | |||||
const static uint8_t A23 = PIN_A23; | |||||
const static uint8_t A24 = PIN_A24; | |||||
const static uint8_t A25 = PIN_A25; | |||||
const static uint8_t A26 = PIN_A26; | |||||
#endif | #endif | ||||
#define LED_BUILTIN (13) | #define LED_BUILTIN (13) | ||||
#define digitalPinHasPWM(p) ((p) == 3 || (p) == 4 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 16 || (p) == 17 || (p) == 20 || (p) == 22 || (p) == 23) | #define digitalPinHasPWM(p) ((p) == 3 || (p) == 4 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 16 || (p) == 17 || (p) == 20 || (p) == 22 || (p) == 23) | ||||
#define digitalPinToInterrupt(p) ((((p) >= 2 && (p) <= 15) || ((p) >= 20 && (p) <= 23)) ? (p) : -1) | #define digitalPinToInterrupt(p) ((((p) >= 2 && (p) <= 15) || ((p) >= 20 && (p) <= 23)) ? (p) : -1) | ||||
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | ||||
// TODO analogInputToDigitalPin needs update... | |||||
#define analogInputToDigitalPin(p) (((p) <= 9) ? (p) + 14 : (((p) >= 12 && (p) <= 20) ? (p) + 19 : -1)) | #define analogInputToDigitalPin(p) (((p) <= 9) ? (p) + 14 : (((p) >= 12 && (p) <= 20) ? (p) + 19 : -1)) | ||||
#define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 10) || (p) == 14 || ((p) >= 20 && (p) <= 23) || (p) == 29 || (p) == 30 || ((p) >= 35 && (p) <= 38)) | #define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 10) || (p) == 14 || ((p) >= 20 && (p) <= 23) || (p) == 29 || (p) == 30 || ((p) >= 35 && (p) <= 38)) | ||||
#define digitalPinToInterrupt(p) ((p) < NUM_DIGITAL_PINS ? (p) : -1) | #define digitalPinToInterrupt(p) ((p) < NUM_DIGITAL_PINS ? (p) : -1) | ||||
#define SERIAL_PORT_HARDWARE_OPEN Serial1 | #define SERIAL_PORT_HARDWARE_OPEN Serial1 | ||||
#define SERIAL_PORT_HARDWARE_OPEN1 Serial2 | #define SERIAL_PORT_HARDWARE_OPEN1 Serial2 | ||||
#define SERIAL_PORT_HARDWARE_OPEN2 Serial3 | #define SERIAL_PORT_HARDWARE_OPEN2 Serial3 | ||||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||||
#define SERIAL_PORT_HARDWARE3 Serial4 | |||||
#define SERIAL_PORT_HARDWARE4 Serial5 | |||||
#define SERIAL_PORT_HARDWARE5 Serial6 | |||||
#define SERIAL_PORT_HARDWARE_OPEN3 Serial4 | |||||
#define SERIAL_PORT_HARDWARE_OPEN4 Serial5 | |||||
#define SERIAL_PORT_HARDWARE_OPEN5 Serial6 | |||||
#endif | |||||
#define SerialUSB Serial | #define SerialUSB Serial | ||||