HAL_WDT.c 3.4 KB
Newer Older
Z
ze9hyr 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
/***********************************************************************
 * Filename    : HAL_WDT.c
 * Description : HAL WDT driver source file
 * Author(s)   : CWT
 * version     : V1.0
 * Modify date : 2020-04-17
 ***********************************************************************/
#include  "ACM32Fxx_HAL.h"

/************************************************************************
 * function   : HAL_WDT_Feed
 * Description: WDT feed.
 * input :
 *         none
 * return: none
 ************************************************************************/
void HAL_WDT_Feed(WDT_HandleTypeDef* hwdt)
{
    hwdt->Instance->FEED = 0xAA55A55A;
}
/************************************************************************
 * function   : HAL_WDT_IRQHandler
 * Description: WDT interrupt service routine.
 * input :
 *         none
 * return: none
 ************************************************************************/
void HAL_WDT_IRQHandler(WDT_HandleTypeDef* hwdt)
{
#ifdef __GNUC__
    #pragma GCC diagnostic push   
    #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#endif
    volatile uint32_t wdt_ris = 0;
    wdt_ris = hwdt->Instance->RIS;
    HAL_WDT_Feed(hwdt);
    NVIC_ClearPendingIRQ(WDT_IRQn);
#ifdef __GNUC__
    #pragma GCC diagnostic pop
#endif
}

/************************************************************************
 * function   : HAL_WDT_Init
 * Description: WDT initiation.
 * input :
 *         pinit initiation parameters
 * return: none
 ************************************************************************/
void HAL_WDT_Init(WDT_HandleTypeDef* hwdt)
{
    System_Module_Enable(EN_WDT);
    System_Delay(1);
    System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
    System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE);

    hwdt->Instance->LOAD = hwdt->Init.WDTLoad;
    hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6);

    if (WDT_MODE_INT == hwdt->Init.WDTMode)
    {
        hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME;
        HAL_WDT_Int_Enable(hwdt);
    }
}

/************************************************************************
 * function   : HAL_WDT_Start
 * Description: WDT start
 * input : none
 *
 * return: none
 ************************************************************************/
void HAL_WDT_Start(WDT_HandleTypeDef* hwdt)
{
    hwdt->Instance->CTRL |= WDT_ENABLE;
}

/************************************************************************
 * function   : WDT_Stop
 * Description: WDT stop
 * input : none
 *
 * return: none
 ************************************************************************/
void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt)
{
    hwdt->Instance->CTRL &= WDT_DISABLE;
}

/************************************************************************
 * function   : WDT_Int_Enable
 * Description: WDT int enable
 * input : none
 *
 * return: none
 ************************************************************************/
void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt)
{
    hwdt->Instance->CTRL |= WDT_INT_ENABLE;
    NVIC_ClearPendingIRQ(WDT_IRQn);
    NVIC_EnableIRQ(WDT_IRQn);
}

/************************************************************************
 * function   : WDT_Int_Disable
 * Description: WDT int disable
 * input : none
 *
 * return: none
 ************************************************************************/
void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt)
{
    hwdt->Instance->CTRL &= WDT_INT_DISABLE;
}