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_wdog32.h" 10 11 /******************************************************************************* 12 * Code 13 ******************************************************************************/ 14 WDOG32_ClearStatusFlags(WDOG_Type * base,uint32_t mask)15void WDOG32_ClearStatusFlags(WDOG_Type *base, uint32_t mask) 16 { 17 if (mask & kWDOG32_InterruptFlag) 18 { 19 base->CS |= WDOG_CS_FLG_MASK; 20 } 21 } 22 WDOG32_GetDefaultConfig(wdog32_config_t * config)23void WDOG32_GetDefaultConfig(wdog32_config_t *config) 24 { 25 assert(config); 26 27 config->enableWdog32 = true; 28 config->clockSource = kWDOG32_ClockSource1; 29 config->prescaler = kWDOG32_ClockPrescalerDivide1; 30 config->workMode.enableWait = true; 31 config->workMode.enableStop = false; 32 config->workMode.enableDebug = false; 33 config->testMode = kWDOG32_TestModeDisabled; 34 config->enableUpdate = true; 35 config->enableInterrupt = false; 36 config->enableWindowMode = false; 37 config->windowValue = 0U; 38 config->timeoutValue = 0xFFFFU; 39 } 40 WDOG32_Init(WDOG_Type * base,const wdog32_config_t * config)41void WDOG32_Init(WDOG_Type *base, const wdog32_config_t *config) 42 { 43 assert(config); 44 45 uint32_t value = 0U; 46 uint32_t primaskValue = 0U; 47 48 value = WDOG_CS_EN(config->enableWdog32) | WDOG_CS_CLK(config->clockSource) | WDOG_CS_INT(config->enableInterrupt) | 49 WDOG_CS_WIN(config->enableWindowMode) | WDOG_CS_UPDATE(config->enableUpdate) | 50 WDOG_CS_DBG(config->workMode.enableDebug) | WDOG_CS_STOP(config->workMode.enableStop) | 51 WDOG_CS_WAIT(config->workMode.enableWait) | WDOG_CS_PRES(config->prescaler) | WDOG_CS_CMD32EN(true) | 52 WDOG_CS_TST(config->testMode); 53 54 /* Disable the global interrupts. Otherwise, an interrupt could effectively invalidate the unlock sequence 55 * and the WCT may expire. After the configuration finishes, re-enable the global interrupts. */ 56 primaskValue = DisableGlobalIRQ(); 57 WDOG32_Unlock(base); 58 base->WIN = config->windowValue; 59 base->TOVAL = config->timeoutValue; 60 base->CS = value; 61 EnableGlobalIRQ(primaskValue); 62 } 63 WDOG32_Deinit(WDOG_Type * base)64void WDOG32_Deinit(WDOG_Type *base) 65 { 66 uint32_t primaskValue = 0U; 67 68 /* Disable the global interrupts */ 69 primaskValue = DisableGlobalIRQ(); 70 WDOG32_Unlock(base); 71 WDOG32_Disable(base); 72 EnableGlobalIRQ(primaskValue); 73 } 74