1 /*************************************************************************************
2 * Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd ("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 /******************************************************************************/
43 /** \file wdt.c
44 **
45 ** WDT function driver API.
46 ** @link WdtGroup Some description @endlink
47 **
48 ** - 2017-05-17 1.0 CJ First version for Device Driver Library of Module.
49 **
50 ******************************************************************************/
51
52 /******************************************************************************/
53 /* Include files */
54 /******************************************************************************/
55 #include "wdt.h"
56
57 /**
58 ******************************************************************************
59 ** \defgroup WdtGroup
60 **
61 ******************************************************************************/
62 //@{
63
64 /******************************************************************************/
65 /* Local function prototypes ('static') */
66 /******************************************************************************/
67 static func_ptr_t pfnWdtCallback = NULL;
68 /**
69 ******************************************************************************
70 ** \brief WDT溢出时间设置函数
71 **
72 ** \param [in] u8LoadValue 溢出时间
73 **
74 ** \retval 无
75 **
76 ******************************************************************************/
Wdt_WriteWdtLoad(uint8_t u8LoadValue)77 void Wdt_WriteWdtLoad(uint8_t u8LoadValue)
78 {
79 M0P_WDT->CON_f.WOV = u8LoadValue;
80 }
81 /**
82 ******************************************************************************
83 ** \brief WDT初始化函数
84 **
85 ** \param [in] stcConfig 初始化结构
86 **
87 ** \retval Ok
88 **
89 ******************************************************************************/
Wdt_Init(stc_wdt_config_t * pstcConfig)90 en_result_t Wdt_Init(stc_wdt_config_t* pstcConfig)
91 {
92 en_result_t enRet = Error;
93 ASSERT(NULL != pstcConfig);
94 Wdt_WriteWdtLoad(pstcConfig->u8LoadValue);
95 pfnWdtCallback = pstcConfig->pfnWdtIrqCb;
96 M0P_WDT->CON_f.WINT_EN = pstcConfig->enResetEnable;
97 if(pstcConfig->enResetEnable)
98 {
99 EnableNvic(WDT_IRQn,IrqLevel3,TRUE);
100 }
101 enRet = Ok;
102 return enRet;
103 }
104 /**
105 ******************************************************************************
106 ** \brief WDT复位及启动函数
107 **
108 ** \param [in] 无
109 **
110 ** \retval Ok
111 **
112 ******************************************************************************/
Wdt_Start(void)113 en_result_t Wdt_Start(void)
114 {
115 en_result_t enRet = Error;
116 M0P_WDT->RST = 0x1E;
117 M0P_WDT->RST = 0xE1;
118 enRet = Ok;
119 return enRet;
120 }
121 /**
122 ******************************************************************************
123 ** \brief WDT复位及启动函数
124 **
125 ** \param [in] 无
126 **
127 ** \retval Ok
128 **
129 ******************************************************************************/
Wdt_Feed(void)130 void Wdt_Feed(void)
131 {
132 M0P_WDT->RST = 0x1E;
133 M0P_WDT->RST = 0xE1;
134 }
135 /**
136 ******************************************************************************
137 ** \brief WDT读取当前计数值函数
138 **
139 ** \param [in] 无
140 **
141 ** \retval 计数值
142 **
143 ******************************************************************************/
Wdt_ReadWdtValue(void)144 uint8_t Wdt_ReadWdtValue(void)
145 {
146 uint8_t u8Count;
147 u8Count = M0P_WDT->CON_f.WCNTL;
148 return u8Count;
149 }
150 /**
151 ******************************************************************************
152 ** \brief WDT读取当前运行状态
153 **
154 ** \param [in] 无
155 **
156 ** \retval 状态值
157 **
158 ******************************************************************************/
Wdt_ReadwdtStatus(void)159 uint8_t Wdt_ReadwdtStatus(void)
160 {
161 return M0P_WDT->CON_f.WDTR;
162 }
163 /**
164 ******************************************************************************
165 ** \brief WDT中断处理函数
166 **
167 ** \param [in] 无
168 **
169 ** \retval 无
170 **
171 ******************************************************************************/
Wdt_IRQHandler(void)172 void Wdt_IRQHandler(void)
173 {
174 if(M0P_WDT->CON_f.WDINT)
175 {
176 Wdt_Start();//clr wdt 标记
177 if(NULL != pfnWdtCallback)
178 {
179 pfnWdtCallback();
180 }
181 }
182 }
183
184 //@} // WdtGroup
185