30 #  define KINETIS_HAVE_PCR 
   34 #  define KINETIS_HAVE_PINSEL 
   37 #ifdef ADC_CFG1_MODE_MASK 
   38 #  define KINETIS_HAVE_ADC_K 
   41 #ifdef SPI_CTAR_CPHA_MASK 
   42 #  define KINETIS_HAVE_MK_SPI 
   45 #ifdef LPTMR_CSR_TEN_MASK 
   46 #  define KINETIS_HAVE_LPTMR 
   60 #define GPIO_UNDEF          (0xffff) 
   65 #define GPIO_PIN(x, y)      (((x + 1) << 12) | (x << 6) | y) 
   67 #ifdef SIM_UIDH_UID_MASK 
   72 #define CPUID_ADDR          (&SIM->UIDH) 
   77 #define CPUID_LEN           (16U) 
   83 #define CPUID_ADDR          (&SIM->UIDMH) 
   87 #define CPUID_LEN           (12U) 
   99 #define GPIO_MODE(pu, pe, od, out)   (pu | (pe << 1) | (od << 5) | (out << 7)) 
  107 #define SPI_HWCS(x)         (x) 
  112 #define SPI_HWCS_NUMOF      (5) 
  117 #define SPI_CS_UNDEF        (GPIO_UNDEF) 
  124 #define HAVE_SPI_CS_T 
  133 #define PERIPH_SPI_NEEDS_TRANSFER_BYTE  1 
  134 #define PERIPH_SPI_NEEDS_TRANSFER_REG   1 
  135 #define PERIPH_SPI_NEEDS_TRANSFER_REGS  1 
  141 #define PERIPH_TIMER_PROVIDES_SET 
  146 #define TIMER_CHANNEL_NUMOF             1 
  152 #define PM_NUM_MODES    (4U) 
  159 #if MODULE_PM_LAYERED 
  164 #define PM_BLOCK(x) pm_block(x) 
  168 #define PM_UNBLOCK(x) pm_unblock(x) 
  172 #define PM_UNBLOCK(x) 
  181 #define HAVE_GPIO_MODE_T 
  193 #ifdef KINETIS_HAVE_PCR 
  200     GPIO_AF_ANALOG = PORT_PCR_MUX(0),       
 
  201     GPIO_AF_GPIO   = PORT_PCR_MUX(1),       
 
  202     GPIO_AF_2      = PORT_PCR_MUX(2),       
 
  203     GPIO_AF_3      = PORT_PCR_MUX(3),       
 
  204     GPIO_AF_4      = PORT_PCR_MUX(4),       
 
  205     GPIO_AF_5      = PORT_PCR_MUX(5),       
 
  206     GPIO_AF_6      = PORT_PCR_MUX(6),       
 
  207     GPIO_AF_7      = PORT_PCR_MUX(7),       
 
  208 #ifdef PORT_PCR_ODE_MASK 
  209     GPIO_PCR_OD    = (PORT_PCR_ODE_MASK),   
 
  211     GPIO_PCR_PD    = (PORT_PCR_PE_MASK),    
 
  212     GPIO_PCR_PU    = (PORT_PCR_PE_MASK | PORT_PCR_PS_MASK)  
 
  221 #ifdef KINETIS_HAVE_PCR 
  222 #define HAVE_GPIO_FLANK_T 
  253 #define HAVE_ADC_RES_T 
  254 #ifdef KINETIS_HAVE_ADC_K 
  266 #if defined(FTM_CnSC_MSB_MASK) 
  270 #define PWM_CHAN_MAX        (4U) 
  276 #define HAVE_PWM_MODE_T 
  278     PWM_LEFT   = (FTM_CnSC_MSB_MASK | FTM_CnSC_ELSB_MASK),  
 
  279     PWM_RIGHT  = (FTM_CnSC_MSB_MASK | FTM_CnSC_ELSA_MASK),  
 
  292 #if defined(UART_C1_M_MASK) || DOXYGEN 
  296 #elif defined(LPUART_CTRL_M_MASK)
 
  301 #
