1. 概述

TG6210A芯片内置一个 12 bits 的逐次逼近式模拟数字转换器(ADC),支持 12 路外部模拟输入和若干内部模拟信号选择。ADC可以工作在单次转换和多通道扫描两种模式下,转换结果为 12/14/16 bits 左对齐模式。ADC 拥有深度为 32 的 FIFO,支持多种中断,支持 DMA 操作。ADC 除了用于普通模拟信号测量外,还可以用于测量供电电压,此外 ADC 还可以通过测量内/外部二极管电压用于温度检测。

2. API参考

2.1 ADC初始化

  • 函数原型:
    int hosal_adc_init(hosal_adc_dev_t *adc);
  • 功能描述:初始化ADC
  • 函数参数:
    • adc:需要初始化的ADC句柄 ```c typedef struct { uint8_t port; /< @brief adc port */ hosal_adc_config_t config; /< @brief adc config / hosal_dma_chan_t dma_chan; /**< @brief adc dma channel / hosal_adc_irq_t cb; /< @brief adc callback / void p_arg; /< @brief p_arg data / void priv; /*< @brief priv data / } hosal_adc_dev_t;
  1. ```c
  2. typedef struct {
  3. uint32_t sampling_freq; /**< @brief sampling frequency in Hz */
  4. uint32_t pin; /**< @brief adc pin */
  5. hosal_adc_sample_mode_t mode; /**< @brief adc sampling mode */
  6. uint8_t sample_resolution; /**< @brief adc sampling resolution */
  7. } hosal_adc_config_t;
  • 返回值:

    • 成功返回0。
    • 错误返回-1。

      2.2 增加通道

  • 函数原型:
    int hosal_adc_add_channel(hosal_adc_dev_t *adc, uint32_t channel);

  • 功能描述:增加adc channel。
  • 函数参数:
    • adc:ADC的句柄
    • channel:需要增加的channel
  • 返回值:

    • 成功返回0。
    • 错误返回-1。

      2.3 获取采样值

  • 函数原型:
    int hosal_adc_value_get(hosal_adc_dev_t *adc, uint32_t channel,

uint32_t timeout);

  • 功能描述:获取采样值。
  • 函数参数:
    • adc:ADC的句柄
    • channel:获取采样值channel
    • timeout:超时时间
  • 返回值:

    • 成功返回0。
    • 错误返回-1。

      2.4 反初始化ADC

  • 函数原型:
    int hosal_adc_finalize(hosal_adc_dev_t *adc);

  • 功能描述:deinit ADC
  • 函数参数:
    • adc:ADC的句柄
  • 返回值:
    • 成功返回0。
    • 错误返回-1。

      3. Demo示例

      ```c static hosal_adc_dev_t adc0; adc0.port = 0; adc0.config.sampling_freq = 340; adc0.config.pin = 17; adc0.config.mode = 0;

- 通过 hosal_adc_dev_t 定义一个adc设备,并设置port,port固定为0,mode只支持one shot模式。

```c
  ret = hosal_adc_init(&adc0);
  if (ret != 0) {
      blog_error("init rtc error\r\n");
  }
  • 调用 hosal_adc_init 初始化adc 。
hosal_adc_add_channel(&adc0, 0);
hosal_adc_add_channel(&adc0, 8);
  • 通过 hosal_adc_add_channel 来增加需要采样的通道。
ret = hosal_adc_value_get(&adc0, 0, 100);
  • 通过 hosal_adc_value_get 接口来获取对应通道的采样值。
  hosal_adc_finalize(&adc0);
  • 通过 hosal_adc_finalize 结束此adc的使用。