* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
- * 1. The above copyright notice and this permission notice shall be
+ * 1. The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
- * 2. If the Software is incorporated into a build system that allows
+ * 2. If the Software is incorporated into a build system that allows
* selection among a list of target devices, then similar target
* devices manufactured by PJRC.COM must be included in the list of
* target devices and selectable in the same manner.
#ifndef _core_pins_h_
#define _core_pins_h_
-#include "mk20dx128.h"
+#include "kinetis.h"
#include "pins_arduino.h"
// Pin Arduino
// 0 B16 RXD
// 1 B17 TXD
-// 2 D0
-// 3 A12 FTM1_CH0
-// 4 A13 FTM1_CH1
+// 2 D0
+// 3 A12 FTM1_CH0
+// 4 A13 FTM1_CH1
// 5 D7 FTM0_CH7 OC0B/T1
// 6 D4 FTM0_CH4 OC0A
-// 7 D2
+// 7 D2
// 8 D3 ICP1
// 9 C3 FTM0_CH2 OC1A
// 10 C4 FTM0_CH3 SS/OC1B
// 11 C6 MOSI/OC2A
// 12 C7 MISO
-// 13 C5 SCK
-// 14 D1
-// 15 C0
-// 16 B0 (FTM1_CH0)
-// 17 B1 (FTM1_CH1)
+// 13 C5 SCK
+// 14 D1
+// 15 C0
+// 16 B0 (FTM1_CH0)
+// 17 B1 (FTM1_CH1)
// 18 B3 SDA
// 19 B2 SCL
-// 20 D5 FTM0_CH5
-// 21 D6 FTM0_CH6
-// 22 C1 FTM0_CH0
-// 23 C2 FTM0_CH1
-// 24 A5 (FTM0_CH2)
+// 20 D5 FTM0_CH5
+// 21 D6 FTM0_CH6
+// 22 C1 FTM0_CH0
+// 23 C2 FTM0_CH1
+// 24 A5 (FTM0_CH2)
// 25 B19
// 26 E1
// 27 C9
static inline void analogWriteResolution(uint32_t bits) { analogWriteRes(bits); }
void analogWriteFrequency(uint8_t pin, uint32_t frequency);
void analogWriteDAC0(int val);
+#ifdef __cplusplus
+void attachInterruptVector(IRQ_NUMBER_t irq, void (*function)(void));
+#else
+void attachInterruptVector(enum IRQ_NUMBER_t irq, void (*function)(void));
+#endif
void attachInterrupt(uint8_t pin, void (*function)(void), int mode);
void detachInterrupt(uint8_t pin);
void _init_Teensyduino_internal_(void);
static inline void delayMicroseconds(uint32_t) __attribute__((always_inline, unused));
static inline void delayMicroseconds(uint32_t usec)
{
-#if F_CPU == 96000000
+#if F_CPU == 168000000
+ uint32_t n = usec * 56;
+#elif F_CPU == 144000000
+ uint32_t n = usec * 48;
+#elif F_CPU == 120000000
+ uint32_t n = usec * 40;
+#elif F_CPU == 96000000
uint32_t n = usec << 5;
+#elif F_CPU == 72000000
+ uint32_t n = usec * 24;
#elif F_CPU == 48000000
uint32_t n = usec << 4;
#elif F_CPU == 24000000
uint32_t n = usec << 3;
+#elif F_CPU == 16000000
+ uint32_t n = usec << 2;
+#elif F_CPU == 8000000
+ uint32_t n = usec << 1;
+#elif F_CPU == 4000000
+ uint32_t n = usec;
+#elif F_CPU == 2000000
+ uint32_t n = usec >> 1;
#endif
- if (usec == 0) return;
- asm volatile(
+ // changed because a delay of 1 micro Sec @ 2MHz will be 0
+ if (n == 0) return;
+ __asm__ volatile(
"L_%=_delayMicroseconds:" "\n\t"
+#if F_CPU < 24000000
+ "nop" "\n\t"
+#endif
"subs %0, #1" "\n\t"
"bne L_%=_delayMicroseconds" "\n"
: "+r" (n) :