if defined(UART_C1_M_MASK) || DOXYGEN
 
  303 #elif defined(LPUART_CTRL_M_MASK)
 
  305     UART_MODE_8O1 = (LPUART_CTRL_M_MASK | LPUART_CTRL_PE_MASK | LPUART_CTRL_PT_MASK),
 
  315 #ifdef KINETIS_HAVE_MK_SPI 
  316 #define HAVE_SPI_MODE_T 
  318 #if defined(SPI_CTAR_CPHA_MASK) 
  322     SPI_MODE_3 = (SPI_CTAR_CPOL_MASK | SPI_CTAR_CPHA_MASK)  
 
  323 #elif defined(SPI_C1_CPHA_MASK)
 
  327     SPI_MODE_3 = (SPI_C1_CPOL_MASK | SPI_C1_CPHA_MASK)      
 
  366 #define ADC_AVG_NONE    (0) 
  370 #define ADC_AVG_MAX     (ADC_SC3_AVGE_MASK | ADC_SC3_AVGS(3)) 
  372 #if defined(DAC0_BASE) && (DAC0_BASE != This_symbol_has_been_deprecated) 
  378     volatile uint32_t *scgc_addr;   
 
  393 #ifdef KINETIS_HAVE_LPTMR 
  409 #ifdef FTM_CnSC_MSB_MASK 
  422 #ifdef KINETIS_HAVE_PINSEL 
  423     volatile uint32_t *pinsel;
 
  424     uint32_t pinsel_mask;
 
  431 #define HAVE_I2C_SPEED_T 
  444 #define PERIPH_I2C_NEED_READ_REG 
  445 #define PERIPH_I2C_NEED_READ_REGS 
  446 #define PERIPH_I2C_NEED_WRITE_REG 
  447 #define PERIPH_I2C_NEED_WRITE_REGS 
  474 #ifdef KINETIS_HAVE_PCR 
  477 #ifdef KINETIS_HAVE_PINSEL 
  478     volatile uint32_t *pinsel;
 
  479     uint32_t pinsel_mask;
 
  490 #ifdef KINETIS_HAVE_LPTMR 
  500 #define TIMER_PIT_DEV(x)   (TIMER_DEV(0 + (x))) 
  501 #ifdef KINETIS_HAVE_LPTMR 
  503 #define TIMER_LPTMR_DEV(x) (TIMER_DEV(PIT_NUMOF + (x))) 
  511 #define RTT_DEV             (TIMER_LPTMR_DEV(0)) 
  512 #define RTT_MAX_VALUE       (0x0000ffff) 
  513 #define RTT_CLOCK_FREQUENCY (32768U)              
  514 #define RTT_MAX_FREQUENCY   (32768U)              
  515 #define RTT_MIN_FREQUENCY   (1U)                  
  516 #ifndef RTT_FREQUENCY 
  517 #define RTT_FREQUENCY       RTT_MAX_FREQUENCY 
  519 #if IS_USED(MODULE_PERIPH_RTT) 
  523 #define KINETIS_XTIMER_SOURCE_PIT   1 
  546 #ifdef KINETIS_HAVE_PCR 
  550 #ifdef KINETIS_HAVE_PINSEL 
  551     volatile uint32_t *pinsel;
 
  552     uint32_t pinsel_mask;
 
  562 #if !defined(KINETIS_HAVE_PLL) && defined(MODULE_PERIPH_MCG) \ 
  563   && defined(MCG_C6_PLLS_MASK) || DOXYGEN 
  567 #define KINETIS_HAVE_PLL 1 
  569 #define KINETIS_HAVE_PLL 0 
  572 #ifdef MODULE_PERIPH_MCG_LITE 
  576 typedef enum kinetis_mcg_mode {
 
  577     KINETIS_MCG_MODE_LIRC8M = 0, 
 
  578     KINETIS_MCG_MODE_HIRC   = 1, 
 
  579     KINETIS_MCG_MODE_EXT    = 2, 
 
  580     KINETIS_MCG_MODE_LIRC2M = 3, 
 
  581     KINETIS_MCG_MODE_NUMOF,    
 
  582 } kinetis_mcg_mode_t;
 
  585 #ifdef MODULE_PERIPH_MCG 
  589 typedef enum kinetis_mcg_mode {
 
  590     KINETIS_MCG_MODE_FEI  = 0, 
 
  591     KINETIS_MCG_MODE_FEE  = 1, 
 
  592     KINETIS_MCG_MODE_FBI  = 2, 
 
  593     KINETIS_MCG_MODE_FBE  = 3, 
 
  594     KINETIS_MCG_MODE_BLPI = 4, 
 
  595     KINETIS_MCG_MODE_BLPE = 5, 
 
  597     KINETIS_MCG_MODE_PBE  = 6, 
 
  598     KINETIS_MCG_MODE_PEE  = 7, 
 
  600     KINETIS_MCG_MODE_NUMOF,    
 
  601 } kinetis_mcg_mode_t;
 
  608     KINETIS_MCG_FLL_FACTOR_640  = (MCG_C4_DRST_DRS(0)),
 
  610     KINETIS_MCG_FLL_FACTOR_732  = (MCG_C4_DRST_DRS(0) | MCG_C4_DMX32_MASK),
 
  612     KINETIS_MCG_FLL_FACTOR_1280 = (MCG_C4_DRST_DRS(1)),
 
  614     KINETIS_MCG_FLL_FACTOR_1464 = (MCG_C4_DRST_DRS(1) | MCG_C4_DMX32_MASK),
 
  616     KINETIS_MCG_FLL_FACTOR_1920 = (MCG_C4_DRST_DRS(2)),
 
  618     KINETIS_MCG_FLL_FACTOR_2197 = (MCG_C4_DRST_DRS(2) | MCG_C4_DMX32_MASK),
 
  620     KINETIS_MCG_FLL_FACTOR_2560 = (MCG_C4_DRST_DRS(3)),
 
  622     KINETIS_MCG_FLL_FACTOR_2929 = (MCG_C4_DRST_DRS(3) | MCG_C4_DMX32_MASK),
 
  626 #if defined(MODULE_PERIPH_MCG) || defined(MODULE_PERIPH_MCG_LITE) 
  632     KINETIS_MCG_ERC_RANGE_LOW       = MCG_C2_RANGE0(0), 
 
  633     KINETIS_MCG_ERC_RANGE_HIGH      = MCG_C2_RANGE0(1), 
 
  634     KINETIS_MCG_ERC_RANGE_VERY_HIGH = MCG_C2_RANGE0(2), 
 
  635 } kinetis_mcg_erc_range_t;
 
  652     KINETIS_CLOCK_OSC0_EN           = (1 <<  0),
 
  661     KINETIS_CLOCK_RTCOSC_EN         = (1 <<  1),
 
  678     KINETIS_CLOCK_USE_FAST_IRC      = (1 <<  2),
 
  687     KINETIS_CLOCK_MCGIRCLK_EN       = (1 <<  3),
 
  698     KINETIS_CLOCK_MCGIRCLK_STOP_EN  = (1 <<  4),
 
  709     KINETIS_CLOCK_MCGPCLK_EN        = (1 <<  5),
 
  710 } kinetis_clock_flags_t;
 
  757     unsigned int clock_flags;
 
  763     kinetis_mcg_mode_t default_mode;
 
  769     kinetis_mcg_erc_range_t erc_range;
 
  781 #ifdef MODULE_PERIPH_MCG 
  805 #ifdef MODULE_PERIPH_MCG_LITE 
  835     kinetis_mcg_fll_t fll_factor_fei;
 
  842     kinetis_mcg_fll_t fll_factor_fee;
 
