1 /*********************************************************************** 2 * Filename : HAL_WDT.c 3 * Description : HAL WDT driver source file 4 * Author(s) : CWT 5 * version : V1.0 6 * Modify date : 2020-04-17 7 ***********************************************************************/ 8 #include "ACM32Fxx_HAL.h" 9 10 /************************************************************************ 11 * function : HAL_WDT_Feed 12 * Description: WDT feed. 13 * input : 14 * none 15 * return: none 16 ************************************************************************/ HAL_WDT_Feed(WDT_HandleTypeDef * hwdt)17void HAL_WDT_Feed(WDT_HandleTypeDef* hwdt) 18 { 19 hwdt->Instance->FEED = 0xAA55A55A; 20 } 21 /************************************************************************ 22 * function : HAL_WDT_IRQHandler 23 * Description: WDT interrupt service routine. 24 * input : 25 * none 26 * return: none 27 ************************************************************************/ HAL_WDT_IRQHandler(WDT_HandleTypeDef * hwdt)28void HAL_WDT_IRQHandler(WDT_HandleTypeDef* hwdt) 29 { 30 volatile uint32_t wdt_ris = 0; 31 wdt_ris = hwdt->Instance->RIS; 32 HAL_WDT_Feed(hwdt); 33 NVIC_ClearPendingIRQ(WDT_IRQn); 34 } 35 36 /************************************************************************ 37 * function : HAL_WDT_Init 38 * Description: WDT initiation. 39 * input : 40 * pinit initiation parameters 41 * return: none 42 ************************************************************************/ HAL_WDT_Init(WDT_HandleTypeDef * hwdt)43void HAL_WDT_Init(WDT_HandleTypeDef* hwdt) 44 { 45 System_Module_Enable(EN_WDT); 46 System_Delay(1); 47 System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE); 48 System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE); 49 50 hwdt->Instance->LOAD = hwdt->Init.WDTLoad; 51 hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6); 52 53 if (WDT_MODE_INT == hwdt->Init.WDTMode) 54 { 55 hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME; 56 HAL_WDT_Int_Enable(hwdt); 57 } 58 } 59 60 /************************************************************************ 61 * function : HAL_WDT_Start 62 * Description: WDT start 63 * input : none 64 * 65 * return: none 66 ************************************************************************/ HAL_WDT_Start(WDT_HandleTypeDef * hwdt)67void HAL_WDT_Start(WDT_HandleTypeDef* hwdt) 68 { 69 hwdt->Instance->CTRL |= WDT_ENABLE; 70 } 71 72 /************************************************************************ 73 * function : WDT_Stop 74 * Description: WDT stop 75 * input : none 76 * 77 * return: none 78 ************************************************************************/ HAL_WDT_Stop(WDT_HandleTypeDef * hwdt)79void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt) 80 { 81 hwdt->Instance->CTRL &= WDT_DISABLE; 82 } 83 84 /************************************************************************ 85 * function : WDT_Int_Enable 86 * Description: WDT int enable 87 * input : none 88 * 89 * return: none 90 ************************************************************************/ HAL_WDT_Int_Enable(WDT_HandleTypeDef * hwdt)91void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt) 92 { 93 hwdt->Instance->CTRL |= WDT_INT_ENABLE; 94 NVIC_ClearPendingIRQ(WDT_IRQn); 95 NVIC_EnableIRQ(WDT_IRQn); 96 } 97 98 /************************************************************************ 99 * function : WDT_Int_Disable 100 * Description: WDT int disable 101 * input : none 102 * 103 * return: none 104 ************************************************************************/ HAL_WDT_Int_Disable(WDT_HandleTypeDef * hwdt)105void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt) 106 { 107 hwdt->Instance->CTRL &= WDT_INT_DISABLE; 108 } 109 110 111