1 /******************************************************************************
2 * Copyright (C) 2019, 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 vc.h
44  **
45  ** Headerfile for Voltage Comparator functions
46  ** @link VC Group Some description @endlink
47  **
48  **   - 2019-04-10    First Version
49  **
50  ******************************************************************************/
51 
52 #ifndef __VC_H__
53 #define __VC_H__
54 
55 /******************************************************************************
56  * Include files
57  ******************************************************************************/
58 #include "ddl.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 VcGroup Voltage Comparator (VC)
69  **
70  ******************************************************************************/
71 //@{
72 
73 /******************************************************************************
74  * Global type definitions
75  ******************************************************************************/
76 
77 /**
78  ******************************************************************************
79  ** \brief VC通道
80  *****************************************************************************/
81 typedef enum
82 {
83     VcChannel0 = 0u,                 //   通道0
84     VcChannel1 = 1u,                 //   通道1
85     VcChannel2 = 2u                  //   通道2
86 }en_vc_channel_t;
87 
88 
89 /**
90  ******************************************************************************
91  ** \brief VC迟滞                            VC_CR  VCx_HYS_SEL(x=0、1、2)
92  *****************************************************************************/
93 typedef enum
94 {
95     VcDelayoff  = 0u,            //   迟滞关闭
96     VcDelay10mv = 1u,            //   迟滞10mv
97     VcDelay20mv = 2u,            //   迟滞20mv
98     VcDelay30mv = 3u,            //   迟滞30mv
99 }en_vc_cmp_delay_t;
100 
101 /**
102  ******************************************************************************
103  ** \brief VC偏置电流                       VC_CR  VCx_BIAS_SEL(x=0、1、2)
104  *****************************************************************************/
105 typedef enum
106 {
107     VcBias300na  = 0u,            //   偏置电流300nA
108     VcBias1200na = 1u,            //   偏置电流1.2uA
109     VcBias10ua   = 2u,            //   偏置电流10uA
110     VcBias20ua   = 3u,            //   偏置电流20uA
111 }en_vc_bias_current_t;
112 
113 /**
114  ******************************************************************************
115  ** \brief VC输出滤波时间                     VCx_CR  debounce_time(x=0、1、2)
116  *****************************************************************************/
117 typedef enum
118 {
119     VcFilter7us     = 0u,            //   输出滤波时间7us
120     VcFilter14us    = 1u,            //   输出滤波时间14us
121     VcFilter28us    = 2u,            //   输出滤波时间28us
122     VcFilter112us   = 3u,            //   输出滤波时间112us
123     VcFilter450us   = 4u,            //   输出滤波时间450us
124     VcFilter1800us  = 5u,            //   输出滤波时间1.8ms
125     VcFilter7200us  = 6u,            //   输出滤波时间7.2ms
126     VcFilter28800us = 7u,            //   输出滤波时间28.8ms
127 }en_vc_resp_filter_t;
128 
129 /**
130  ******************************************************************************
131  ** \brief VC P端输入
132  *****************************************************************************/
133 typedef enum
134 {
135                                          //VC0             //VC1           //VC2
136     VcInPCh0 = 0u,                //   输入通道0 PC0        输入通道0 PA0     输入通道0 PA5
137     VcInPCh1 = 1u,                //   输入通道1 PC1        输入通道1 PA1     输入通道1 PB1
138     VcInPCh2 = 2u,                //   输入通道2 PC2        输入通道2 PA2     输入通道2 PE9
139     VcInPCh3 = 3u,                //   输入通道3 PC3        输入通道3 PA3     输入通道3 PE10
140     VcInPCh4 = 4u,                //   输入通道4 PA0        输入通道4 PA4     输入通道4 PE11
141     VcInPCh5 = 5u,                //   输入通道5 PA1        输入通道5 PA5     输入通道5 PE13
142     VcInPCh6 = 6u,                //   输入通道6 PA2        输入通道6 PB1     输入通道6 PE14
143     VcInPCh7 = 7u,                //   输入通道7 PA3        输入通道7 PB2     输入通道7 PE15
144     VcInPCh8 = 8u,                //   输入通道7 PA4        输入通道8 PB10    输入通道8 PB11
145     VcInPCh9 = 9u,                //   输入通道7 PA5        输入通道9 PB12    输入通道9 PB14
146     VcInPCh10 = 10u,              //   输入通道7 PA6        输入通道10 PB13   输入通道10 PD9
147     VcInPCh11 = 11u,              //   输入通道7 PA7        输入通道11 PB14   输入通道11 PD10
148     VcInPCh12 = 12u,              //   输入通道7 PB4        输入通道12 PB4    输入通道12 PD11
149     VcInPCh13 = 13u,              //   输入通道7 PB5        输入通道13 DAC0   输入通道13 PC7
150     VcInPCh14 = 14u,              //   输入通道7 PB6        输入通道14 PB6    输入通道14 DAC0
151     VcInPCh15 = 15u,              //   输入通道7 DAC0        输入通道15 PB7    输入通道15 DAC0
152 }en_vc_input_p_src_t;
153 
154 /**
155  ******************************************************************************
156  ** \brief VC N端输入
157  *****************************************************************************/
158 typedef enum
159 {
160                                  //VC0                          //VC1                         //VC2
161     VcInNCh0    = 0u,         //   输入通道0  PA0               输入通道0 PC0                输入通道0 PA5
162     VcInNCh1    = 1u,         //   输入通道1  PA1               输入通道1 PC1                输入通道1 PB1
163     VcInNCh2    = 2u,         //   输入通道2  PA2               输入通道2 PC2                输入通道2 PE11
164     VcInNCh3    = 3u,         //   输入通道3  PA3               输入通道3 PC3                输入通道3 PE15
165     VcInNCh4    = 4u,         //   输入通道4  PA4               输入通道4 PA0                输入通道4 PB11
166     VcInNCh5    = 5u,         //   输入通道5  PA5               输入通道5 PA1                输入通道5 PB14
167     VcInNCh6    = 6u,         //   输入通道6  PA6               输入通道6 PB0                输入通道6 PD10
168     VcInNCh7    = 7u,         //   输入通道7  PA7               输入通道7 PB1                输入通道7 PD11
169     VcInNCh8    = 8u,         //   输入通道8  PC4               输入通道8 PB2                输入通道8 PC7
170     VcInNCh9    = 9u,         //   输入通道9  PC5               输入通道9 PB3                输入通道9 DAC0
171     VcInNCh10   = 10u,        //   输入通道10 DAC0              输入通道10 DAC1              输入通道10 DAC0
172     ResDivOut   = 11u,        //   电阻分压                     电阻分压                     NA
173     AiTs        = 12u,        //   内部温度传感器输出电压       内部温度传感器输出电压       内部温度传感器输出电压
174     AiBg1p2     = 13u,        //   内部基准1.2V                 内部基准1.2V                 内部基准1.2V
175     AiAdcVref   = 14u,        //   ADC参考电压VREF              ADC参考电压VREF              ADC参考电压VREF
176     AiLdo       = 15u,        //   LDO输出电压                  LDO输出电压                  LDO输出电压
177 }en_vc_input_n_src_t;
178 
179 /**
180  ******************************************************************************
181  ** \brief VC中断触发方式
182  *****************************************************************************/
183 typedef enum en_vc_irq_sel
184 {
185     VcIrqNone = 0u,            ///< 无中断
186     VcIrqRise = 1u,            ///< 上升沿触发
187     VcIrqFall = 2u,            ///< 下降沿触发
188     VcIrqHigh = 3u,            ///< 高电平触发
189 
190 }en_vc_irq_sel_t;
191 
192 /**
193  ******************************************************************************
194  ** \brief VC状态                       VC_IFR
195  *****************************************************************************/
196 typedef enum en_vc_stat
197 {
198     Vc0_Intf    = 0u,          //   VC0中断标志
199     Vc1_Intf    = 1u,          //   VC1中断标志
200     Vc0_Filter  = 2u,          //   VC0 Filter 后的状态
201     Vc1_Filter  = 3u,          //   VC1 Filter 后的状态
202     Vc2_Intf    = 4u,          //   VC2中断标志
203     Vc2_Filter  = 5u           //   VC2 Filter 后的状态
204 }en_vc_ifr_t;
205 
206 /**
207  ******************************************************************************
208  ** \brief VC输出配置                      VCx_OUT_CFG(x=0、1、2)
209  ** \note       对于VC0,CHX = CHA;对于VC1 VC2,CHX = CHB
210  *****************************************************************************/
211 typedef enum en_vc_output_cfg
212 {
213     VcOutInvTimer = 0u,              //   结果输出反向到各Timer0,1,2,3 REFCLR
214     VcOutTIM0RCLR = 1u,              //   结果输出到TIM0 REFCLR使能控制
215     VcOutTIM1RCLR = 2u,              //   结果输出到TIM1 REFCLR使能控制
216     VcOutTIM2RCLR = 3u,              //   结果输出到TIM2 REFCLR使能控制
217     VcOutTIM3RCLR = 4u,              //   结果输出到TIM3 REFCLR使能控制
218     VcOutTIMBK    = 5u,              //   结果输出到Timer0,1,2,3刹车控制
219     VcOutInvTIM4  = 9u,              //   结果输出到Timer4反向使能
220     VcOutTIM4     = 10u,             //   结果输出到Timer4捕获输入CHX使能
221     VcOutInvTIM5  = 11u,             //   结果输出到Timer5反向使能
222     VcOutTIM5     = 12u,             //   结果输出到Timer5捕获输入CHX使能
223     VcOutInvTIM6  = 13u,             //   结果输出到Timer6反向使能
224     VcOutTIM6     = 14u,             //   结果输出到Timer6捕获输入CHX使能
225     VcOutBrake    = 15u,             //   结果作为Advanced Timer刹车控制
226     VcOutDisable  = 16u              //   结果输出除能
227 }en_vc_output_cfg_t;
228 
229 /**
230  ******************************************************************************
231  ** \brief VC DIV参考电压Vref选择                   VC_CR   VC_REF2P5_SEL
232  *****************************************************************************/
233 typedef enum en_vc_div_vref
234 {
235     VcDivVrefAvcc = 0u,              ///< AVCC
236     VcDivVrefAdc  = 1u,               ///< ADC_CR0 SREF选择参考电压
237 }en_vc_div_vref_t;
238 
239 /**
240  ******************************************************************************
241  ** \brief VC模块配置               VC_CR   VC_REF2P5_SEL  VC_DIV_EN  VC_DIV
242  *****************************************************************************/
243 typedef struct stc_vc_dac_cfg
244 {
245     boolean_t           bDivEn;       //   VC_CR: VC_DIV_EN
246     uint8_t             u8DivVal;     //   VC_CR: VC_DIV 范围:0-63
247     en_vc_div_vref_t    enDivVref;    //   VC_CR: VC_REF2P5_SEL
248 }stc_vc_dac_cfg_t;
249 
250 /**
251  ******************************************************************************
252  ** \brief VC通道配置
253  *****************************************************************************/
254 typedef struct stc_vc_channel_cfg
255 {
256     en_vc_channel_t         enVcChannel;        //   VC通道选择
257     en_vc_cmp_delay_t       enVcCmpDly;         //   VC迟滞
258     en_vc_bias_current_t    enVcBiasCurrent;    //   VC功耗选择
259     en_vc_resp_filter_t     enVcFilterTime;     //   输出滤波时间
260     en_vc_input_p_src_t     enVcInPin_P;        //   P端输入
261     en_vc_input_n_src_t     enVcInPin_N;        //   N端输入
262     en_vc_output_cfg_t      enVcOutCfg;         //   输出配置
263     boolean_t               bFlten;             //   滤波输出使能
264 }stc_vc_channel_cfg_t;
265 
266 /******************************************************************************
267  * Global definitions
268  ******************************************************************************/
269 
270 /******************************************************************************
271  * Local type definitions ('typedef')
272  ******************************************************************************/
273 
274 /******************************************************************************
275  * Global variable definitions ('extern')
276  ******************************************************************************/
277 
278 /******************************************************************************
279  * Global function prototypes (definition in C source)
280  ******************************************************************************/
281 extern void Vc_CfgItType(en_vc_channel_t Channelx, en_vc_irq_sel_t ItType);
282 extern void  Vc_ItCfg(en_vc_channel_t Channelx, boolean_t NewStatus);
283 extern boolean_t Vc_GetItStatus(en_vc_ifr_t Result);
284 extern void Vc_ClearItStatus(en_vc_ifr_t NewStatus);
285 extern en_result_t Vc_DacInit(stc_vc_dac_cfg_t *pstcDacCfg);
286 extern void Vc_Init(stc_vc_channel_cfg_t *pstcChannelCfg);
287 extern void Vc_Cmd(en_vc_channel_t enChannel, boolean_t NewStatus);
288 
289 
290 
291 #ifdef __cplusplus
292 }
293 #endif
294 
295 #endif /* __VC_H__ */
296 /******************************************************************************
297  * EOF (not truncated)
298  ******************************************************************************/
299 
300