芯片开放社区
直播中

张览秀

9年用户 1239经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[技术讨论]

平头哥RVB2601板子上手-ADC采集与CSI简析

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


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
#include
#include
//#include
#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: %dn", data);
        
        /* Uninit adc */
    csi_adc_uninit(&adc);
               
    LOGD(TAG, "%sn", aos_get_app_version());
    oled_init();
    while (1) {
        LOGD(TAG, "Hello world! YoC");
        aos_msleep(1000);
    }

    return 0;
}

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

本次测试结果:


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


文章转载自:平头哥芯片开放社区 作者:bigbat

更多回帖

发帖
×
20
完善资料,
赚取积分