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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/**************************************************************************//**
 * @file     wdt.c
 * @version  V1.00
 * $Revision: 2 $
 * $Date: 16/02/24 17:25 $
 * @brief    Panchip series WDT driver source file
 *
 * @note
 * Copyright (C) 2016 Panchip Technology Corp. All rights reserved.
*****************************************************************************/
#include "PanSeries.h"
#include "pan_wdt.h"
 
/**
 * @brief This function configures parameters of WDT module
 * @param[in] timeoutInterval  Time-out interval period of WDT module. Valid values are:
 *                - \ref WDT_TIMEOUT_2POW4
 *                - \ref WDT_TIMEOUT_2POW6
 *                - \ref WDT_TIMEOUT_2POW8
 *                - \ref WDT_TIMEOUT_2POW10
 *                - \ref WDT_TIMEOUT_2POW12
 *                - \ref WDT_TIMEOUT_2POW14
 *                - \ref WDT_TIMEOUT_2POW15
 *                - \ref WDT_TIMEOUT_2POW16
 *                - \ref WDT_TIMEOUT_2POW17
 *                - \ref WDT_TIMEOUT_2POW18
 *                - \ref WDT_TIMEOUT_2POW19
 *                - \ref WDT_TIMEOUT_2POW20
 *                - \ref WDT_TIMEOUT_2POW21
 *                - \ref WDT_TIMEOUT_2POW22
 *                - \ref WDT_TIMEOUT_2POW23
 *                - \ref WDT_TIMEOUT_2POW24
 * @param[in] resetDelay Reset delay period while WDT time-out happened. Valid values are:
 *                - \ref WDT_RESET_DELAY_2CLK
 *                - \ref WDT_RESET_DELAY_17CLK
 *                - \ref WDT_RESET_DELAY_129CLK
 *                - \ref WDT_RESET_DELAY_1025CLK
 * @param[in] u32EnableReset Enable WDT reset system function. Valid values are TRUE and FALSE
 * @param[in] u32EnableWakeup Enable WDT wake-up system function. Valid values are TRUE and FALSE
 * @return None
 */
void WDT_Configure(WDT_TimeoutDef timeoutInterval,
                    WDT_ResetDelayDef resetDelay,
                    uint32_t u32EnableReset,
                    uint32_t u32EnableWakeup)
{
    uint32_t tmp_reg = WDT->CTL;
    tmp_reg &= ~(WDT_CTL_TOUTSEL_Msk | WDT_CTL_RSTEN_Msk | WDT_CTL_WKEN_Msk);
    tmp_reg |= timeoutInterval |
               (u32EnableReset << WDT_CTL_RSTEN_Pos) |
               (u32EnableWakeup << WDT_CTL_WKEN_Pos);
    tmp_reg |= WDT_CTL_RST_REGION_SEL_Msk;  // Reset both 1.2v and 3v region
    WDT->CTL = tmp_reg;
    WDT->ALTCTL = resetDelay;
}
 
/**
 * @brief This function enables the WDT module and starts counting
 * @param None
 * @note This bit is write protected. Do SYS_UnlockReg() before setting this bit.
 * @return None
 */
void WDT_Start(void)
{
    WDT->CTL |= WDT_CTL_WDTEN_Msk;
}
 
/**
 * @brief This function disables the WDT module and resets the internal counter
 * @param None
 * @note This bit is write protected. Do SYS_UnlockReg() before setting this bit.
 * @return None
 */
void WDT_Stop(void)
{
    WDT->CTL &= ~WDT_CTL_WDTEN_Msk;
}
 
/**
 * @brief This function make WDT module start counting with different time-out interval
 * @param[in] timeoutInterval  Time-out interval period of WDT module. Valid values are:
 *                - \ref WDT_TIMEOUT_2POW4
 *                - \ref WDT_TIMEOUT_2POW6
 *                - \ref WDT_TIMEOUT_2POW8
 *                - \ref WDT_TIMEOUT_2POW10
 *                - \ref WDT_TIMEOUT_2POW12
 *                - \ref WDT_TIMEOUT_2POW14
 *                - \ref WDT_TIMEOUT_2POW15
 *                - \ref WDT_TIMEOUT_2POW16
 *                - \ref WDT_TIMEOUT_2POW17
 *                - \ref WDT_TIMEOUT_2POW18
 *                - \ref WDT_TIMEOUT_2POW19
 *                - \ref WDT_TIMEOUT_2POW20
 *                - \ref WDT_TIMEOUT_2POW21
 *                - \ref WDT_TIMEOUT_2POW22
 *                - \ref WDT_TIMEOUT_2POW23
 *                - \ref WDT_TIMEOUT_2POW24
 * @param[in] resetDelay Reset delay period while WDT time-out happened. Valid values are:
 *                - \ref WDT_RESET_DELAY_2CLK
 *                - \ref WDT_RESET_DELAY_17CLK
 *                - \ref WDT_RESET_DELAY_129CLK
 *                - \ref WDT_RESET_DELAY_1025CLK
 * @param[in] u32EnableReset Enable WDT reset system function. Valid values are TRUE and FALSE
 * @param[in] u32EnableWakeup Enable WDT wake-up system function. Valid values are TRUE and FALSE
 * @return None
 */
void  WDT_Open(WDT_TimeoutDef timeoutInterval,
               WDT_ResetDelayDef resetDelay,
               uint32_t u32EnableReset,
               uint32_t u32EnableWakeup)
{
    uint32_t tmp_reg = WDT->CTL;
    tmp_reg &= ~(WDT_CTL_TOUTSEL_Msk | WDT_CTL_WDTEN_Msk | WDT_CTL_RSTEN_Msk | WDT_CTL_WKEN_Msk);
    tmp_reg |= timeoutInterval | WDT_CTL_WDTEN_Msk |
               (u32EnableReset << WDT_CTL_RSTEN_Pos) |
               (u32EnableWakeup << WDT_CTL_WKEN_Pos);
    tmp_reg |= WDT_CTL_RST_REGION_SEL_Msk;  // Reset both 1.2v and 3v region
    WDT->CTL = tmp_reg;
    WDT->ALTCTL = resetDelay;
    return;
}
 
/**
 * @brief This function stops WDT counting and disable WDT module
 * @param None
 * @return None
 */
void WDT_Close(void)
{
    WDT->CTL = 0;
    WDT->CTL |= (WDT_CTL_TOF_Msk | WDT_CTL_IF_Msk | WDT_CTL_RSTF_Msk | WDT_CTL_WKF_Msk);
    return;
}
 
/**
 * @brief This function enables the WDT time-out interrupt
 * @param None
 * @return None
 */
void WDT_EnableInt(void)
{
    WDT->CTL |= WDT_CTL_INTEN_Msk;
    return;
}
 
/**
 * @brief This function disables the WDT time-out interrupt
 * @param None
 * @return None
 */
void WDT_DisableInt(void)
{
    WDT->CTL &= ~WDT_CTL_INTEN_Msk;
    return;
}
 
 
/*@}*/ /* end of group PN501_WDT_EXPORTED_FUNCTIONS */
 
/*@}*/ /* end of group PN501_WDT_Driver */
 
/*@}*/ /* end of group PN501_Device_Driver */
 
/*** (C) COPYRIGHT 2016 Panchip Technology Corp. ***/