| #define _kinetis_h_ | #define _kinetis_h_ | ||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| extern "C" { | |||||
| #define BEGIN_ENUM(NAME) enum name { | |||||
| #define END_ENUM(NAME) }; | |||||
| #else | |||||
| #define BEGIN_ENUM(NAME) typedef enum { | |||||
| #define END_ENUM(NAME) } name; | |||||
| #endif | #endif | ||||
| // Teensy 3.0 | // Teensy 3.0 | ||||
| #if defined(__MK20DX128__) | #if defined(__MK20DX128__) | ||||
| enum IRQ_NUMBER_t { | |||||
| BEGIN_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__) | ||||
| enum IRQ_NUMBER_t { | |||||
| BEGIN_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 | ||||
| #define USBDCD_TIMER2 (*(volatile uint32_t *)0x40035018) // TIMER2 register | #define USBDCD_TIMER2 (*(volatile uint32_t *)0x40035018) // TIMER2 register | ||||
| // Chapter 43: SPI (DSPI) | // Chapter 43: SPI (DSPI) | ||||
| typedef struct { | |||||
| volatile uint32_t MCR; // 0 | |||||
| volatile uint32_t unused1;// 4 | |||||
| volatile uint32_t TCR; // 8 | |||||
| volatile uint32_t CTAR0; // c | |||||
| volatile uint32_t CTAR1; // 10 | |||||
| volatile uint32_t CTAR2; // 14 | |||||
| volatile uint32_t CTAR3; // 18 | |||||
| volatile uint32_t CTAR4; // 1c | |||||
| volatile uint32_t CTAR5; // 20 | |||||
| volatile uint32_t CTAR6; // 24 | |||||
| volatile uint32_t CTAR7; // 28 | |||||
| volatile uint32_t SR; // 2c | |||||
| volatile uint32_t RSER; // 30 | |||||
| volatile uint32_t PUSHR; // 34 | |||||
| volatile uint32_t POPR; // 38 | |||||
| volatile uint32_t TXFR[16]; // 3c | |||||
| volatile uint32_t RXFR[16]; // 7c | |||||
| } KINETISK_SPI_t; | |||||
| #define SPI0 (*(KINETISK_SPI_t *)0x4002C000) | |||||
| #define SPI0_MCR (*(volatile uint32_t *)0x4002C000) // DSPI Module Configuration Register | #define SPI0_MCR (*(volatile uint32_t *)0x4002C000) // DSPI Module Configuration Register | ||||
| #define SPI_MCR_MSTR ((uint32_t)0x80000000) // Master/Slave Mode Select | #define SPI_MCR_MSTR ((uint32_t)0x80000000) // Master/Slave Mode Select | ||||
| #define SPI_MCR_CONT_SCKE ((uint32_t)0x40000000) // | #define SPI_MCR_CONT_SCKE ((uint32_t)0x40000000) // | ||||
| #define SPI0_RXFR1 (*(volatile uint32_t *)0x4002C080) // DSPI Receive FIFO Registers | #define SPI0_RXFR1 (*(volatile uint32_t *)0x4002C080) // DSPI Receive FIFO Registers | ||||
| #define SPI0_RXFR2 (*(volatile uint32_t *)0x4002C084) // DSPI Receive FIFO Registers | #define SPI0_RXFR2 (*(volatile uint32_t *)0x4002C084) // DSPI Receive FIFO Registers | ||||
| #define SPI0_RXFR3 (*(volatile uint32_t *)0x4002C088) // DSPI Receive FIFO Registers | #define SPI0_RXFR3 (*(volatile uint32_t *)0x4002C088) // DSPI Receive FIFO Registers | ||||
| typedef struct { | |||||
| volatile uint32_t MCR; // 0 | |||||
| volatile uint32_t unused1;// 4 | |||||
| volatile uint32_t TCR; // 8 | |||||
| volatile uint32_t CTAR0; // c | |||||
| volatile uint32_t CTAR1; // 10 | |||||
| volatile uint32_t CTAR2; // 14 | |||||
| volatile uint32_t CTAR3; // 18 | |||||
| volatile uint32_t CTAR4; // 1c | |||||
| volatile uint32_t CTAR5; // 20 | |||||
| volatile uint32_t CTAR6; // 24 | |||||
| volatile uint32_t CTAR7; // 28 | |||||
| volatile uint32_t SR; // 2c | |||||
| volatile uint32_t RSER; // 30 | |||||
| volatile uint32_t PUSHR; // 34 | |||||
| volatile uint32_t POPR; // 38 | |||||
| volatile uint32_t TXFR[16]; // 3c | |||||
| volatile uint32_t RXFR[16]; // 7c | |||||
| } SPI_t; | |||||
| #define SPI0 (*(SPI_t *)0x4002C000) | |||||
| // Chapter 44: Inter-Integrated Circuit (I2C) | // Chapter 44: Inter-Integrated Circuit (I2C) | ||||
| #define I2C0_A1 (*(volatile uint8_t *)0x40066000) // I2C Address Register 1 | #define I2C0_A1 (*(volatile uint8_t *)0x40066000) // I2C Address Register 1 | ||||
| #define ARM_DWT_CTRL_CYCCNTENA (1 << 0) // Enable cycle count | #define ARM_DWT_CTRL_CYCCNTENA (1 << 0) // Enable cycle count | ||||
| #define ARM_DWT_CYCCNT (*(volatile uint32_t *)0xE0001004) // Cycle count register | #define ARM_DWT_CYCCNT (*(volatile uint32_t *)0xE0001004) // Cycle count register | ||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| extern int nvic_execution_priority(void); | extern int nvic_execution_priority(void); | ||||
| extern void nmi_isr(void); | extern void nmi_isr(void); | ||||
| extern void porte_isr(void); | extern void porte_isr(void); | ||||
| extern void software_isr(void); | extern void software_isr(void); | ||||
| extern void (* _VectorsRam[NVIC_NUM_INTERRUPTS+16])(void); | extern void (* _VectorsRam[NVIC_NUM_INTERRUPTS+16])(void); | ||||
| extern void (* const _VectorsFlash[NVIC_NUM_INTERRUPTS+16])(void); | extern void (* const _VectorsFlash[NVIC_NUM_INTERRUPTS+16])(void); | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif | #endif | ||||
| #undef BEGIN_ENUM | |||||
| #undef END_ENUM | |||||
| #endif | #endif |