/** ********************************************************************************* * * @file ald_wdt.c * @brief WDT module driver. * * @version V1.0 * @date 18 Dec 2017 * @author AE Team * @note * * Copyright (C) Shanghai Eastsoft Microelectronics Co. Ltd. All rights reserved. * ********************************************************************************* */ #include "ald_conf.h" #include "ald_wdt.h" /** @addtogroup ES32FXXX_ALD * @{ */ /** @defgroup WDT WDT * @brief WDT module driver * @{ */ #ifdef ALD_WDT /** @defgroup WWDT_Public_Functions WWDT Public Functions * @brief Init and configure WWDT function * @{ */ /** * @brief Initializes the WWDT according to the specified parameters. * @param load: Specifies the free-running downcounter value. * @param win: specifics the no dog windows, * the parameter can be one of the following values: * @arg @ref WWDT_WIN_25 No dog window size: 25% * @arg @ref WWDT_WIN_50 No dog window size: 50% * @arg @ref WWDT_WIN_75 No dog window size: 75% * @arg @ref WWDT_WIN_00 No dog window size: 0% * @param interrupt: Enable or disable interrupt. * @retval None */ void ald_wwdt_init(uint32_t load, wwdt_win_t win, type_func_t interrupt) { assert_param(IS_WWDT_WIN_TYPE(win)); assert_param(IS_FUNC_STATE(interrupt)); WWDT_UNLOCK(); WRITE_REG(WWDT->LOAD, load); MODIFY_REG(WWDT->CON, WWDT_CON_WWDTWIN_MSK, win << WWDT_CON_WWDTWIN_POSS); SET_BIT(WWDT->CON, WWDT_CON_CLKS_MSK); SET_BIT(WWDT->CON, WWDT_CON_RSTEN_MSK); MODIFY_REG(WWDT->CON, WWDT_CON_IE_MSK, interrupt << WWDT_CON_IE_POS); WWDT_LOCK(); return; } /** * @brief Start the WWDT * @retval None */ void ald_wwdt_start(void) { WWDT_UNLOCK(); SET_BIT(WWDT->CON, WWDT_CON_EN_MSK); WWDT_LOCK(); return; } /** * @brief Get the free-running downcounter value * @retval Value */ uint32_t ald_wwdt_get_value(void) { return WWDT->VALUE; } /** * @brief Get interrupt state * @retval Value */ it_status_t ald_wwdt_get_flag_status(void) { if (READ_BIT(WWDT->RIS, WWDT_RIS_WWDTIF_MSK)) return SET; return RESET; } /** * @brief Clear interrupt state * @retval None */ void ald_wwdt_clear_flag_status(void) { WRITE_REG(WWDT->INTCLR, 1); return; } /** * @brief Refreshes the WWDT * @retval None */ void ald_wwdt_feed_dog(void) { WWDT_UNLOCK(); WRITE_REG(WWDT->INTCLR, 0x1); WWDT_LOCK(); return; } /** * @} */ /** @defgroup IWDT_Public_Functions IWDT Public Functions * @brief Init and configure IWDT function * @{ */ /** * @brief Initializes the IWDG according to the specified parameters. * @param load: Specifies the free-running downcounter value. * @param interrupt: Enable or disable interrupt. * @retval None */ void ald_iwdt_init(uint32_t load, type_func_t interrupt) { assert_param(IS_FUNC_STATE(interrupt)); IWDT_UNLOCK(); WRITE_REG(IWDT->LOAD, load); SET_BIT(IWDT->CON, IWDT_CON_CLKS_MSK); SET_BIT(IWDT->CON, IWDT_CON_RSTEN_MSK); MODIFY_REG(IWDT->CON, IWDT_CON_IE_MSK, interrupt << IWDT_CON_IE_POS); IWDT_LOCK(); return; } /** * @brief Start the IWDT * @retval None */ void ald_iwdt_start(void) { IWDT_UNLOCK(); SET_BIT(IWDT->CON, IWDT_CON_EN_MSK); IWDT_LOCK(); return; } /** * @brief Get the free-running downcounter value * @retval Value */ uint32_t ald_iwdt_get_value(void) { return IWDT->VALUE; } /** * @brief Get interrupt state * @retval Value */ it_status_t ald_iwdt_get_flag_status(void) { if (READ_BIT(IWDT->RIS, IWDT_RIS_WDTIF_MSK)) return SET; return RESET; } /** * @brief Clear interrupt state * @retval None */ void ald_iwdt_clear_flag_status(void) { WRITE_REG(IWDT->INTCLR, 1); return; } /** * @brief Refreshes the WWDT * @retval None */ void ald_iwdt_feed_dog(void) { IWDT_UNLOCK(); WRITE_REG(IWDT->INTCLR, 1); IWDT_LOCK(); return; } /** * @} */ #endif /* ALD_WDT */ /** * @} */ /** * @} */