vc.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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 vc.h
  44. **
  45. ** Headerfile for Voltage Comparator functions
  46. ** @link VC Group Some description @endlink
  47. **
  48. ** - 2017-06-28 Alex First Version
  49. **
  50. ******************************************************************************/
  51. #ifndef __VC_H__
  52. #define __VC_H__
  53. /******************************************************************************
  54. * Include files
  55. ******************************************************************************/
  56. #include "ddl.h"
  57. #include "interrupts_hc32l136.h"
  58. /* C binding of definitions if building with C++ compiler */
  59. #ifdef __cplusplus
  60. extern "C"
  61. {
  62. #endif
  63. /**
  64. ******************************************************************************
  65. ** \defgroup VcGroup Voltage Comparator (VC)
  66. **
  67. ******************************************************************************/
  68. //@{
  69. /******************************************************************************
  70. * Global type definitions
  71. ******************************************************************************/
  72. /**
  73. ******************************************************************************
  74. ** \brief VC通道
  75. *****************************************************************************/
  76. typedef enum en_vc_channel
  77. {
  78. VcChannel0 = 0u, ///< 通道0
  79. VcChannel1 = 1u, ///< 通道1
  80. }en_vc_channel_t;
  81. /**
  82. ******************************************************************************
  83. ** \brief VC迟滞
  84. *****************************************************************************/
  85. typedef enum en_vc_cmp_delay
  86. {
  87. VcDelayoff = 0u, ///< 迟滞关闭
  88. VcDelay10mv = 1u, ///< 迟滞10mv
  89. VcDelay20mv = 2u, ///< 迟滞20mv
  90. VcDelay30mv = 3u, ///< 迟滞30mv
  91. }en_vc_cmp_delay_t;
  92. /**
  93. ******************************************************************************
  94. ** \brief VC偏置电流
  95. *****************************************************************************/
  96. typedef enum en_vc_bias_current
  97. {
  98. VcBias300na = 0u, ///< 偏置电流300na
  99. VcBias1200na = 1u, ///< 偏置电流1.2ua
  100. VcBias10ua = 2u, ///< 偏置电流10ua
  101. VcBias20ua = 3u, ///< 偏置电流20ua
  102. }en_vc_bias_current_t;
  103. /**
  104. ******************************************************************************
  105. ** \brief VC输出滤波时间
  106. *****************************************************************************/
  107. typedef enum en_vc_resp_filter
  108. {
  109. VcFilter7us = 0u, ///< 输出滤波时间7us
  110. VcFilter14us = 1u, ///< 输出滤波时间14us
  111. VcFilter28us = 2u, ///< 输出滤波时间28us
  112. VcFilter112us = 3u, ///< 输出滤波时间112us
  113. VcFilter450us = 4u, ///< 输出滤波时间450us
  114. VcFilter1800us = 5u, ///< 输出滤波时间1.8ms
  115. VcFilter7200us = 6u, ///< 输出滤波时间7.2ms
  116. VcFilter28800us = 7u, ///< 输出滤波时间28.8ms
  117. }en_vc_resp_filter_t;
  118. /**
  119. ******************************************************************************
  120. ** \brief VC P端输入
  121. *****************************************************************************/
  122. typedef enum en_vc_input_p_src
  123. {
  124. //VC0 //VC1
  125. VcInPCh0 = 0u, ///< 输入通道0 PC0 输入通道0 PA0
  126. VcInPCh1 = 1u, ///< 输入通道1 PC1 输入通道0 PA1
  127. VcInPCh2 = 2u, ///< 输入通道2 PC2 输入通道0 PA2
  128. VcInPCh3 = 3u, ///< 输入通道3 PC3 输入通道0 PA3
  129. VcInPCh4 = 4u, ///< 输入通道4 PA0 输入通道0 PA4
  130. VcInPCh5 = 5u, ///< 输入通道5 PA1 输入通道0 PA5
  131. VcInPCh6 = 6u, ///< 输入通道6 PA2 输入通道0 PB1
  132. VcInPCh7 = 7u, ///< 输入通道7 PA3 输入通道0 PB2
  133. VcInPCh8 = 8u, ///< 输入通道7 PA4 输入通道0 PB10
  134. VcInPCh9 = 9u, ///< 输入通道7 PA5 输入通道0 PB12
  135. VcInPCh10 = 10u, ///< 输入通道7 PA6 输入通道0 PB13
  136. VcInPCh11 = 11u, ///< 输入通道7 PA7 输入通道0 PB14
  137. VcInPCh12 = 12u, ///< 输入通道7 PB4 输入通道0 PB4
  138. VcInPCh13 = 13u, ///< 输入通道7 PB5 输入通道0 PB5
  139. VcInPCh14 = 14u, ///< 输入通道7 PB6 输入通道0 PB6
  140. VcInPCh15 = 15u, ///< 输入通道7 PB7 输入通道0 PB7
  141. }en_vc_input_p_src_t;
  142. /**
  143. ******************************************************************************
  144. ** \brief VC N端输入
  145. *****************************************************************************/
  146. typedef enum en_vc_input_n_src
  147. {
  148. //VC0 //VC1
  149. VcInNCh0 = 0u, ///< 输入通道0 PA0 输入通道0 PC0
  150. VcInNCh1 = 1u, ///< 输入通道1 PA1 输入通道0 PC1
  151. VcInNCh2 = 2u, ///< 输入通道2 PA2 输入通道0 PC2
  152. VcInNCh3 = 3u, ///< 输入通道3 PA3 输入通道0 PC3
  153. VcInNCh4 = 4u, ///< 输入通道4 PA4 输入通道0 PA0
  154. VcInNCh5 = 5u, ///< 输入通道5 PA5 输入通道0 PA1
  155. VcInNCh6 = 6u, ///< 输入通道6 PA6 输入通道0 PB0
  156. VcInNCh7 = 7u, ///< 输入通道7 PA7 输入通道0 PB1
  157. VcInNCh8 = 8u, ///< 输入通道8 PC4 输入通道0 PB2
  158. VcInNCh9 = 9u, ///< 输入通道9 PC5 输入通道0 PB3
  159. VcInNCh10 = 10u, ///< 输入通道10 PB0 输入通道0 PB4
  160. ResDivOut = 11u, ///< Vcc分压 Vcc分压
  161. AiTs = 12u, ///< 温度传感器 温度传感器
  162. AiBg1p2 = 13u, ///< BGR 1.2V BGR 1.2V
  163. AiAdcVref = 14u, ///< ADCVREF ADCVREF
  164. AiLdo = 15u, ///< LDO LDO
  165. }en_vc_input_n_src_t;
  166. /**
  167. ******************************************************************************
  168. ** \brief VC中断触发方式
  169. *****************************************************************************/
  170. typedef enum en_vc_irq_sel
  171. {
  172. VcIrqNone = 0u, ///< 无中断
  173. VcIrqRise = 1u, ///< 上升沿触发
  174. VcIrqFall = 2u, ///< 下降沿触发
  175. VcIrqHigh = 3u, ///< 高电平触发
  176. }en_vc_irq_sel_t;
  177. /**
  178. ******************************************************************************
  179. ** \brief VC状态
  180. *****************************************************************************/
  181. typedef enum en_vc_stat
  182. {
  183. VcCmpResult = 0u, ///< VC比较输出结果
  184. VcIntrResult = 1u, ///< VC中断状态
  185. }en_vc_stat_t;
  186. /**
  187. ******************************************************************************
  188. ** \brief VC输出配置
  189. *****************************************************************************/
  190. typedef enum en_vc_output_config
  191. {
  192. VcOutInvTimer = 0u, ///< 结果输出负向到各Timer0,1,2,3
  193. VcOutTIM0RCLR = 1u, ///< 结果使能输出到TIM0 REFCLR
  194. VcOutTIM1RCLR = 2u, ///< 结果使能输出到TIM1 REFCLR
  195. VcOutTIM2RCLR = 3u, ///< 结果使能输出到TIM2 REFCLR
  196. VcOutTIM3RCLR = 4u, ///< 结果使能输出到TIM3 REFCLR
  197. VcOutTIMBK = 5u, ///< 结果使能输出到Timer0,1,2,3刹车
  198. VcOutInvTIM4 = 9u, ///< 结果输出负向到Timer4
  199. VcOutTIM4 = 10u, ///< 结果使能输出到Timer4
  200. VcOutInvTIM5 = 11u, ///< 结果输出负向到Timer5
  201. VcOutTIM5 = 12u, ///< 结果使能输出到Timer5
  202. VcOutInvTIM6 = 13u, ///< 结果输出负向到Timer6
  203. VcOutTIM6 = 14u, ///< 结果使能输出到Timer6
  204. VcOutBrake = 15u, ///< 结果使能输出到Advanced Timer刹车
  205. VcOutDisable = 16u, ///< 结果输出除能
  206. }en_vc_output_config_t;
  207. /**
  208. ******************************************************************************
  209. ** \brief VC DIV参考电压Vref选择
  210. *****************************************************************************/
  211. typedef enum en_vc_div_vref
  212. {
  213. VcDivVrefAvcc = 0u, ///< AVCC
  214. VcDivVrefAdc = 1u, ///< ADC_CR0 SREF选择参考电压
  215. }en_vc_div_vref_t;
  216. /**
  217. ******************************************************************************
  218. ** \brief VC模块配置
  219. *****************************************************************************/
  220. typedef struct stc_vc_dac_config
  221. {
  222. boolean_t bDivEn; ///< 使能/除能 6-bit VCC divider
  223. uint8_t u8DivVal; ///< 6-bit VCC divider设置值
  224. en_vc_div_vref_t enDivVref; ///< 6-bit VCC divider输入参考电压选择
  225. }stc_vc_dac_config_t;
  226. /**
  227. ******************************************************************************
  228. ** \brief VC通道配置
  229. *****************************************************************************/
  230. typedef struct stc_vc_channel_config
  231. {
  232. en_vc_channel_t enVcChannel; ///< VC通道选择
  233. en_vc_cmp_delay_t enVcCmpDly; ///< VC迟滞
  234. en_vc_bias_current_t enVcBiasCurrent; ///< VC偏转电流
  235. en_vc_resp_filter_t enVcFilterTime; ///< 输出滤波时间
  236. en_vc_input_p_src_t enVcInPin_P; ///< P端输入
  237. en_vc_input_n_src_t enVcInPin_N; ///< N端输入
  238. en_vc_output_config_t enVcOutConfig; ///< 输出配置
  239. en_vc_irq_sel_t enVcIrqSel; ///< 中断触发方式
  240. func_ptr_t pfnAnalogCmpCb; ///< 中断回调函数
  241. }stc_vc_channel_config_t;
  242. /******************************************************************************
  243. * Global definitions
  244. ******************************************************************************/
  245. /******************************************************************************
  246. * Local type definitions ('typedef')
  247. ******************************************************************************/
  248. /******************************************************************************
  249. * Global variable definitions ('extern')
  250. ******************************************************************************/
  251. /******************************************************************************
  252. * Global function prototypes (definition in C source)
  253. ******************************************************************************/
  254. //VC init/deinit
  255. en_result_t Vc_ChannelInit(en_vc_channel_t enChannel,
  256. stc_vc_channel_config_t *pstcChannelConfig);
  257. en_result_t Vc_ChannelDeInit(en_vc_channel_t enChannel);
  258. en_result_t Vc_DACInit(stc_vc_dac_config_t *pstcDacConfig);
  259. //VC function enable/disable
  260. en_result_t Vc_EnableChannel(en_vc_channel_t enChannel);
  261. en_result_t Vc_DisableChannel(en_vc_channel_t enChannel);
  262. //VC filter enable/disable
  263. en_result_t Vc_EnableFilter(en_vc_channel_t enChannel);
  264. en_result_t Vc_DisableFilter(en_vc_channel_t enChannel);
  265. //get stat
  266. boolean_t Vc_GetStat(en_vc_channel_t enChannel, en_vc_stat_t enStat);
  267. //clear stat
  268. void Vc_ClearIrq(en_vc_channel_t enChannel);
  269. //irq enable/disable
  270. en_result_t Vc_EnableIrq(en_vc_channel_t enChannel);
  271. en_result_t Vc_DisableIrq(en_vc_channel_t enChannel);
  272. en_result_t Vc_ConfigIrq(en_vc_channel_t enChannel, en_vc_irq_sel_t enSel);
  273. //@} // VcGroup
  274. #ifdef __cplusplus
  275. }
  276. #endif
  277. #endif /* __VC_H__ */
  278. /******************************************************************************
  279. * EOF (not truncated)
  280. ******************************************************************************/