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 lvd.h
44  **
45  ** Headerfile for Low Voltage Detector functions
46  **
47  **   - 2017-06-28 Alex    First Version
48  **
49  ******************************************************************************/
50 
51 #ifndef __LVD_H__
52 #define __LVD_H__
53 
54 /******************************************************************************
55  * Include files
56  ******************************************************************************/
57 #include "ddl.h"
58 #include "interrupts_hc32l136.h"
59 
60 /* C binding of definitions if building with C++ compiler */
61 #ifdef __cplusplus
62 extern "C"
63 {
64 #endif
65 
66 /**
67  ******************************************************************************
68  ** \defgroup LvdGroup Low Voltage Detector (LVD)
69  **
70  ******************************************************************************/
71 //@{
72 
73 /******************************************************************************
74  * Global type definitions
75  ******************************************************************************/
76 
77 /**
78  ******************************************************************************
79  ** \brief LVD输入电压源
80  **
81  ** \note
82  ******************************************************************************/
83 typedef enum en_lvd_input
84 {
85     LvdInputVCC  = 0u,                 ///< Vcc
86     LvdInputPC13 = 1u,                ///< PC13
87     LvdInputPB08 = 2u,                ///< PB08
88     LvdInputPB07 = 3u,                ///< PB07
89 }en_lvd_input_t;
90 
91 /**
92  ******************************************************************************
93  ** \brief LVD监测电压选择
94  **
95  ** \note
96  ******************************************************************************/
97 typedef enum en_lvd_threshold
98 {
99     LvdTH1p8V = 0u,              ///< 1.8V
100     LvdTH1p9V = 1u,                  ///< 1.9V
101     LvdTH2p0V = 2u,                  ///< 2.0V
102     LvdTH2p1V = 3u,                  ///< 2.1V
103     LvdTH2p2V = 4u,                  ///< 2.2V
104     LvdTH2p3V = 5u,                  ///< 2.3V
105     LvdTH2p4V = 6u,                  ///< 2.4V
106     LvdTH2p5V = 7u,                  ///< 2.5V
107     LvdTH2p6V = 8u,                  ///< 2.6V 默认电压
108     LvdTH2p7V = 9u,                  ///< 2.7V
109     LvdTH2p8V = 10u,                  ///< 2.8V
110     LvdTH2p9V = 11u,                  ///< 2.9V
111     LvdTH3p0V = 12u,                  ///< 3.0V
112     LvdTH3p1V = 13u,                  ///< 3.1V
113     LvdTH3p2V = 14u,                  ///< 3.2V
114     LvdTH3p3V = 15u,                  ///< 3.3V
115 }en_lvd_threshold_t;
116 
117 /**
118  ******************************************************************************
119  ** \brief LVD输出滤波时间
120  **
121  ** \note
122  ******************************************************************************/
123 typedef enum en_lvd_filter_time
124 {
125     LvdFilter30us   = 0u,              ///< 30us
126     LvdFilter40us   = 1u,                  ///< 40us
127     LvdFilter50us   = 2u,                  ///< 50us
128     LvdFilter130us  = 3u,                 ///< 130us
129     LvdFilter480us  = 4u,                 ///< 480us
130     LvdFilter1800us = 5u,                ///< 1.8ms
131     LvdFilter7d3ms  = 6u,                 ///< 7.3ms
132     LvdFilter29ms   = 7u,                  ///< 29ms
133 }en_lvd_filter_time_t;
134 
135 /**
136  ******************************************************************************
137  ** \brief LVD中断触发方式
138  **
139  ** \note
140  ******************************************************************************/
141 typedef enum en_lvd_irq_type
142 {
143     LvdIrqHigh  = 0u,                 ///< 高电平触发
144     LvdIrqRise  = 1u,                 ///< 上升沿触发
145     LvdIrqFall  = 2u,                 ///< 下降沿触发
146 }en_lvd_irq_type_t;
147 
148 /**
149  ******************************************************************************
150  ** \brief LVD配置
151  ** \note
152  ******************************************************************************/
153 typedef struct stc_lvd_config
154 {
155     boolean_t               bLvdReset;      ///< TRUE-重启,FALSE-中断
156     en_lvd_input_t          enInput;        ///< LVD输入电压源
157     en_lvd_threshold_t      enThreshold;    ///< LVD监测电压
158     boolean_t               bFilter;        ///< 是否使用输出滤波
159     en_lvd_filter_time_t    enFilterTime;   ///< 输出滤波时间
160     en_lvd_irq_type_t       enIrqType;      ///< 中断触发方式
161     func_ptr_t              pfnIrqCbk;      ///< 中断回调函数
162 }stc_lvd_config_t;
163 
164 
165 /******************************************************************************
166  * Global definitions
167  ******************************************************************************/
168 
169 /******************************************************************************
170  * Local type definitions ('typedef')
171  ******************************************************************************/
172 
173 /******************************************************************************
174  * Global variable definitions ('extern')
175  ******************************************************************************/
176 
177 /******************************************************************************
178  * Global function prototypes (definition in C source)
179  ******************************************************************************/
180 //irq enable/disable
181 en_result_t Lvd_EnableIrq(en_lvd_irq_type_t enType);
182 void Lvd_DisableIrq(void);
183 
184 // irq function
185 void Lvd_ClearIrq(void);
186 boolean_t Lvd_GetIrqStat(void);
187 
188 // fliter function
189 boolean_t Lvd_GetFilterResult(void);
190 
191 //init/deinit function
192 void Lvd_Init(stc_lvd_config_t *pstcConfig);
193 void Lvd_DeInit(void);
194 
195 //LVD function enable/disable
196 void Lvd_Enable(void);
197 void Lvd_Disable(void);
198 
199 //@} // LvdGroup
200 
201 #ifdef __cplusplus
202 }
203 #endif
204 
205 #endif /* __LVD_H__ */
206 /******************************************************************************
207  * EOF (not truncated)
208  ******************************************************************************/
209