ciu32f003_std_comp(2).h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_comp.h
  4. * @author MCU Ecosystem Development Team
  5. * @brief COMP STD库驱动头文件。
  6. * 提供COMP相关的STD库操作函数声明、数据类型以及常量的定义。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /* 避免头文件重复引用 */
  16. #ifndef CIU32F003_STD_COMP_H
  17. #define CIU32F003_STD_COMP_H
  18. /************************************************************************************************/
  19. /**
  20. * @addtogroup CIU32F003_STD_Driver
  21. * @{
  22. */
  23. /**
  24. * @defgroup COMP COMP
  25. * @brief 比较器的STD库驱动
  26. * @{
  27. */
  28. /************************************************************************************************/
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. /*------------------------------------------includes--------------------------------------------*/
  33. #include "ciu32f003_std_common.h"
  34. /*--------------------------------------------define--------------------------------------------*/
  35. /************************************************************************************************/
  36. /**
  37. * @defgroup COMP_Constants COMP Constants
  38. * @brief COMP常量定义及宏定义
  39. * @{
  40. *
  41. */
  42. /************************************************************************************************/
  43. /* 比较器内部参考电压VDDA 分压 */
  44. #define COMP_VDDA_DIV_1DIV16 COMP_CR_VCDIV_1DIV16 /**< VDDA 分压选择1/16 */
  45. #define COMP_VDDA_DIV_2DIV16 COMP_CR_VCDIV_2DIV16 /**< VDDA 分压选择2/16 */
  46. #define COMP_VDDA_DIV_3DIV16 COMP_CR_VCDIV_3DIV16 /**< VDDA 分压选择3/16 */
  47. #define COMP_VDDA_DIV_4DIV16 COMP_CR_VCDIV_4DIV16 /**< VDDA 分压选择4/16 */
  48. #define COMP_VDDA_DIV_5DIV16 COMP_CR_VCDIV_5DIV16 /**< VDDA 分压选择5/16 */
  49. #define COMP_VDDA_DIV_6DIV16 COMP_CR_VCDIV_6DIV16 /**< VDDA 分压选择6/16 */
  50. #define COMP_VDDA_DIV_7DIV16 COMP_CR_VCDIV_7DIV16 /**< VDDA 分压选择7/16 */
  51. #define COMP_VDDA_DIV_8DIV16 COMP_CR_VCDIV_8DIV16 /**< VDDA 分压选择8/16 */
  52. #define COMP_VDDA_DIV_9DIV16 COMP_CR_VCDIV_9DIV16 /**< VDDA 分压选择9/16 */
  53. #define COMP_VDDA_DIV_10DIV16 COMP_CR_VCDIV_10DIV16 /**< VDDA 分压选择10/16 */
  54. #define COMP_VDDA_DIV_11DIV16 COMP_CR_VCDIV_11DIV16 /**< VDDA 分压选择11/16 */
  55. #define COMP_VDDA_DIV_12DIV16 COMP_CR_VCDIV_12DIV16 /**< VDDA 分压选择12/16 */
  56. #define COMP_VDDA_DIV_13DIV16 COMP_CR_VCDIV_13DIV16 /**< VDDA 分压选择13/16 */
  57. /* 比较器正相输入 */
  58. #define COMP_INPSEL_IO1 COMP_CSR_INP_IO1 /**< 正相输入 COMP1 = PB0, COMP2 = PA3 */
  59. #define COMP_INPSEL_IO2 COMP_CSR_INP_IO2 /**< 正相输入 COMP1 = PB1, COMP2 = PA4 */
  60. /* 比较器反相输入 */
  61. #define COMP_INMSEL_INVREF COMP_CSR_INM_INT_VREF /**< 反相输入 内部参考电压 */
  62. #define COMP_INMSEL_IO COMP_CSR_INM_IO /**< 反相输入 COMP1 = PB1, COMP2 = PA4 */
  63. /* 比较器正相输入模式选择,可用于选择窗口比较器功能 */
  64. #define COMP_INPMODE_EACH_INPUT (0x00000000U) /**< 正相输入各自独立,由各自inpsel决定 */
  65. #define COMP_INPMODE_COMMON_INPUT COMP_CSR_INPMOD /**< 正相输入相互连接,即窗口比较器模式 */
  66. /* 比较器滤波时间 */
  67. #define COMP_FLTIME_1CYCLE COMP_CSR_FLTIME_1CYCLE /**< 滤波时间 1个CYCLE */
  68. #define COMP_FLTIME_3CYCLE COMP_CSR_FLTIME_3CYCLE /**< 滤波时间 3个CYCLE */
  69. #define COMP_FLTIME_7CYCLE COMP_CSR_FLTIME_7CYCLE /**< 滤波时间 7个CYCLE */
  70. #define COMP_FLTIME_15CYCLE COMP_CSR_FLTIME_15CYCLE /**< 滤波时间 15个CYCLE */
  71. #define COMP_FLTIME_31CYCLE COMP_CSR_FLTIME_31CYCLE /**< 滤波时间 31个CYCLE */
  72. #define COMP_FLTIME_63CYCLE COMP_CSR_FLTIME_63CYCLE /**< 滤波时间 63个CYCLE */
  73. #define COMP_FLTIME_255CYCLE COMP_CSR_FLTIME_255CYCLE /**< 滤波时间 255个CYCLE */
  74. #define COMP_FLTIME_1023CYCLE COMP_CSR_FLTIME_1023CYCLE /**< 滤波时间 1023个CYCLE */
  75. /* 比较器输出极性 */
  76. #define COMP_OUTPOL_NON_INVERTED (0x00000000U) /**< 输出状态不反相 */
  77. #define COMP_OUTPOL_INVERTED COMP_CSR_POL /**< 输出状态反相 */
  78. /* 比较器输出选择 */
  79. #define COMP_OUTMODE_EACH_OUT (0x00000000U) /**< 输出为其原始电压比较结果 */
  80. #define COMP_OUTMODE_COMMON_XOR_OUT COMP_CSR_OUTMOD /**< 输出为比较器1、2电压比较结果异或 */
  81. /* 比较器输出结果 */
  82. #define COMP_OUTPUT_LEVEL_LOW (0x00000000UL) /**< 比较器输出电平低 */
  83. #define COMP_OUTPUT_LEVEL_HIGH (0x00000001UL) /**< 比较器输出电平高 */
  84. /* 比较器内部参考电压源 */
  85. #define COMP_REFERENCE_VBGR (0x00000000UL) /**< 比较器内部参考电压源选择VBGR */
  86. #define COMP_REFERENCE_VDDA_DIV COMP_CR_VCSEL /**< 比较器内部参考电压源选择VDDA 16级分压 */
  87. /* COMP启动稳定时间 */
  88. #define COMP_EN_DELAY (1U) /**< COMP使能启动时间 */
  89. /**
  90. * @}
  91. */
  92. /*-------------------------------------------functions------------------------------------------*/
  93. /************************************************************************************************/
  94. /**
  95. * @defgroup COMP_External_Functions COMP External Functions
  96. * @brief COMP对外函数
  97. * @{
  98. *
  99. */
  100. /************************************************************************************************/
  101. /**
  102. * @brief 使能COMP
  103. * @param compx COMP外设
  104. * @retval 无
  105. */
  106. __STATIC_INLINE void std_comp_enable(COMP_t *compx)
  107. {
  108. compx->CSR |= (COMP_CSR_EN);
  109. }
  110. /**
  111. * @brief 禁止COMP
  112. * @param compx COMP外设
  113. * @retval 无
  114. */
  115. __STATIC_INLINE void std_comp_disable(COMP_t *compx)
  116. {
  117. compx->CSR &= (~COMP_CSR_EN);
  118. }
  119. /**
  120. * @brief 设置COMP反相输入
  121. * @param compx COMP外设
  122. * @param input_minus 反相输入选择
  123. * @arg COMP_INMSEL_INVREF
  124. * @arg COMP_INMSEL_IO
  125. * @retval 无
  126. */
  127. __STATIC_INLINE void std_comp_set_input_minus(COMP_t *compx, uint32_t input_minus)
  128. {
  129. MODIFY_REG(compx->CSR, COMP_CSR_INM, input_minus);
  130. }
  131. /**
  132. * @brief 获取COMP反相输入
  133. * @param compx COMP外设
  134. * @retval uint32_t 返回反相输入
  135. * @arg COMP_INMSEL_INVREF
  136. * @arg COMP_INMSEL_IO
  137. */
  138. __STATIC_INLINE uint32_t std_comp_get_input_minus(COMP_t *compx)
  139. {
  140. return(compx->CSR & COMP_CSR_INM);
  141. }
  142. /**
  143. * @brief 设置COMP正相输入
  144. * @param compx COMP外设
  145. * @param input_plus 正相输入选择
  146. * @arg COMP_INPSEL_IO1
  147. * @arg COMP_INPSEL_IO2
  148. * @retval 无
  149. */
  150. __STATIC_INLINE void std_comp_set_input_plus(COMP_t *compx, uint32_t input_plus)
  151. {
  152. MODIFY_REG(compx->CSR, COMP_CSR_INP, input_plus);
  153. }
  154. /**
  155. * @brief 获取COMP正相输入
  156. * @param compx COMP外设
  157. * @retval uint32_t 返回正相输入
  158. * @arg COMP_INPSEL_IO1
  159. * @arg COMP_INPSEL_IO2
  160. */
  161. __STATIC_INLINE uint32_t std_comp_get_input_plus(COMP_t *compx)
  162. {
  163. return(compx->CSR & COMP_CSR_INP);
  164. }
  165. /**
  166. * @brief 设置COMP正相输入模式
  167. * @param compx COMP外设
  168. * @param input_mode 正相输入模式选择
  169. * @arg COMP_INPMODE_EACH_INPUT
  170. * @arg COMP_INPMODE_COMMON_INPUT
  171. * @retval 无
  172. */
  173. __STATIC_INLINE void std_comp_set_input_plus_mode(COMP_t *compx, uint32_t input_mode)
  174. {
  175. MODIFY_REG(compx->CSR, COMP_CSR_INPMOD, input_mode);
  176. }
  177. /**
  178. * @brief 设置COMP输出模式
  179. * @param compx COMP外设
  180. * @param output_mode 输出模式选择
  181. * @arg COMP_OUTMODE_EACH_OUT
  182. * @arg COMP_OUTMODE_COMMON_XOR_OUT
  183. * @retval 无
  184. */
  185. __STATIC_INLINE void std_comp_set_output_mode(COMP_t *compx, uint32_t output_mode)
  186. {
  187. MODIFY_REG(compx->CSR, COMP_CSR_OUTMOD, output_mode);
  188. }
  189. /**
  190. * @brief 设置COMP输出极性
  191. * @param compx COMP外设
  192. * @param output_polarity 输出极性选择
  193. * @arg COMP_OUTPOL_NON_INVERTED
  194. * @arg COMP_OUTPOL_INVERTED
  195. * @retval 无
  196. */
  197. __STATIC_INLINE void std_comp_set_output_polarity(COMP_t *compx, uint32_t output_polarity)
  198. {
  199. MODIFY_REG(compx->CSR, COMP_CSR_POL, output_polarity);
  200. }
  201. /**
  202. * @brief 获取COMP输出极性
  203. * @param compx COMP外设
  204. * @retval uint32_t 返回输出极性
  205. * @arg COMP_OUTPOL_NON_INVERTED
  206. * @arg COMP_OUTPOL_INVERTED
  207. */
  208. __STATIC_INLINE uint32_t std_comp_get_output_polarity(COMP_t *compx)
  209. {
  210. return(compx->CSR & COMP_CSR_POL);
  211. }
  212. /**
  213. * @brief 使能COMP的输入迟滞
  214. * @retval 无
  215. */
  216. __STATIC_INLINE void std_comp_input_hysteresis_enable(void)
  217. {
  218. COMP_COMMON->CR |= COMP_CR_HYST;
  219. }
  220. /**
  221. * @brief 禁止COMP的输入迟滞
  222. * @retval 无
  223. */
  224. __STATIC_INLINE void std_comp_input_hysteresis_disable(void)
  225. {
  226. COMP_COMMON->CR &= ~COMP_CR_HYST;
  227. }
  228. /**
  229. * @brief 设置COMP输出滤波时间
  230. * @param compx COMP外设
  231. * @param filter_time 滤波时间选择
  232. * @arg COMP_FLTIME_1CYCLE
  233. * @arg COMP_FLTIME_3CYCLE
  234. * @arg ...
  235. * @arg COMP_FLTIME_1023CYCLE
  236. * @retval 无
  237. */
  238. __STATIC_INLINE void std_comp_set_output_filter_time(COMP_t *compx, uint32_t filter_time)
  239. {
  240. MODIFY_REG(compx->CSR, COMP_CSR_FLTIME, filter_time);
  241. }
  242. /**
  243. * @brief COMP输出滤波使能
  244. * @param compx COMP外设
  245. * @retval 无
  246. */
  247. __STATIC_INLINE void std_comp_output_filter_enable(COMP_t *compx)
  248. {
  249. compx->CSR |= (COMP_CSR_FLTEN);
  250. }
  251. /**
  252. * @brief COMP输出滤波禁止
  253. * @param compx COMP外设
  254. * @retval 无
  255. */
  256. __STATIC_INLINE void std_comp_output_filter_disable(COMP_t *compx)
  257. {
  258. compx->CSR &= (~COMP_CSR_FLTEN);
  259. }
  260. /**
  261. * @brief 获取COMP使能状态
  262. * @param compx COMP外设
  263. * @retval uint32_t 返回判断结果
  264. * @arg 非0: 表示COMP已使能
  265. * @arg 0: 表示COMP未使能
  266. */
  267. __STATIC_INLINE uint32_t std_comp_get_enable_status(COMP_t *compx)
  268. {
  269. return (compx->CSR & COMP_CSR_EN);
  270. }
  271. /**
  272. * @brief 获取COMP输出结果
  273. * @param compx COMP外设
  274. * @retval uint32_t 返回COMP输出结果
  275. * @arg COMP_OUTPUT_LEVEL_LOW
  276. * @arg COMP_OUTPUT_LEVEL_HIGH
  277. */
  278. __STATIC_INLINE uint32_t std_comp_get_output_result(COMP_t *compx)
  279. {
  280. return ((compx->CSR & COMP_CSR_VAL) >> COMP_CSR_VAL_POS);
  281. }
  282. /**
  283. * @brief COMP参考电压源设置
  284. * @arg COMP_REFERENCE_VBGR
  285. * @arg COMP_REFERENCE_VDDA_DIV
  286. * @note VDDA分压作为参考电压源,需配置VDDA分压参数;
  287. * @retval 无
  288. */
  289. __STATIC_INLINE void std_comp_set_reference_source(uint32_t reference_voltage)
  290. {
  291. MODIFY_REG(COMP_COMMON->CR, COMP_CR_VCSEL, reference_voltage);
  292. }
  293. /**
  294. * @brief 获取COMP参考电压源
  295. * @retval uint32_t 返回参考电源源
  296. * @arg COMP_REFERENCE_VBGR
  297. * @arg COMP_REFERENCE_VDDA_DIV
  298. */
  299. __STATIC_INLINE uint32_t std_comp_get_reference_source(void)
  300. {
  301. return (COMP_COMMON->CR & COMP_CR_VCSEL);
  302. }
  303. /**
  304. * @brief 设置VDDA 16级分压
  305. * @param vdda_div VDDA 16级分压
  306. * @arg COMP_VDDA_DIV_1DIV16
  307. * @arg COMP_VDDA_DIV_2DIV16
  308. * @arg ...
  309. * @arg COMP_VDDA_DIV_13DIV16
  310. * @retval 无
  311. */
  312. __STATIC_INLINE void std_comp_set_ref_vdda_div(uint32_t vdda_div)
  313. {
  314. MODIFY_REG(COMP_COMMON->CR, COMP_CR_VCDIV, vdda_div);
  315. }
  316. /**
  317. * @brief 获取VDDA 16级分压
  318. * @retval uint32_t 返回 VDDA 16级分压
  319. * @arg COMP_VDDA_DIV_1DIV16
  320. * @arg COMP_VDDA_DIV_2DIV16
  321. * @arg ...
  322. * @arg COMP_VDDA_DIV_13DIV16
  323. */
  324. __STATIC_INLINE uint32_t std_comp_get_ref_vdda_div(void)
  325. {
  326. return (COMP_COMMON->CR & COMP_CR_VCDIV);
  327. }
  328. /**
  329. * @brief 配置COMP的正相输入和反向输入
  330. * @param compx COMP外设
  331. * @param input_plus 正相输入选择
  332. * @arg COMP_INPSEL_IO1
  333. * @arg COMP_INPSEL_IO2
  334. * @param input_minis 反向相输入选择
  335. * @arg COMP_INMSEL_INVREF
  336. * @arg COMP_INMSEL_IO
  337. *
  338. * @retval 无
  339. */
  340. __STATIC_INLINE void std_comp_input_config(COMP_t *compx, uint32_t input_plus, uint32_t input_minis)
  341. {
  342. MODIFY_REG(compx->CSR,
  343. (COMP_CSR_INP | COMP_CSR_INM),
  344. (input_plus | input_minis));
  345. }
  346. /* COMP去初始化函数 */
  347. void std_comp_deinit(COMP_t *compx);
  348. /**
  349. * @}
  350. */
  351. #ifdef __cplusplus
  352. }
  353. #endif
  354. /**
  355. * @}
  356. */
  357. /**
  358. * @}
  359. */
  360. #endif /* CIU32F003_STD_COMP_H */