void WDOG_Init(WDOG_Type *base, const wdog_config_t *config) { assert(config); uint32_t value = 0U; uint32_t primaskValue = 0U; value = WDOG_STCTRLH_WDOGEN(config->enableWdog) | WDOG_STCTRLH_CLKSRC(config->clockSource) | WDOG_STCTRLH_IRQRSTEN(config->enableInterrupt) | WDOG_STCTRLH_WINEN(config->enableWindowMode) | WDOG_STCTRLH_ALLOWUPDATE(config->enableUpdate) | WDOG_STCTRLH_DBGEN(config->workMode.enableDebug) | WDOG_STCTRLH_STOPEN(config->workMode.enableStop) | #if defined(FSL_FEATURE_WDOG_HAS_WAITEN) && FSL_FEATURE_WDOG_HAS_WAITEN WDOG_STCTRLH_WAITEN(config->workMode.enableWait) | #endif /* FSL_FEATURE_WDOG_HAS_WAITEN */ WDOG_STCTRLH_DISTESTWDOG(1U); /* Disable the global interrupts. Otherwise, an interrupt could effectively invalidate the unlock sequence * and the WCT may expire. After the configuration finishes, re-enable the global interrupts. */ primaskValue = DisableGlobalIRQ(); WDOG_Unlock(base); /* Wait one bus clock cycle */ base->RSTCNT = 0U; /* Set configruation */ base->PRESC = WDOG_PRESC_PRESCVAL(config->prescaler); base->WINH = (uint16_t)((config->windowValue >> 16U) & 0xFFFFU); base->WINL = (uint16_t)((config->windowValue) & 0xFFFFU); base->TOVALH = (uint16_t)((config->timeoutValue >> 16U) & 0xFFFFU); base->TOVALL = (uint16_t)((config->timeoutValue) & 0xFFFFU); base->STCTRLH = value; EnableGlobalIRQ(primaskValue); }
/*FUNCTION********************************************************************** * * Function Name : WDOG_HAL_SetConfig * Description : Configures WDOG control register. * *END**************************************************************************/ void WDOG_HAL_SetConfig(WDOG_Type * base, const wdog_config_t *configPtr) { assert(configPtr); uint32_t value = 0; value = WDOG_STCTRLH_WDOGEN(configPtr->wdogEnable) | WDOG_STCTRLH_CLKSRC(configPtr->clkSrc) | WDOG_STCTRLH_IRQRSTEN(configPtr->intEnable) | WDOG_STCTRLH_WINEN(configPtr->winEnable) | WDOG_STCTRLH_ALLOWUPDATE(configPtr->updateEnable) | WDOG_STCTRLH_DBGEN(configPtr->workMode.kWdogEnableInDebugMode) | WDOG_STCTRLH_STOPEN(configPtr->workMode.kWdogEnableInStopMode) | #if FSL_FEATURE_WDOG_HAS_WAITEN WDOG_STCTRLH_WAITEN(configPtr->workMode.kWdogEnableInWaitMode) | #endif WDOG_STCTRLH_DISTESTWDOG(1U); WDOG_BWR_PRESC_PRESCVAL(base, configPtr->prescaler); WDOG_WR_WINH(base, (uint16_t)((configPtr->windowValue>>16U) & 0xFFFFU)); WDOG_WR_WINL(base, (uint16_t)((configPtr->windowValue) & 0xFFFFU)); WDOG_WR_TOVALH(base, (uint16_t)((configPtr->timeoutValue >> 16U) & 0xFFFFU)); WDOG_WR_TOVALL(base, (uint16_t)((configPtr->timeoutValue) & 0xFFFFU)); WDOG_WR_STCTRLH(base, value); }