1 /**
2  * @file    wdt.h
3  * @brief   Watchdog timer (WDT) function prototypes and data types.
4  */
5 
6 /******************************************************************************
7  *
8  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
9  * Analog Devices, Inc.),
10  * Copyright (C) 2023-2024 Analog Devices, Inc.
11  *
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  *     http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  *
24  ******************************************************************************/
25 
26 /* Define to prevent redundant inclusion */
27 #ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32660_WDT_H_
28 #define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32660_WDT_H_
29 
30 /* **** Includes **** */
31 #include <stdint.h>
32 #include "mxc_device.h"
33 #include "wdt_regs.h"
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 /**
40  * @defgroup wdt Watchdog Timer (WDT)
41  * @ingroup periphlibs
42  * @{
43  */
44 
45 /* **** Definitions **** */
46 
47 /** @brief Watchdog period enumeration.
48     Used to configure the period of the watchdog interrupt */
49 typedef enum {
50     MXC_WDT_PERIOD_2_31 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW31, ///< Period 2^31
51     MXC_WDT_PERIOD_2_30 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW30, ///< Period 2^30
52     MXC_WDT_PERIOD_2_29 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW29, ///< Period 2^29
53     MXC_WDT_PERIOD_2_28 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW28, ///< Period 2^28
54     MXC_WDT_PERIOD_2_27 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW27, ///< Period 2^27
55     MXC_WDT_PERIOD_2_26 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW26, ///< Period 2^26
56     MXC_WDT_PERIOD_2_25 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW25, ///< Period 2^25
57     MXC_WDT_PERIOD_2_24 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW24, ///< Period 2^24
58     MXC_WDT_PERIOD_2_23 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW23, ///< Period 2^23
59     MXC_WDT_PERIOD_2_22 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW22, ///< Period 2^22
60     MXC_WDT_PERIOD_2_21 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW21, ///< Period 2^21
61     MXC_WDT_PERIOD_2_20 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW20, ///< Period 2^20
62     MXC_WDT_PERIOD_2_19 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW19, ///< Period 2^19
63     MXC_WDT_PERIOD_2_18 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW18, ///< Period 2^18
64     MXC_WDT_PERIOD_2_17 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW17, ///< Period 2^17
65     MXC_WDT_PERIOD_2_16 = MXC_S_WDT_CTRL_INT_PERIOD_WDT2POW16, ///< Period 2^16
66 } mxc_wdt_period_t;
67 
68 /* **** Function Prototypes **** */
69 
70 /**
71  * @brief       Initialize the Watchdog Timer
72  * @param       wdt      Pointer to the watchdog registers
73  * @return      See \ref MXC_Error_Codes for the list of error codes.
74  */
75 int MXC_WDT_Init(mxc_wdt_regs_t *wdt);
76 
77 /**
78  * @brief Shutdown the Watchdog Timer
79  * @param       wdt     Pointer to the watchdog registers
80  * @return      See \ref MXC_Error_Codes for the list of error codes.
81  */
82 int MXC_WDT_Shutdown(mxc_wdt_regs_t *wdt);
83 
84 /**
85  * @brief       Set the period of the watchdog interrupt.
86  * @param       wdt     Pointer to watchdog registers.
87  * @param       period  Enumeration of the desired watchdog period.
88  */
89 void MXC_WDT_SetIntPeriod(mxc_wdt_regs_t *wdt, mxc_wdt_period_t period);
90 
91 /**
92  * @brief       Set the period of the watchdog reset.
93  * @param       wdt     Pointer to watchdog registers.
94  * @param       period  Enumeration of the desired watchdog period.
95  */
96 void MXC_WDT_SetResetPeriod(mxc_wdt_regs_t *wdt, mxc_wdt_period_t period);
97 
98 /**
99  * @brief       Enable the watchdog timer.
100  * @param       wdt     Pointer to watchdog registers.
101  */
102 void MXC_WDT_Enable(mxc_wdt_regs_t *wdt);
103 
104 /**
105  * @brief       Disable the watchdog timer.
106  * @param       wdt     Pointer to watchdog registers.
107  */
108 void MXC_WDT_Disable(mxc_wdt_regs_t *wdt);
109 
110 /**
111  * @brief       Enable the watchdog interrupt.
112  * @param       wdt     Pointer to watchdog registers.
113  */
114 void MXC_WDT_EnableInt(mxc_wdt_regs_t *wdt);
115 
116 /**
117  * @brief       Enable the watchdog reset.
118  * @param       wdt     Pointer to watchdog registers.
119  */
120 void MXC_WDT_EnableReset(mxc_wdt_regs_t *wdt);
121 
122 /**
123  * @brief       Enable the watchdog interrupt.
124  * @param       wdt     Pointer to watchdog registers.
125  */
126 void MXC_WDT_DisableInt(mxc_wdt_regs_t *wdt);
127 
128 /**
129  * @brief       Enable the watchdog reset.
130  * @param       wdt     Pointer to watchdog registers.
131  */
132 void MXC_WDT_DisableReset(mxc_wdt_regs_t *wdt);
133 
134 /**
135  * @brief       Reset the watchdog timer.
136  * @param       wdt     Pointer to watchdog registers.
137  */
138 void MXC_WDT_ResetTimer(mxc_wdt_regs_t *wdt);
139 
140 /**
141  * @brief       Get the status of the reset flag.
142  * @param       wdt     Pointer to watchdog registers.
143  * @returns     1 if the previous reset was caused by the watchdog, 0 otherwise.
144  */
145 int MXC_WDT_GetResetFlag(mxc_wdt_regs_t *wdt);
146 
147 /**
148  * @brief       Clears the reset flag.
149  * @param       wdt     Pointer to watchdog registers.
150  */
151 void MXC_WDT_ClearResetFlag(mxc_wdt_regs_t *wdt);
152 
153 /**
154  * @brief       Get the status of the interrupt flag.
155  * @param       wdt     Pointer to watchdog registers.
156  * @returns     1 if the interrupt is pending, 0 otherwise.
157  */
158 int MXC_WDT_GetIntFlag(mxc_wdt_regs_t *wdt);
159 
160 /**
161  * @brief       Clears the interrupt flag.
162  * @param       wdt     Pointer to watchdog registers.
163  */
164 void MXC_WDT_ClearIntFlag(mxc_wdt_regs_t *wdt);
165 
166 /**@} end of group wdt */
167 
168 #ifdef __cplusplus
169 }
170 #endif
171 
172 #endif // LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32660_WDT_H_
173