void Components_Init(void) { /*! DMA_controller Auto initialization start */ EDMA_DRV_Init(&DMA_controller_State,&DMA_controller_InitConfig0); /*! DMA_controller Auto initialization end */ /*! OLED_SPI Auto initialization start */ DSPI_DRV_EdmaMasterInit(FSL_OLED_SPI, &OLED_SPI_MasterState, &OLED_SPI_MasterConfig, &OLED_SPI_dmaTcd); DSPI_DRV_EdmaMasterConfigureBus(FSL_OLED_SPI, &OLED_SPI_BusConfig, &OLED_SPI_calculatedBaudRate); /*! OLED_SPI Auto initialization end */ /*! FLASH_SPI Auto initialization start */ DSPI_DRV_EdmaMasterInit(FSL_FLASH_SPI, &FLASH_SPI_MasterState, &FLASH_SPI_MasterConfig, &FLASH_SPI_dmaTcd); DSPI_DRV_EdmaMasterConfigureBus(FSL_FLASH_SPI, &FLASH_SPI_BusConfig, &FLASH_SPI_calculatedBaudRate); /*! FLASH_SPI Auto initialization end */ /*! GPIO Auto initialization start */ GPIO_DRV_Init(NULL,NULL); /*! GPIO Auto initialization end */ /*! KW40_UART Auto initialization start */ UART_DRV_Init(FSL_KW40_UART,&KW40_UART_State,&KW40_UART_InitConfig0); /*! KW40_UART Auto initialization end */ /*! DEBUG_UART Auto initialization start */ UART_DRV_Init(FSL_DEBUG_UART,&DEBUG_UART_State,&DEBUG_UART_InitConfig0); /*! DEBUG_UART Auto initialization end */ /*! FS_I2C Auto initialization start */ I2C_DRV_MasterInit(FSL_FS_I2C, &FS_I2C_MasterState); I2C_DRV_MasterSetBaudRate(FSL_FS_I2C, &FS_I2C_MasterConfig); /*! FS_I2C Auto initialization end */ /*! NFS_I2C Auto initialization start */ I2C_DRV_MasterInit(FSL_NFS_I2C, &NFS_I2C_MasterState); I2C_DRV_MasterSetBaudRate(FSL_NFS_I2C, &NFS_I2C_MasterConfig); /*! NFS_I2C Auto initialization end */ /*! PWR_Manager Auto initialization start */ // POWER_SYS_Init(powerConfigsArr, 2U, NULL , 0U); INT_SYS_EnableIRQ(LLWU_IRQn); /*! PWR_Manager Auto initialization end */ /*! CLOCK Auto initialization start */ RTC_DRV_Init(FSL_CLOCK); /*! CLOCK Auto initialization end */ /*! BATTERY_ADC Auto initialization start */ ADC16_DRV_Init(FSL_BATTERY_ADC, &BATTERY_ADC_InitConfig); ADC16_DRV_ConfigConvChn(FSL_BATTERY_ADC, 0U, &BATTERY_ADC_ChnConfig); /*! BATTERY_ADC Auto initialization end */ /*! sensor_timer Auto initialization start */ LPTMR_DRV_Init(FSL_SENSOR_TIMER,&sensor_timer_State,&sensor_timer_cfg); /*! sensor_timer Auto initialization end */ }
/*! * @Brief enable the trigger source of LPTimer */ void init_trigger_source(uint32_t adcInstance) { uint32_t freqUs; lptmr_user_config_t lptmrUserConfig = { .timerMode = kLptmrTimerModeTimeCounter, .freeRunningEnable = false, .prescalerEnable = false, // bypass perscaler #if (CLOCK_INIT_CONFIG == CLOCK_VLPR) // use MCGIRCCLK, 4M or 32KHz .prescalerClockSource = kClockLptmrSrcMcgIrClk, #else // Use LPO clock 1KHz .prescalerClockSource = kClockLptmrSrcLpoClk, #endif .isInterruptEnabled = false }; // Init LPTimer driver LPTMR_DRV_Init(0, &gLPTMRState, &lptmrUserConfig); // Set the LPTimer period freqUs = 1000000U/(INPUT_SIGNAL_FREQ*NR_SAMPLES)*2; LPTMR_DRV_SetTimerPeriodUs(0, freqUs); // Start the LPTimer LPTMR_DRV_Start(0); // Configure SIM for ADC hw trigger source selection #if defined(KM34Z7_SERIES) SIM_HAL_EnableClock(gSimBase[0], kSimClockGateXbar0); SIM_HAL_SetAdcTrgSelMode(gSimBase[0], kSimAdcTrgSelXbar); XBAR_DRV_ConfigSignalConnection(kXbaraInputLPTMR0_Output, kXbaraOutputADC_TRGA); #else SIM_HAL_SetAdcAlternativeTriggerCmd(gSimBase[0], adcInstance, true); SIM_HAL_SetAdcPreTriggerMode(gSimBase[0], adcInstance, kSimAdcPretrgselA); SIM_HAL_SetAdcTriggerMode(gSimBase[0], adcInstance, kSimAdcTrgSelLptimer); #endif } /*! * @Brief disable the trigger source */ void deinit_trigger_source(uint32_t adcInstance) { LPTMR_DRV_Stop(0); LPTMR_DRV_Deinit(0); }
/*! * @Brief enable the trigger source of LPTimer */ void init_trigger_source(uint32_t adcInstance) { uint32_t freqUs; lptmr_user_config_t lptmrUserConfig = { .timerMode = kLptmrTimerModeTimeCounter, .freeRunningEnable = false, .prescalerEnable = false, // bypass perscaler .prescalerClockSource = kClockLptmrSrcMcgIrClk, // use MCGIRCCLK, 4M or 32KHz .isInterruptEnabled = false }; // Init LPTimer driver LPTMR_DRV_Init(0, &lptmrUserConfig, &gLPTMRState); // Set the LPTimer period freqUs = 1000000U/(INPUT_SIGNAL_FREQ*NR_SAMPLES)*2; LPTMR_DRV_SetTimerPeriodUs(0, freqUs); // Start the LPTimer LPTMR_DRV_Start(0); // Configure SIM for ADC hw trigger source selection SIM_HAL_SetAdcAlternativeTriggerCmd(gSimBase[0], adcInstance, true); SIM_HAL_SetAdcPreTriggerMode(gSimBase[0], adcInstance, kSimAdcPretrgselA); SIM_HAL_SetAdcTriggerMode(gSimBase[0], adcInstance, kSimAdcTrgSelLptimer); } /*! * @Brief disable the trigger source */ void deinit_trigger_source(uint32_t adcInstance) { LPTMR_DRV_Stop(0); LPTMR_DRV_Deinit(0); }
/*! * @brief Main function */ int main (void) { /* enable clock for PORTs */ CLOCK_SYS_EnablePortClock(PORTA_IDX); //CLOCK_SYS_EnablePortClock(PORTB_IDX); CLOCK_SYS_EnablePortClock(PORTC_IDX); CLOCK_SYS_EnablePortClock(PORTD_IDX); CLOCK_SYS_EnablePortClock(PORTE_IDX); /* Set allowed power mode, allow all. */ SMC_HAL_SetProtection(SMC, kAllowPowerModeAll); /* Set system clock configuration. */ CLOCK_SYS_SetConfiguration(&g_defaultClockConfigVlpr); /* Initialize LPTMR */ lptmr_state_t lptmrState; LPTMR_DRV_Init(LPTMR0_IDX, &lptmrState, &g_lptmrConfig); LPTMR_DRV_SetTimerPeriodUs(LPTMR0_IDX, 100000); LPTMR_DRV_InstallCallback(LPTMR0_IDX, lptmr_call_back); /* Initialize DMA */ dma_state_t dma_state; DMA_DRV_Init(&dma_state); /* Initialize PIT */ PIT_DRV_Init(0, false); PIT_DRV_InitChannel(0, 0, &g_pitChan0); /* Initialize CMP */ CMP_DRV_Init(0, &g_cmpState, &g_cmpConf); CMP_DRV_ConfigDacChn(0, &g_cmpDacConf); PORT_HAL_SetMuxMode(g_portBase[GPIOC_IDX], 0, kPortMuxAlt5); CMP_DRV_Start(0); /* Buttons */ GPIO_DRV_InputPinInit(&g_switch1); GPIO_DRV_InputPinInit(&g_switch2); GPIO_DRV_InputPinInit(&g_switchUp); GPIO_DRV_InputPinInit(&g_switchDown); GPIO_DRV_InputPinInit(&g_switchLeft); GPIO_DRV_InputPinInit(&g_switchRight); GPIO_DRV_InputPinInit(&g_switchSelect); /* Start LPTMR */ LPTMR_DRV_Start(LPTMR0_IDX); /* Setup LPUART1 */ LPUART_DRV_Init(1, &g_lpuartState, &g_lpuartConfig); LPUART_DRV_InstallRxCallback(1, lpuartRxCallback, rxBuff, NULL, true); LPUART_DRV_InstallTxCallback(1, lpuartTxCallback, NULL, NULL); LPUART_BWR_CTRL_TXINV(g_lpuartBase[1], 1); PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 0, kPortMuxAlt3); PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 1, kPortMuxAlt3); /* Setup FlexIO for the WS2812B */ FLEXIO_Type *fiobase = g_flexioBase[0]; CLOCK_SYS_SetFlexioSrc(0, kClockFlexioSrcMcgIrClk); FLEXIO_DRV_Init(0, &g_flexioConfig); FLEXIO_HAL_ConfigureTimer(fiobase, 0, &g_timerConfig); FLEXIO_HAL_ConfigureShifter(fiobase, 0, &g_shifterConfig); PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 20, kPortMuxAlt6); FLEXIO_DRV_Start(0); FLEXIO_HAL_SetShifterStatusDmaCmd(fiobase, 1, true); DMA_DRV_RequestChannel(kDmaAnyChannel, kDmaRequestMux0FlexIOChannel0, &g_fioChan); DMA_DRV_RegisterCallback(&g_fioChan, fioDmaCallback, NULL); /* Connect buzzer to TPM0_CH3 */ PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 30, kPortMuxAlt3); tpm_general_config_t tmpConfig = { .isDBGMode = false, .isGlobalTimeBase = false, .isTriggerMode = false, .isStopCountOnOveflow = false, .isCountReloadOnTrig = false, .triggerSource = kTpmTrigSel0, }; TPM_DRV_Init(0, &tmpConfig); TPM_DRV_SetClock(0, kTpmClockSourceModuleMCGIRCLK, kTpmDividedBy1); /* Blank LED just in case, saves power */ led(0x00, 0x00, 0x00); /* Init e-paper display */ EPD_Init(); /* Throw up first image */ int ret = EPD_Draw(NULL, images[current_image]); if (-1 == ret) { led(0xff, 0x00, 0x00); } else if (-2 == ret) { led(0xff, 0xff, 0x00); } else if (-3 == ret) { led(0x00, 0x00, 0xff); } else { led(0x00, 0xff, 0x00); } blank_led = 30; /* Deinit so we can mess around on the bus pirate */ //EPD_Deinit(); /* We're done, everything else is triggered through interrupts */ for(;;) { if (cue_next_image) { int old_image = current_image; current_image = (current_image + 1) % image_count; EPD_Draw(images[old_image], images[current_image]); cue_next_image = 0; } #ifndef DEBUG SMC_HAL_SetMode(SMC, &g_idlePowerMode); #endif } }