@ GPIO_OUT
select GPIO MASK as output
 
@ GPIO_IN
select GPIO MASK as input
 
#define PWM_CHAN_MAX
PWM configuration structure.
 
gpio_t adc_conf_t
ADC configuration wrapper.
 
enum IRQn IRQn_Type
Interrupt Number Definition.
 
gpio_mode_t
Available pin modes.
 
adc_res_t
Possible ADC resolution settings.
 
@ ADC_RES_16BIT
ADC resolution: 16 bit.
 
@ ADC_RES_8BIT
ADC resolution: 8 bit.
 
@ ADC_RES_14BIT
ADC resolution: 14 bit.
 
@ ADC_RES_6BIT
ADC resolution: 6 bit.
 
@ ADC_RES_10BIT
ADC resolution: 10 bit.
 
@ ADC_RES_12BIT
ADC resolution: 12 bit.
 
unsigned int gpio_t
GPIO type identifier.
 
@ GPIO_FALLING
emit interrupt on falling flank
 
@ GPIO_RISING
emit interrupt on rising flank
 
@ GPIO_BOTH
emit interrupt on both flanks
 
@ GPIO_OD
configure as output in open-drain mode without pull resistor
 
@ GPIO_IN_PU
configure as input with pull-up resistor
 
@ GPIO_OD_PU
configure as output in open-drain mode with pull resistor enabled
 
