drv_adc.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-04-28 CDT first version
  9. * 2024-02-20 CDT add structure for associating with the dma
  10. */
  11. #ifndef __DRV_ADC_H__
  12. #define __DRV_ADC_H__
  13. /*******************************************************************************
  14. * Include files
  15. ******************************************************************************/
  16. #include <rtthread.h>
  17. #include <rtdevice.h>
  18. #include "board_config.h"
  19. #include "drv_irq.h"
  20. #include "drv_dma.h"
  21. #include "hc32_ll.h"
  22. /* C binding of definitions if building with C++ compiler */
  23. #ifdef __cplusplus
  24. extern "C"
  25. {
  26. #endif
  27. /*******************************************************************************
  28. * Global type definitions ('typedef')
  29. ******************************************************************************/
  30. struct adc_dev_init_params
  31. {
  32. char name[8];
  33. uint16_t vref; /*!< Specifies the ADC reference voltage, unit is mv */
  34. uint16_t resolution; /*!< Specifies the ADC resolution.
  35. This parameter can be a value of @ref ADC_Resolution */
  36. uint16_t data_align; /*!< Specifies ADC data alignment.
  37. This parameter can be a value of @ref ADC_Data_Align */
  38. rt_bool_t hard_trig_enable;
  39. uint32_t hard_trig_src; /*a value of @ref ADC_Hard_Trigger_Sel */
  40. rt_bool_t internal_trig0_comtrg0_enable;
  41. rt_bool_t internal_trig0_comtrg1_enable;
  42. en_event_src_t internal_trig0_sel; /*@ref en_event_src_t in details */
  43. rt_bool_t internal_trig1_comtrg0_enable;
  44. rt_bool_t internal_trig1_comtrg1_enable;
  45. en_event_src_t internal_trig1_sel; /*@ref en_event_src_t in details */
  46. rt_bool_t continue_conv_mode_enable;
  47. rt_bool_t data_reg_auto_clear;
  48. uint32_t eoc_poll_time_max;
  49. struct dma_config *adc_eoca_dma;
  50. };
  51. struct adc_dev_dma_priv_ops
  52. {
  53. rt_err_t (*dma_trig_start)(void);
  54. rt_err_t (*dma_trig_stop)(void);
  55. rt_err_t (*dma_trig_config)(void);
  56. };
  57. struct adc_dev_priv_params
  58. {
  59. uint32_t flag;
  60. struct adc_dev_dma_priv_ops *ops;
  61. };
  62. /*******************************************************************************
  63. * Global pre-processor symbols/macros ('#define')
  64. ******************************************************************************/
  65. #define ADC_USING_EOCA_DMA_FLAG (1U)
  66. /*******************************************************************************
  67. * Global variable definitions ('extern')
  68. ******************************************************************************/
  69. /*******************************************************************************
  70. * Global function prototypes (definition in C source)
  71. ******************************************************************************/
  72. int rt_hw_adc_init(void);
  73. #ifdef __cplusplus
  74. }
  75. #endif
  76. #endif /* __DRV_ADC_H__ */
  77. /*******************************************************************************
  78. * EOF (not truncated)
  79. ******************************************************************************/