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 #ifdef __GNUC__ 31 #pragma GCC diagnostic push 32 #pragma GCC diagnostic ignored "-Wunused-but-set-variable" 33 #endif 34 volatile uint32_t wdt_ris = 0; 35 wdt_ris = hwdt->Instance->RIS; 36 HAL_WDT_Feed(hwdt); 37 NVIC_ClearPendingIRQ(WDT_IRQn); 38 #ifdef __GNUC__ 39 #pragma GCC diagnostic pop 40 #endif 41 } 42 43 /************************************************************************ 44 * function : HAL_WDT_Init 45 * Description: WDT initiation. 46 * input : 47 * pinit initiation parameters 48 * return: none 49 ************************************************************************/ HAL_WDT_Init(WDT_HandleTypeDef * hwdt)50void HAL_WDT_Init(WDT_HandleTypeDef* hwdt) 51 { 52 System_Module_Enable(EN_WDT); 53 System_Delay(1); 54 System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE); 55 System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE); 56 57 hwdt->Instance->LOAD = hwdt->Init.WDTLoad; 58 hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6); 59 60 if (WDT_MODE_INT == hwdt->Init.WDTMode) 61 { 62 hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME; 63 HAL_WDT_Int_Enable(hwdt); 64 } 65 } 66 67 /************************************************************************ 68 * function : HAL_WDT_Start 69 * Description: WDT start 70 * input : none 71 * 72 * return: none 73 ************************************************************************/ HAL_WDT_Start(WDT_HandleTypeDef * hwdt)74void HAL_WDT_Start(WDT_HandleTypeDef* hwdt) 75 { 76 hwdt->Instance->CTRL |= WDT_ENABLE; 77 } 78 79 /************************************************************************ 80 * function : WDT_Stop 81 * Description: WDT stop 82 * input : none 83 * 84 * return: none 85 ************************************************************************/ HAL_WDT_Stop(WDT_HandleTypeDef * hwdt)86void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt) 87 { 88 hwdt->Instance->CTRL &= WDT_DISABLE; 89 } 90 91 /************************************************************************ 92 * function : WDT_Int_Enable 93 * Description: WDT int enable 94 * input : none 95 * 96 * return: none 97 ************************************************************************/ HAL_WDT_Int_Enable(WDT_HandleTypeDef * hwdt)98void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt) 99 { 100 hwdt->Instance->CTRL |= WDT_INT_ENABLE; 101 NVIC_ClearPendingIRQ(WDT_IRQn); 102 NVIC_EnableIRQ(WDT_IRQn); 103 } 104 105 /************************************************************************ 106 * function : WDT_Int_Disable 107 * Description: WDT int disable 108 * input : none 109 * 110 * return: none 111 ************************************************************************/ HAL_WDT_Int_Disable(WDT_HandleTypeDef * hwdt)112void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt) 113 { 114 hwdt->Instance->CTRL &= WDT_INT_DISABLE; 115 } 116 117 118