static inline void analogWriteResolution(uint32_t bits) { analogWriteRes(bits); } | static inline void analogWriteResolution(uint32_t bits) { analogWriteRes(bits); } | ||||
void analogWriteFrequency(uint8_t pin, uint32_t frequency); | void analogWriteFrequency(uint8_t pin, uint32_t frequency); | ||||
void analogWriteDAC0(int val); | 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 attachInterrupt(uint8_t pin, void (*function)(void), int mode); | ||||
void detachInterrupt(uint8_t pin); | void detachInterrupt(uint8_t pin); | ||||
void _init_Teensyduino_internal_(void); | void _init_Teensyduino_internal_(void); |
#include <stdint.h> | #include <stdint.h> | ||||
#ifdef __cplusplus | |||||
#define BEGIN_ENUM(NAME) enum name { | |||||
#define END_ENUM(NAME) }; | |||||
#else | |||||
#define BEGIN_ENUM(NAME) typedef enum { | |||||
#define END_ENUM(NAME) } name; | |||||
#endif | |||||
// Teensy 3.0 | // Teensy 3.0 | ||||
#if defined(__MK20DX128__) | #if defined(__MK20DX128__) | ||||
BEGIN_ENUM(IRQ_NUMBER_t) | |||||
enum IRQ_NUMBER_t { | |||||
IRQ_DMA_CH0 = 0, | IRQ_DMA_CH0 = 0, | ||||
IRQ_DMA_CH1 = 1, | IRQ_DMA_CH1 = 1, | ||||
IRQ_DMA_CH2 = 2, | IRQ_DMA_CH2 = 2, | ||||
IRQ_PORTD = 43, | IRQ_PORTD = 43, | ||||
IRQ_PORTE = 44, | IRQ_PORTE = 44, | ||||
IRQ_SOFTWARE = 45 | IRQ_SOFTWARE = 45 | ||||
END_ENUM(IRQ_NUMBER_t) | |||||
}; | |||||
#define NVIC_NUM_INTERRUPTS 46 | #define NVIC_NUM_INTERRUPTS 46 | ||||
#define DMA_NUM_CHANNELS 4 | #define DMA_NUM_CHANNELS 4 | ||||
#define KINETISK_UART0 | #define KINETISK_UART0 | ||||
// Teensy 3.1 | // Teensy 3.1 | ||||
#elif defined(__MK20DX256__) | #elif defined(__MK20DX256__) | ||||
BEGIN_ENUM(IRQ_NUMBER_t) | |||||
enum IRQ_NUMBER_t { | |||||
IRQ_DMA_CH0 = 0, | IRQ_DMA_CH0 = 0, | ||||
IRQ_DMA_CH1 = 1, | IRQ_DMA_CH1 = 1, | ||||
IRQ_DMA_CH2 = 2, | IRQ_DMA_CH2 = 2, | ||||
IRQ_PORTD = 90, | IRQ_PORTD = 90, | ||||
IRQ_PORTE = 91, | IRQ_PORTE = 91, | ||||
IRQ_SOFTWARE = 94 | IRQ_SOFTWARE = 94 | ||||
END_ENUM(IRQ_NUMBER_t) | |||||
}; | |||||
#define NVIC_NUM_INTERRUPTS 95 | #define NVIC_NUM_INTERRUPTS 95 | ||||
#define DMA_NUM_CHANNELS 16 | #define DMA_NUM_CHANNELS 16 | ||||
#define KINETISK_UART0 | #define KINETISK_UART0 |
// fast interrupts will still be serviced quickly? | // fast interrupts will still be serviced quickly? | ||||
} | } | ||||
void attachInterruptVector(enum IRQ_NUMBER_t irq, void (*function)(void)) | |||||
{ | |||||
_VectorsRam[irq + 16] = function; | |||||
} | |||||
void attachInterrupt(uint8_t pin, void (*function)(void), int mode) | void attachInterrupt(uint8_t pin, void (*function)(void), int mode) | ||||
{ | { | ||||
volatile uint32_t *config; | volatile uint32_t *config; |