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 
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_src
84 {
85     LvdInputSrcMskVCC  = 0u<<2,                ///< Vcc
86     LvdInputSrcMskPC13 = 1u<<2,                ///< PC13
87     LvdInputSrcMskPB08 = 2u<<2,                ///< PB08
88     LvdInputSrcMskPB07 = 3u<<2,                ///< PB07
89 }en_lvd_input_src_t;
90 
91 /**
92  ******************************************************************************
93  ** \brief LVD阈值电压选择
94  **
95  ** \note
96  ******************************************************************************/
97 typedef enum en_lvd_threshold
98 {
99     LvdMskTH1_8V = 0u<<4,                  ///< 1.8V
100     LvdMskTH1_9V = 1u<<4,                  ///< 1.9V
101     LvdMskTH2_0V = 2u<<4,                  ///< 2.0V
102     LvdMskTH2_1V = 3u<<4,                  ///< 2.1V
103     LvdMskTH2_2V = 4u<<4,                  ///< 2.2V
104     LvdMskTH2_3V = 5u<<4,                  ///< 2.3V
105     LvdMskTH2_4V = 6u<<4,                  ///< 2.4V
106     LvdMskTH2_5V = 7u<<4,                  ///< 2.5V
107     LvdMskTH2_6V = 8u<<4,                  ///< 2.6V
108     LvdMskTH2_7V = 9u<<4,                  ///< 2.7V
109     LvdMskTH2_8V = 10u<<4,                 ///< 2.8V
110     LvdMskTH2_9V = 11u<<4,                 ///< 2.9V
111     LvdMskTH3_0V = 12u<<4,                 ///< 3.0V
112     LvdMskTH3_1V = 13u<<4,                 ///< 3.1V
113     LvdMskTH3_2V = 14u<<4,                 ///< 3.2V
114     LvdMskTH3_3V = 15u<<4,                 ///< 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     LvdFilterMsk7us    = 0u<<9,                   ///< 7us
126     LvdFilterMsk14us   = 1u<<9,                   ///< 14us
127     LvdFilterMsk28us   = 2u<<9,                   ///< 28us
128     LvdFilterMsk112us  = 3u<<9,                   ///< 112us
129     LvdFilterMsk450us  = 4u<<9,                   ///< 450us
130     LvdFilterMsk1_8ms  = 5u<<9,                   ///< 1.8ms
131     LvdFilterMsk7_2ms  = 6u<<9,                   ///< 7.3ms
132     LvdFilterMsk28_8ms = 7u<<9,                   ///< 28.8ms
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     LvdIrqMskRiseFall = 3u<<12,                 ///< 上升/下降沿触发
144     LvdIrqMskHigh     = 1u<<14,                 ///< 高电平触发
145     LvdIrqMskRise     = 1u<<13,                 ///< 上升沿触发
146     LvdIrqMskFall     = 1u<<12,                 ///< 下降沿触发
147 }en_lvd_irq_type_t;
148 
149 /**
150  ******************************************************************************
151  ** \brief LVD触发动作选择
152  **
153  ** \note
154  ******************************************************************************/
155 typedef enum en_lvd_act
156 {
157     LvdActMskReset = 1u<<1,              ///< 系统复位
158     LvdActMskInt   = 0u,                 ///< NVIC中断
159 }en_lvd_act_t;
160 
161 /**
162  ******************************************************************************
163  ** \brief LVD数字滤波使能配置
164  **
165  ** \note
166  ******************************************************************************/
167 typedef enum en_lvd_filter
168 {
169     LvdFilterMskEnable  = 1u<<8,         ///< 数字滤波使能
170     LvdFilterMskDisable = 0u,            ///< 数字滤波禁止
171 }en_lvd_filter_t;
172 
173 /**
174  ******************************************************************************
175  ** \brief LVD配置
176  ** \note
177  ******************************************************************************/
178 typedef struct stc_lvd_cfg
179 {
180     en_lvd_act_t            enAct;          ///< LVD触发动作
181     en_lvd_input_src_t      enInputSrc;     ///< LVD输入电压源
182     en_lvd_threshold_t      enThreshold;    ///< LVD监测电压
183     en_lvd_filter_t         enFilter;       ///< 是否使用输出滤波
184     en_lvd_filter_time_t    enFilterTime;   ///< 输出滤波时间
185     en_lvd_irq_type_t       enIrqType;      ///< 中断触发方式
186 }stc_lvd_cfg_t;
187 
188 
189 /******************************************************************************
190  * Global definitions
191  ******************************************************************************/
192 
193 /******************************************************************************
194  * Local type definitions ('typedef')
195  ******************************************************************************/
196 
197 /******************************************************************************
198  * Global variable definitions ('extern')
199  ******************************************************************************/
200 
201 /******************************************************************************
202  * Global function prototypes (definition in C source)
203  ******************************************************************************/
204 //irq enable/disable
205 void Lvd_EnableIrq(void);
206 void Lvd_DisableIrq(void);
207 
208 // irq function
209 void Lvd_ClearIrq(void);
210 boolean_t Lvd_GetIrqStat(void);
211 
212 // fliter function
213 boolean_t Lvd_GetFilterResult(void);
214 
215 //init/deinit function
216 void Lvd_Init(stc_lvd_cfg_t *pstcCfg);
217 
218 //LVD function enable/disable
219 void Lvd_Enable(void);
220 void Lvd_Disable(void);
221 
222 //@} // LvdGroup
223 
224 #ifdef __cplusplus
225 }
226 #endif
227 
228 #endif /* __LVD_H__ */
229 /******************************************************************************
230  * EOF (not truncated)
231  ******************************************************************************/
232