WXK
2024-09-18 05e2e954bd127de378a9d1dfbb0ed95d725aad63
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
/**************************************************************************//**
* @file     pan_hal_wdt.c
* @version  V0.0.0
* $Revision: 1 $
* $Date:    23/09/10 $
* @brief    Panchip series WDT (Watchdog Timer) HAL source file.
* @note
* Copyright (C) 2023 Panchip Technology Corp. All rights reserved.
*****************************************************************************/
#include "pan_hal.h"
 
WDT_CallbackFunc wdt_callback[1];
 
void HAL_WDT_Init(WDT_Init_Opt *wdt)
{
    // Unlock Regs before Enable WDT as several WDT Regs are write-protected
    SYS_UnlockReg();
 
    //Enable WDT Clock
    CLK_APB1PeriphClockCmd(CLK_APB1Periph_WDT, ENABLE);
 
    // Select Clock Source
    CLK_SetWdtClkSrc(wdt->ClockSource);
 
    // Enable WDT, ENABLE Reset Mode, disable Wakeup Signal
    WDT_Open(wdt->Timeout, wdt->ResetDelay, wdt->ResetSwitch, wdt->WakeupSwitch);
 
    // Re-lock Regs
    SYS_LockReg();
}
 
void HAL_WDT_DeInit(void)
{
    SYS_UnlockReg();
    // Disable WDT, need to ensure Regs are unlocked
    WDT_Close();
    
    //Disable WDT Clock
    CLK_APB1PeriphClockCmd(CLK_APB1Periph_WDT, DISABLE);
 
    // Re-lock Regs
    SYS_LockReg();
}
 
void HAL_WDT_Feed(WDT_Init_Opt *wdt)
{
    SYS_UnlockReg();
    WDT_ResetCounter();
    SYS_LockReg();
}
 
void HAL_WDT_Init_INT(WDT_Interrupt_Opt *opt)
{    
    wdt_callback[0] = opt->CallbackFunc;
    // Unlock Regs
    SYS_UnlockReg();
    WDT_EnableInt();
    NVIC_EnableIRQ(WDT_IRQn);
    // Re-Lock Regs
    SYS_LockReg();
}
 
void HAL_WDT_DeInit_INT(void)
{
    // Unlock Regs
    SYS_UnlockReg();
    wdt_callback[0] = NULL;
    WDT_DisableInt();
    // Re-Lock Regs
    SYS_LockReg();
}
 
void WDT_IRQHandler(void)
{
    // Clear Timeout Int Flag
    WDT_ClearTimeoutIntFlag();
 
    if (wdt_callback[0] != NULL)
    {
        wdt_callback[0]();
    }
 
 
}