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