@ GPIO_IN_PD
configure as input with pull-down resistor
 
@ I2C_SPEED_NORMAL
normal mode: ~100 kbit/s
 
@ I2C_SPEED_FAST_PLUS
fast plus mode: ~1000 kbit/s
 
@ I2C_SPEED_LOW
low speed mode: ~10 kbit/s
 
@ I2C_SPEED_HIGH
high speed mode: ~3400 kbit/s
 
@ I2C_SPEED_FAST
fast mode: ~400 kbit/s
 
@ PWM_CENTER
center aligned
 
gpio_t spi_cs_t
Chip select pin type overlaps with gpio_t so it can be casted to this.
 
@ SPI_MODE_0
CPOL=0, CPHA=0.
 
@ SPI_MODE_2
CPOL=1, CPHA=0.
 
@ SPI_MODE_1
CPOL=0, CPHA=1.
 
@ SPI_MODE_3
CPOL=1, CPHA=1.
 
uart_type_t
UART hardware module types.
 
@ KINETIS_LPUART
Kinetis Low-power UART (LPUART) module type.
 
@ KINETIS_UART
Kinetis UART module type.
 
void gpio_init_port(gpio_t pin, uint32_t pcr)
CPU internal function for initializing PORTs.
 
uart_mode_t
UART transmission modes.
 
@ UART_MODE_8N1
8 data bits, no parity, 1 stop bit
 
@ UART_MODE_8E1
8 data bits, even parity, 1 stop bit
 
@ UART_MODE_8O1
8 data bits, odd parity, 1 stop bit
 
@ GPIO_PORTS_NUMOF
overall number of available ports
 
#define SPI_HWCS_NUMOF
Kinetis CPUs have a maximum number of 5 hardware chip select lines.
 
#define GPIO_MODE(pu, pe, od, out)
Generate GPIO mode bitfields.
 
spi_mode_t
Support SPI modes.
 
Layered low power mode infrastructure.
 
uint8_t avg
Hardware averaging configuration.
 
ADC_Type * dev
ADC module.
 
DAC line configuration data.
 
I2C configuration structure.
 
uint32_t freq
I2C module clock frequency, usually CLOCK_BUSCLOCK or CLOCK_CORECLOCK.
 
I2C_Type * i2c
Pointer to hardware module registers.
 
uint32_t sda_pcr
PORT module PCR setting for the SDA pin.
 
uint32_t scl_pcr
PORT module PCR setting for the SCL pin.
 
CPU specific timer PIT module configuration.
 
uint8_t prescaler_ch
Prescaler channel.
 
uint8_t count_ch
Counting channel, will be linked to the prescaler channel.
 
PWM device configuration.
 
SPI device configuration.
 
gpio_t pin_clk
CLK pin used.
 
gpio_t pin_mosi
MOSI pin used.
 
gpio_t pin_miso
MISO pin used.
 
uint32_t simmask
bit in the SIM register
 
UART device configuration.
 
uart_type_t type
Hardware module type (KINETIS_UART or KINETIS_LPUART)
 
gpio_t pin_rx
RX pin, GPIO_UNDEF disables RX.
 
uint8_t scgc_bit
Clock enable bit, within the register.
 
uart_mode_t mode
UART mode: data bits, parity, stop bits.
 
volatile uint32_t * scgc_addr
Clock enable register, in SIM module.
 
uint32_t freq
Module clock frequency, usually CLOCK_CORECLOCK or CLOCK_BUSCLOCK.
 
IRQn_Type irqn
IRQ number for this module.