@@ -358,48 +358,51 @@ void analogReadAveraging(unsigned int num) | |||
// The SC1A register is used for both software and hardware trigger modes of operation. | |||
#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__) | |||
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__) | |||
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__) | |||
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 | |||
@@ -414,76 +417,16 @@ static volatile uint8_t analogReadBusyADC1 = 0; | |||
int analogRead(uint8_t pin) | |||
{ | |||
int result; | |||
uint8_t index, channel; | |||
uint8_t channel; | |||
//serial_phex(pin); | |||
//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(); | |||
//pin = 5; // PTD1/SE5b, pin 14, analog 0 | |||
#ifdef HAS_KINETIS_ADC1 | |||
if (channel & 0x80) goto beginADC1; |
@@ -44,26 +44,26 @@ | |||
#define PIN_A7 (21) | |||
#define PIN_A8 (22) | |||
#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__) | |||
#define PIN_A10 (34) | |||
#define PIN_A11 (35) | |||
#define PIN_A12 (36) | |||
#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__) | |||
#define PIN_A10 (34) | |||
@@ -77,29 +77,29 @@ const static uint8_t A13 = 37; | |||
#define PIN_A18 (29) | |||
#define PIN_A19 (30) | |||
#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__) | |||
#define PIN_A10 (24) | |||
#define PIN_A11 (25) | |||
#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__) | |||
#define PIN_A10 (40) | |||
#define PIN_A11 (41) | |||
#define PIN_A10 (64) | |||
#define PIN_A11 (65) | |||
#define PIN_A12 (31) | |||
#define PIN_A13 (32) | |||
#define PIN_A14 (33) | |||
@@ -109,25 +109,29 @@ const static uint8_t A12 = 26; | |||
#define PIN_A18 (37) | |||
#define PIN_A19 (38) | |||
#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_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 | |||
#define LED_BUILTIN (13) | |||
@@ -170,6 +174,7 @@ const static uint8_t SCL = 19; | |||
#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) | |||
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||
// TODO analogInputToDigitalPin needs update... | |||
#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 digitalPinToInterrupt(p) ((p) < NUM_DIGITAL_PINS ? (p) : -1) | |||
@@ -264,6 +269,14 @@ static inline uint8_t digitalPinToTimer(uint8_t pin) | |||
#define SERIAL_PORT_HARDWARE_OPEN Serial1 | |||
#define SERIAL_PORT_HARDWARE_OPEN1 Serial2 | |||
#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 | |||