平头哥RVB2601板子上手——ADC采集与CSI

本文作者:bigbat


依据有限的资料知道CH2601的内部是有ADC的。但是引脚通过“ARDUINO”接口引出来的。

平头哥RVB2601板子上手——ADC采集与CSI


CH2601的adc驱动是在YOC开发包中提供的既CSI接口,CSI 是针对嵌入式系统,定义了CPU内核移植 接口、外围设备操作接口统一软件接口规范,消除不同芯片的差异,简化软件的使用及提高软件的移植性。通过CSI 接口规范,可以快速实现芯片对接到YoC 平台。CSI有CSI1和CSI2两种,CSI2的功能较CSI1的代码密度要高,CSI2的抽象要好一些。


CH2601的ADC可提供“支持单次转换、连续转换”本次测试为单次采集测试。代码根据yoc的例程。


程序的主要步骤如下:

1、打开引脚的功能

csi_pin_set_mux(EXAMPLE_ADC_CHANNEL0_PIN,  EXAMPLE_ADC_CHANNEL0_PIN_FUNC);

2、ADC初始化

ret = csi_adc_init(&adc, 0);

3、设置ADC的工作采样频率

ret = csi_adc_freq_div(&adc, 128);

4、设置采样周期

ret = csi_adc_sampling_time(&adc, 2);

5、使能ADC通道

ret = csi_adc_channel_enable(&adc, 0, true);

6、开始采样

ret = csi_adc_start(&adc);

7、读取采样数据

data = csi_adc_read(&adc);

6,7的步骤可以反复的进行。完整的程序如下:

#include <drv/adc.h>
#include <drv/tick.h>
#include <board_config.h>
//#include <board_init.h>
#define ADC_CHECK_RETURN(ret)            \
do {                                     \
    if (ret != CSI_OK) {                 \
        return -1;                       \
    }                                    \
} while(0);


static csi_adc_t adc;

int main(void)
{
    int      ret;
    uint32_t data;
    board_yoc_init();
    
    csi_pin_set_mux(EXAMPLE_ADC_CHANNEL0_PIN,  EXAMPLE_ADC_CHANNEL0_PIN_FUNC);
    ret = csi_adc_init(&adc, 0);
    ADC_CHECK_RETURN(ret);
    
    ret = csi_adc_freq_div(&adc, 128);
    if(ret == 0){
        return -1;
    }
    
    /* Configure sampling time */
    ret = csi_adc_sampling_time(&adc, 2);
    ADC_CHECK_RETURN(ret);

    /* Enable channel */
    ret = csi_adc_channel_enable(&adc, 0, true);
    ADC_CHECK_RETURN(ret);

    /* Trigger new conversion */
    ret = csi_adc_start(&adc);
    ADC_CHECK_RETURN(ret);

    /* Read result */
    data = csi_adc_read(&adc);
    printf("get adc result: %d\n", data);
    
    /* Uninit adc */
    csi_adc_uninit(&adc);
        
    LOGD(TAG, "%s\n", aos_get_app_version());
    oled_init();
    while (1) {
        LOGD(TAG, "Hello world! YoC");
        aos_msleep(1000);
    }

    return 0;
}


csi_adc_uninit(&adc);这一步是可以选的。


本次测试结果:

平头哥RVB2601板子上手——ADC采集与CSI


可以看到12位的ADC的采集值。


本文源自:平头哥芯片开放社区

上一篇:[Python学习] python 科学计算库NumPy—tile函数


下一篇:Spark新手入门——2.Hadoop集群(伪分布模式)安装