| @@ -89,6 +89,7 @@ enum IRQ_NUMBER_t { | |||
| #define HAS_KINETISK_UART0_FIFO | |||
| #define HAS_KINETISK_UART1 | |||
| #define HAS_KINETISK_UART2 | |||
| #define HAS_KINETIS_I2C0 | |||
| // Teensy 3.1 | |||
| #elif defined(__MK20DX256__) | |||
| @@ -171,6 +172,8 @@ enum IRQ_NUMBER_t { | |||
| #define HAS_KINETISK_UART1 | |||
| #define HAS_KINETISK_UART1_FIFO | |||
| #define HAS_KINETISK_UART2 | |||
| #define HAS_KINETIS_I2C0 | |||
| #define HAS_KINETIS_I2C1 | |||
| #elif defined(__MKL26Z64__) | |||
| enum IRQ_NUMBER_t { | |||
| @@ -212,6 +215,10 @@ enum IRQ_NUMBER_t { | |||
| #define HAS_KINETISL_UART0 | |||
| #define HAS_KINETISL_UART1 | |||
| #define HAS_KINETISL_UART2 | |||
| #define HAS_KINETIS_I2C0 | |||
| #define HAS_KINETIS_I2C0_STOPF | |||
| #define HAS_KINETIS_I2C1 | |||
| #define HAS_KINETIS_I2C1_STOPF | |||
| #endif // end of board-specific definitions | |||
| @@ -2128,7 +2135,7 @@ enum IRQ_NUMBER_t { | |||
| #if defined(KINETISK) | |||
| // Chapter 43: SPI (DSPI) | |||
| typedef struct __attribute__((packed)) { | |||
| typedef struct { | |||
| volatile uint32_t MCR; // 0 | |||
| volatile uint32_t unused1;// 4 | |||
| volatile uint32_t TCR; // 8 | |||
| @@ -2148,7 +2155,7 @@ typedef struct __attribute__((packed)) { | |||
| volatile uint32_t RXFR[16]; // 7c | |||
| } KINETISK_SPI_t; | |||
| #define KINETISK_SPI0 (*(KINETISK_SPI_t *)0x4002C000) | |||
| #define SPI0_MCR (*(volatile uint32_t *)0x4002C000) // DSPI Module Configuration Register | |||
| #define SPI0_MCR (KINETISK_SPI0.MCR) // DSPI Module Configuration Register | |||
| #define SPI_MCR_MSTR ((uint32_t)0x80000000) // Master/Slave Mode Select | |||
| #define SPI_MCR_CONT_SCKE ((uint32_t)0x40000000) // | |||
| #define SPI_MCR_DCONF(n) (((n) & 3) << 28) // | |||
| @@ -2164,8 +2171,8 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_MCR_CLR_RXF ((uint32_t)0x00000400) // | |||
| #define SPI_MCR_SMPL_PT(n) (((n) & 3) << 8) // | |||
| #define SPI_MCR_HALT ((uint32_t)0x00000001) // | |||
| #define SPI0_TCR (*(volatile uint32_t *)0x4002C008) // DSPI Transfer Count Register | |||
| #define SPI0_CTAR0 (*(volatile uint32_t *)0x4002C00C) // DSPI Clock and Transfer Attributes Register, In Master Mode | |||
| #define SPI0_TCR (KINETISK_SPI0.TCR) // DSPI Transfer Count Register | |||
| #define SPI0_CTAR0 (KINETISK_SPI0.CTAR0) // DSPI Clock and Transfer Attributes Register, In Master Mode | |||
| #define SPI_CTAR_DBR ((uint32_t)0x80000000) // Double Baud Rate | |||
| #define SPI_CTAR_FMSZ(n) (((n) & 15) << 27) // Frame Size (+1) | |||
| #define SPI_CTAR_CPOL ((uint32_t)0x04000000) // Clock Polarity | |||
| @@ -2179,9 +2186,9 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_CTAR_ASC(n) (((n) & 15) << 8) // After SCK Delay Scaler | |||
| #define SPI_CTAR_DT(n) (((n) & 15) << 4) // Delay After Transfer Scaler | |||
| #define SPI_CTAR_BR(n) (((n) & 15) << 0) // Baud Rate Scaler | |||
| #define SPI0_CTAR0_SLAVE (*(volatile uint32_t *)0x4002C00C) // DSPI Clock and Transfer Attributes Register, In Slave Mode | |||
| #define SPI0_CTAR1 (*(volatile uint32_t *)0x4002C010) // DSPI Clock and Transfer Attributes Register, In Master Mode | |||
| #define SPI0_SR (*(volatile uint32_t *)0x4002C02C) // DSPI Status Register | |||
| #define SPI0_CTAR0_SLAVE (KINETISK_SPI0.CTAR0) // DSPI Clock and Transfer Attributes Register, In Slave Mode | |||
| #define SPI0_CTAR1 (KINETISK_SPI0.CTAR1) // DSPI Clock and Transfer Attributes Register, In Master Mode | |||
| #define SPI0_SR (KINETISK_SPI0.SR) // DSPI Status Register | |||
| #define SPI_SR_TCF ((uint32_t)0x80000000) // Transfer Complete Flag | |||
| #define SPI_SR_TXRXS ((uint32_t)0x40000000) // TX and RX Status | |||
| #define SPI_SR_EOQF ((uint32_t)0x10000000) // End of Queue Flag | |||
| @@ -2189,7 +2196,7 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_SR_TFFF ((uint32_t)0x02000000) // Transmit FIFO Fill Flag | |||
| #define SPI_SR_RFOF ((uint32_t)0x00080000) // Receive FIFO Overflow Flag | |||
| #define SPI_SR_RFDF ((uint32_t)0x00020000) // Receive FIFO Drain Flag | |||
| #define SPI0_RSER (*(volatile uint32_t *)0x4002C030) // DSPI DMA/Interrupt Request Select and Enable Register | |||
| #define SPI0_RSER (KINETISK_SPI0.RSER) // DSPI DMA/Interrupt Request Select and Enable Register | |||
| #define SPI_RSER_TCF_RE ((uint32_t)0x80000000) // Transmission Complete Request Enable | |||
| #define SPI_RSER_EOQF_RE ((uint32_t)0x10000000) // DSPI Finished Request Request Enable | |||
| #define SPI_RSER_TFUF_RE ((uint32_t)0x08000000) // Transmit FIFO Underflow Request Enable | |||
| @@ -2198,25 +2205,25 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_RSER_RFOF_RE ((uint32_t)0x00080000) // Receive FIFO Overflow Request Enable | |||
| #define SPI_RSER_RFDF_RE ((uint32_t)0x00020000) // Receive FIFO Drain Request Enable | |||
| #define SPI_RSER_RFDF_DIRS ((uint32_t)0x00010000) // Receive FIFO Drain DMA or Interrupt Request Select | |||
| #define SPI0_PUSHR (*(volatile uint32_t *)0x4002C034) // DSPI PUSH TX FIFO Register In Master Mode | |||
| #define SPI0_PUSHR (KINETISK_SPI0.PUSHR) // DSPI PUSH TX FIFO Register In Master Mode | |||
| #define SPI_PUSHR_CONT ((uint32_t)0x80000000) // | |||
| #define SPI_PUSHR_CTAS(n) (((n) & 7) << 28) // | |||
| #define SPI_PUSHR_EOQ ((uint32_t)0x08000000) // | |||
| #define SPI_PUSHR_CTCNT ((uint32_t)0x04000000) // | |||
| #define SPI_PUSHR_PCS(n) (((n) & 31) << 16) // | |||
| #define SPI0_PUSHR_SLAVE (*(volatile uint32_t *)0x4002C034) // DSPI PUSH TX FIFO Register In Slave Mode | |||
| #define SPI0_POPR (*(volatile uint32_t *)0x4002C038) // DSPI POP RX FIFO Register | |||
| #define SPI0_TXFR0 (*(volatile uint32_t *)0x4002C03C) // DSPI Transmit FIFO Registers | |||
| #define SPI0_TXFR1 (*(volatile uint32_t *)0x4002C040) // DSPI Transmit FIFO Registers | |||
| #define SPI0_TXFR2 (*(volatile uint32_t *)0x4002C044) // DSPI Transmit FIFO Registers | |||
| #define SPI0_TXFR3 (*(volatile uint32_t *)0x4002C048) // DSPI Transmit FIFO Registers | |||
| #define SPI0_RXFR0 (*(volatile uint32_t *)0x4002C07C) // 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_RXFR3 (*(volatile uint32_t *)0x4002C088) // DSPI Receive FIFO Registers | |||
| #define SPI0_PUSHR_SLAVE (KINETISK_SPI0.PUSHR) // DSPI PUSH TX FIFO Register In Slave Mode | |||
| #define SPI0_POPR (KINETISK_SPI0.POPR) // DSPI POP RX FIFO Register | |||
| #define SPI0_TXFR0 (KINETISK_SPI0.TXFR[0]) // DSPI Transmit FIFO Registers | |||
| #define SPI0_TXFR1 (KINETISK_SPI0.TXFR[1]) // DSPI Transmit FIFO Registers | |||
| #define SPI0_TXFR2 (KINETISK_SPI0.TXFR[2]) // DSPI Transmit FIFO Registers | |||
| #define SPI0_TXFR3 (KINETISK_SPI0.TXFR[3]) // DSPI Transmit FIFO Registers | |||
| #define SPI0_RXFR0 (KINETISK_SPI0.RXFR[0]) // DSPI Receive FIFO Registers | |||
| #define SPI0_RXFR1 (KINETISK_SPI0.RXFR[1]) // DSPI Receive FIFO Registers | |||
| #define SPI0_RXFR2 (KINETISK_SPI0.RXFR[2]) // DSPI Receive FIFO Registers | |||
| #define SPI0_RXFR3 (KINETISK_SPI0.RXFR[3]) // DSPI Receive FIFO Registers | |||
| #elif defined(KINETISL) | |||
| typedef struct __attribute__((packed)) { | |||
| typedef struct { | |||
| volatile uint8_t S; | |||
| volatile uint8_t BR; | |||
| volatile uint8_t C2; | |||
| @@ -2232,7 +2239,7 @@ typedef struct __attribute__((packed)) { | |||
| } KINETISL_SPI_t; | |||
| #define KINETISL_SPI0 (*(KINETISL_SPI_t *)0x40076000) | |||
| #define KINETISL_SPI1 (*(KINETISL_SPI_t *)0x40077000) | |||
| #define SPI0_S (*(volatile uint8_t *)0x40076000) // Status | |||
| #define SPI0_S (KINETISL_SPI0.S) // Status | |||
| #define SPI_S_SPRF ((uint8_t)0x80) // Read Buffer Full Flag | |||
| #define SPI_S_SPMF ((uint8_t)0x40) // Match Flag | |||
| #define SPI_S_SPTEF ((uint8_t)0x20) // Transmit Buffer Empty Flag | |||
| @@ -2241,10 +2248,10 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_S_TNEAREF ((uint8_t)0x04) // Transmit FIFO nearly empty flag | |||
| #define SPI_S_TXFULLF ((uint8_t)0x02) // Transmit FIFO full flag | |||
| #define SPI_S_RFIFOEF ((uint8_t)0x01) // Read FIFO empty flag | |||
| #define SPI0_BR (*(volatile uint8_t *)0x40076001) // Baud Rate | |||
| #define SPI0_BR (KINETISL_SPI0.BR) // Baud Rate | |||
| #define SPI_BR_SPPR(n) (((n) & 7) << 4) // Prescale = N+1 | |||
| #define SPI_BR_SPR(n) (((n) & 15) << 0) // Baud Rate Divisor = 2^(N+1) : 0-8 -> 2 to 512 | |||
| #define SPI0_C2 (*(volatile uint8_t *)0x40076002) // Control Register 2 | |||
| #define SPI0_C2 (KINETISL_SPI0.C2) // Control Register 2 | |||
| #define SPI_C2_SPMIE ((uint8_t)0x80) // Match Interrupt Enable | |||
| #define SPI_C2_SPIMODE ((uint8_t)0x40) // 0 = 8 bit mode, 1 = 16 bit mode | |||
| #define SPI_C2_TXDMAE ((uint8_t)0x20) // Transmit DMA enable | |||
| @@ -2253,7 +2260,7 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_C2_RXDMAE ((uint8_t)0x04) // Receive DMA enable | |||
| #define SPI_C2_SPISWAI ((uint8_t)0x02) // SPI Stop in Wait Mode | |||
| #define SPI_C2_SPC0 ((uint8_t)0x01) // SPI Pin Control, 0=normal, 1=single bidirectional | |||
| #define SPI0_C1 (*(volatile uint8_t *)0x40076003) // Control Register 1 | |||
| #define SPI0_C1 (KINETISL_SPI0.C1) // Control Register 1 | |||
| #define SPI_C1_SPIE ((uint8_t)0x80) // Interrupt Enable | |||
| #define SPI_C1_SPE ((uint8_t)0x40) // SPI System Enable | |||
| #define SPI_C1_SPTIE ((uint8_t)0x20) // Transmit Interrupt Enable | |||
| @@ -2262,11 +2269,11 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_C1_CPHA ((uint8_t)0x04) // Clock Phase | |||
| #define SPI_C1_SSOE ((uint8_t)0x02) // Slave Select Output Enable | |||
| #define SPI_C1_LSBFE ((uint8_t)0x01) // LSB First: 0=MSB First, 1=LSB First | |||
| #define SPI0_ML (*(volatile uint8_t *)0x40076004) // Match Low | |||
| #define SPI0_MH (*(volatile uint8_t *)0x40076005) // Match High | |||
| #define SPI0_DL (*(volatile uint8_t *)0x40076006) // Data Low | |||
| #define SPI0_DH (*(volatile uint8_t *)0x40076007) // Data High | |||
| #define SPI0_CI (*(volatile uint8_t *)0x4007600A) // clear interrupt | |||
| #define SPI0_ML (KINETISL_SPI0.ML) // Match Low | |||
| #define SPI0_MH (KINETISL_SPI0.MH) // Match High | |||
| #define SPI0_DL (KINETISL_SPI0.DL) // Data Low | |||
| #define SPI0_DH (KINETISL_SPI0.DH) // Data High | |||
| #define SPI0_CI (KINETISL_SPI0.CI) // Clear Interrupt | |||
| #define SPI_CI_TXFERR ((uint8_t)0x80) // Transmit FIFO error flag | |||
| #define SPI_CI_RXFERR ((uint8_t)0x40) // Receive FIFO error flag | |||
| #define SPI_CI_TXFOF ((uint8_t)0x20) // Transmit FIFO overflow flag | |||
| @@ -2275,30 +2282,46 @@ typedef struct __attribute__((packed)) { | |||
| #define SPI_CI_RNFULLFCI ((uint8_t)0x04) // Receive FIFO nearly full flag clear interrupt | |||
| #define SPI_CI_SPTEFCI ((uint8_t)0x02) // Transmit FIFO empty flag clear interrupt | |||
| #define SPI_CI_SPRFCI ((uint8_t)0x01) // Receive FIFO full flag clear interrupt | |||
| #define SPI0_C3 (*(volatile uint8_t *)0x4007600B) // Control Register 3 | |||
| #define SPI0_C3 (KINETISL_SPI0.C3) // Control Register 3 | |||
| #define SPI_C3_TNEAREF_MARK ((uint8_t)0x20) // Transmit FIFO nearly empty watermark | |||
| #define SPI_C3_RNFULLF_MARK ((uint8_t)0x10) // Receive FIFO nearly full watermark | |||
| #define SPI_C3_INTCLR ((uint8_t)0x08) // Interrupt clearing mechanism select | |||
| #define SPI_C3_TNEARIEN ((uint8_t)0x04) // Transmit FIFO nearly empty interrupt enable | |||
| #define SPI_C3_RNFULLIEN ((uint8_t)0x02) // Receive FIFO nearly full interrupt enable | |||
| #define SPI_C3_FIFOMODE ((uint8_t)0x01) // FIFO mode enable | |||
| #define SPI1_S (*(volatile uint8_t *)0x40077000) // Status | |||
| #define SPI1_BR (*(volatile uint8_t *)0x40077001) // Baud Rate | |||
| #define SPI1_C2 (*(volatile uint8_t *)0x40077002) // Control Register 2 | |||
| #define SPI1_C1 (*(volatile uint8_t *)0x40077003) // Control Register 1 | |||
| #define SPI1_ML (*(volatile uint8_t *)0x40077004) // Match Low | |||
| #define SPI1_MH (*(volatile uint8_t *)0x40077005) // Match High | |||
| #define SPI1_DL (*(volatile uint8_t *)0x40077006) // Data Low | |||
| #define SPI1_DH (*(volatile uint8_t *)0x40077007) // Data High | |||
| #define SPI1_CI (*(volatile uint8_t *)0x4007700A) // clear interrupt | |||
| #define SPI1_C3 (*(volatile uint8_t *)0x4007700B) // Control Register 3 | |||
| #define SPI1_S (KINETISL_SPI1.S) // Status | |||
| #define SPI1_BR (KINETISL_SPI1.BR) // Baud Rate | |||
| #define SPI1_C2 (KINETISL_SPI1.C2) // Control Register 2 | |||
| #define SPI1_C1 (KINETISL_SPI1.C1) // Control Register 1 | |||
| #define SPI1_ML (KINETISL_SPI1.ML) // Match Low | |||
| #define SPI1_MH (KINETISL_SPI1.MH) // Match High | |||
| #define SPI1_DL (KINETISL_SPI1.DL) // Data Low | |||
| #define SPI1_DH (KINETISL_SPI1.DH) // Data High | |||
| #define SPI1_CI (KINETISL_SPI1.CI) // Dlear Interrupt | |||
| #define SPI1_C3 (KINETISL_SPI1.C3) // Control Register 3 | |||
| #endif | |||
| // Chapter 44: Inter-Integrated Circuit (I2C) | |||
| #define I2C0_A1 (*(volatile uint8_t *)0x40066000) // I2C Address Register 1 | |||
| #define I2C0_F (*(volatile uint8_t *)0x40066001) // I2C Frequency Divider register | |||
| #define I2C0_C1 (*(volatile uint8_t *)0x40066002) // I2C Control Register 1 | |||
| typedef struct { | |||
| volatile uint8_t A1; | |||
| volatile uint8_t F; | |||
| volatile uint8_t C1; | |||
| volatile uint8_t S; | |||
| volatile uint8_t D; | |||
| volatile uint8_t C2; | |||
| volatile uint8_t FLT; | |||
| volatile uint8_t RA; | |||
| volatile uint8_t SMB; | |||
| volatile uint8_t A2; | |||
| volatile uint8_t SLTH; | |||
| volatile uint8_t SLTL; | |||
| } KINETIS_I2C_t; | |||
| #define KINETIS_I2C0 (*(KINETIS_I2C_t *)0x40066000) | |||
| #define KINETIS_I2C1 (*(KINETIS_I2C_t *)0x40067000) | |||
| #define I2C0_A1 (KINETIS_I2C0.A1) // I2C Address Register 1 | |||
| #define I2C0_F (KINETIS_I2C0.F) // I2C Frequency Divider register | |||
| #define I2C0_C1 (KINETIS_I2C0.C1) // I2C Control Register 1 | |||
| #define I2C_C1_IICEN ((uint8_t)0x80) // I2C Enable | |||
| #define I2C_C1_IICIE ((uint8_t)0x40) // I2C Interrupt Enable | |||
| #define I2C_C1_MST ((uint8_t)0x20) // Master Mode Select | |||
| @@ -2307,7 +2330,7 @@ typedef struct __attribute__((packed)) { | |||
| #define I2C_C1_RSTA ((uint8_t)0x04) // Repeat START | |||
| #define I2C_C1_WUEN ((uint8_t)0x02) // Wakeup Enable | |||
| #define I2C_C1_DMAEN ((uint8_t)0x01) // DMA Enable | |||
| #define I2C0_S (*(volatile uint8_t *)0x40066003) // I2C Status register | |||
| #define I2C0_S (KINETIS_I2C0.S) // I2C Status register | |||
| #define I2C_S_TCF ((uint8_t)0x80) // Transfer Complete Flag | |||
| #define I2C_S_IAAS ((uint8_t)0x40) // Addressed As A Slave | |||
| #define I2C_S_BUSY ((uint8_t)0x20) // Bus Busy | |||
| @@ -2316,33 +2339,37 @@ typedef struct __attribute__((packed)) { | |||
| #define I2C_S_SRW ((uint8_t)0x04) // Slave Read/Write | |||
| #define I2C_S_IICIF ((uint8_t)0x02) // Interrupt Flag | |||
| #define I2C_S_RXAK ((uint8_t)0x01) // Receive Acknowledge | |||
| #define I2C0_D (*(volatile uint8_t *)0x40066004) // I2C Data I/O register | |||
| #define I2C0_C2 (*(volatile uint8_t *)0x40066005) // I2C Control Register 2 | |||
| #define I2C0_D (KINETIS_I2C0.D) // I2C Data I/O register | |||
| #define I2C0_C2 (KINETIS_I2C0.C2) // I2C Control Register 2 | |||
| #define I2C_C2_GCAEN ((uint8_t)0x80) // General Call Address Enable | |||
| #define I2C_C2_ADEXT ((uint8_t)0x40) // Address Extension | |||
| #define I2C_C2_HDRS ((uint8_t)0x20) // High Drive Select | |||
| #define I2C_C2_SBRC ((uint8_t)0x10) // Slave Baud Rate Control | |||
| #define I2C_C2_RMEN ((uint8_t)0x08) // Range Address Matching Enable | |||
| #define I2C_C2_AD(n) ((n) & 7) // Slave Address, upper 3 bits | |||
| #define I2C0_FLT (*(volatile uint8_t *)0x40066006) // I2C Programmable Input Glitch Filter register | |||
| #define I2C0_RA (*(volatile uint8_t *)0x40066007) // I2C Range Address register | |||
| #define I2C0_SMB (*(volatile uint8_t *)0x40066008) // I2C SMBus Control and Status register | |||
| #define I2C0_A2 (*(volatile uint8_t *)0x40066009) // I2C Address Register 2 | |||
| #define I2C0_SLTH (*(volatile uint8_t *)0x4006600A) // I2C SCL Low Timeout Register High | |||
| #define I2C0_SLTL (*(volatile uint8_t *)0x4006600B) // I2C SCL Low Timeout Register Low | |||
| #define I2C1_A1 (*(volatile uint8_t *)0x40067000) // I2C Address Register 1 | |||
| #define I2C1_F (*(volatile uint8_t *)0x40067001) // I2C Frequency Divider register | |||
| #define I2C1_C1 (*(volatile uint8_t *)0x40067002) // I2C Control Register 1 | |||
| #define I2C1_S (*(volatile uint8_t *)0x40067003) // I2C Status register | |||
| #define I2C1_D (*(volatile uint8_t *)0x40067004) // I2C Data I/O register | |||
| #define I2C1_C2 (*(volatile uint8_t *)0x40067005) // I2C Control Register 2 | |||
| #define I2C1_FLT (*(volatile uint8_t *)0x40067006) // I2C Programmable Input Glitch Filter register | |||
| #define I2C1_RA (*(volatile uint8_t *)0x40067007) // I2C Range Address register | |||
| #define I2C1_SMB (*(volatile uint8_t *)0x40067008) // I2C SMBus Control and Status register | |||
| #define I2C1_A2 (*(volatile uint8_t *)0x40067009) // I2C Address Register 2 | |||
| #define I2C1_SLTH (*(volatile uint8_t *)0x4006700A) // I2C SCL Low Timeout Register High | |||
| #define I2C1_SLTL (*(volatile uint8_t *)0x4006700B) // I2C SCL Low Timeout Register Low | |||
| #define I2C0_FLT (KINETIS_I2C0.FLT) // I2C Programmable Input Glitch Filter register | |||
| #define I2C_FLT_SHEN ((uint8_t)0x80) // Stop Hold Enable | |||
| #define I2C_FLT_STOPF ((uint8_t)0x40) // Stop Detect Flag | |||
| #define I2C_FLT_STOPIE ((uint8_t)0x20) // Stop Interrupt Enable | |||
| #define I2C_FLT_FTL(n) ((n) & 0x1F) // Programmable Filter Factor | |||
| #define I2C0_RA (KINETIS_I2C0.RA) // I2C Range Address register | |||
| #define I2C0_SMB (KINETIS_I2C0.SMB) // I2C SMBus Control and Status register | |||
| #define I2C0_A2 (KINETIS_I2C0.A2) // I2C Address Register 2 | |||
| #define I2C0_SLTH (KINETIS_I2C0.SLTH) // I2C SCL Low Timeout Register High | |||
| #define I2C0_SLTL (KINETIS_I2C0.SLTL) // I2C SCL Low Timeout Register Low | |||
| #define I2C1_A1 (KINETIS_I2C1.A1) // I2C Address Register 1 | |||
| #define I2C1_F (KINETIS_I2C1.F) // I2C Frequency Divider register | |||
| #define I2C1_C1 (KINETIS_I2C1.C1) // I2C Control Register 1 | |||
| #define I2C1_S (KINETIS_I2C1.S) // I2C Status register | |||
| #define I2C1_D (KINETIS_I2C1.D) // I2C Data I/O register | |||
| #define I2C1_C2 (KINETIS_I2C1.C2) // I2C Control Register 2 | |||
| #define I2C1_FLT (KINETIS_I2C1.FLT) // I2C Programmable Input Glitch Filter register | |||
| #define I2C1_RA (KINETIS_I2C1.RA) // I2C Range Address register | |||
| #define I2C1_SMB (KINETIS_I2C1.SMB) // I2C SMBus Control and Status register | |||
| #define I2C1_A2 (KINETIS_I2C1.A2) // I2C Address Register 2 | |||
| #define I2C1_SLTH (KINETIS_I2C1.SLTH) // I2C SCL Low Timeout Register High | |||
| #define I2C1_SLTL (KINETIS_I2C1.SLTL) // I2C SCL Low Timeout Register Low | |||
| // Chapter 45: Universal Asynchronous Receiver/Transmitter (UART) | |||
| typedef struct __attribute__((packed)) { | |||