1 /* 2 * Copyright (c) 2015, Freescale Semiconductor, Inc. 3 * Copyright 2016-2017 NXP 4 * All rights reserved. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #include "fsl_ewm.h" 10 11 /******************************************************************************* 12 * Code 13 ******************************************************************************/ 14 EWM_Init(EWM_Type * base,const ewm_config_t * config)15void EWM_Init(EWM_Type *base, const ewm_config_t *config) 16 { 17 assert(config); 18 19 uint32_t value = 0U; 20 21 #if !((defined(FSL_FEATURE_SOC_PCC_COUNT) && FSL_FEATURE_SOC_PCC_COUNT) && \ 22 (defined(FSL_FEATURE_PCC_SUPPORT_EWM_CLOCK_REMOVE) && FSL_FEATURE_PCC_SUPPORT_EWM_CLOCK_REMOVE)) 23 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) 24 CLOCK_EnableClock(kCLOCK_Ewm0); 25 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ 26 #endif 27 value = EWM_CTRL_EWMEN(config->enableEwm) | EWM_CTRL_ASSIN(config->setInputAssertLogic) | 28 EWM_CTRL_INEN(config->enableEwmInput) | EWM_CTRL_INTEN(config->enableInterrupt); 29 #if defined(FSL_FEATURE_EWM_HAS_PRESCALER) && FSL_FEATURE_EWM_HAS_PRESCALER 30 base->CLKPRESCALER = config->prescaler; 31 #endif /* FSL_FEATURE_EWM_HAS_PRESCALER */ 32 33 #if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT 34 base->CLKCTRL = config->clockSource; 35 #endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT*/ 36 37 base->CMPL = config->compareLowValue; 38 base->CMPH = config->compareHighValue; 39 base->CTRL = value; 40 } 41 EWM_Deinit(EWM_Type * base)42void EWM_Deinit(EWM_Type *base) 43 { 44 EWM_DisableInterrupts(base, kEWM_InterruptEnable); 45 #if !((defined(FSL_FEATURE_SOC_PCC_COUNT) && FSL_FEATURE_SOC_PCC_COUNT) && \ 46 (defined(FSL_FEATURE_PCC_SUPPORT_EWM_CLOCK_REMOVE) && FSL_FEATURE_PCC_SUPPORT_EWM_CLOCK_REMOVE)) 47 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) 48 CLOCK_DisableClock(kCLOCK_Ewm0); 49 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ 50 #endif /* FSL_FEATURE_PCC_SUPPORT_EWM_CLOCK_REMOVE */ 51 } 52 EWM_GetDefaultConfig(ewm_config_t * config)53void EWM_GetDefaultConfig(ewm_config_t *config) 54 { 55 assert(config); 56 57 config->enableEwm = true; 58 config->enableEwmInput = false; 59 config->setInputAssertLogic = false; 60 config->enableInterrupt = false; 61 #if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT 62 config->clockSource = kEWM_LpoClockSource0; 63 #endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT*/ 64 #if defined(FSL_FEATURE_EWM_HAS_PRESCALER) && FSL_FEATURE_EWM_HAS_PRESCALER 65 config->prescaler = 0U; 66 #endif /* FSL_FEATURE_EWM_HAS_PRESCALER */ 67 config->compareLowValue = 0U; 68 config->compareHighValue = 0xFEU; 69 } 70 EWM_Refresh(EWM_Type * base)71void EWM_Refresh(EWM_Type *base) 72 { 73 uint32_t primaskValue = 0U; 74 75 /* Disable the global interrupt to protect refresh sequence */ 76 primaskValue = DisableGlobalIRQ(); 77 base->SERV = (uint8_t)0xB4U; 78 base->SERV = (uint8_t)0x2CU; 79 EnableGlobalIRQ(primaskValue); 80 } 81