summaryrefslogtreecommitdiff
path: root/bsp/acm32/acm32f0x0-nucleo/libraries/HAL_Driver/Src/HAL_IWDT.c
blob: 5383191db6dc35b177b090affcf1570f8f9e5f30 (plain)
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
/***********************************************************************
 * Filename    : HAL_IWDT.c
 * Description : HAL IWDT driver source file
 * Author(s)   : CWT
 * version     : V1.0
 * Modify date : 2020-04-17
 ***********************************************************************/
#include  "ACM32Fxx_HAL.h"


HAL_StatusTypeDef HAL_IWDT_Init(IWDT_HandleTypeDef * hidt)
{
    if (hidt == NULL)
    {
        return HAL_ERROR;
    }

    System_Delay(1);

    System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
    System_Enable_RC32K();
    System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_IWDT, FUNC_ENABLE);
    /*Enable IWDT  */
    hidt->Instance->CMDR = IWDT_ENABLE_COMMAND;
    System_Delay(10);
    /*Enable Write  */
    hidt->Instance->CMDR = IWDT_WRITE_ENABLE_COMMAND;
    System_Delay(10);

    hidt->Instance->PR = hidt->Init.Prescaler;
    hidt->Instance->RLR = hidt->Init.Reload;
    hidt->Instance->WINR = hidt->Init.Window;
    hidt->Instance->WUTR = hidt->Init.Wakeup;
    System_Delay(1);
    while(hidt->Instance->SR & (0x0F)){}; // wait for configuration done

    if (hidt->Init.Reload > hidt->Init.Wakeup)
    {
        /*Enable Wake up  */
        hidt->Instance->CMDR = IWDT_WAKEUP_ENABLE_COMMAND;
    }

    hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
    System_Delay(1);
    while(hidt->Instance->SR & (1 << 4)){};

    return HAL_OK;

}

HAL_StatusTypeDef HAL_IWDT_Kick_Watchdog_Wait_For_Done(IWDT_HandleTypeDef * hidt)
{
    hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
    System_Delay(1);
    while(hidt->Instance->SR & (1 << 4)){};  //wait for kick watchdog done

    return HAL_OK;
}