微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC1310开启多个adc的方法?

CC1310开启多个adc的方法?

时间:12-23 整理:3721RD 点击:

我想开启多个adc。

1、在不使用sce的情况下,必须建立多个线程任务,每个线程任务都开启一个adc任务?

2、那么在使用sce的情况下,也是开启多个任务?

3、使用多个adc的时候,我不想连续测试,又想功耗很低,需要采集的时候才采集,那么我应该用哪个好?

我下面写的程序可行吗?

#include "adc.h"
#include <ti/drivers/ADC.h>

ADC_Params   params;
ADC_Handle   adc23,adc24,adc25,adc26,adc27,adc28,adc29,adc30;

void ADC_Init(void)
{
    ADC_init();
    ADC_Params_init(&params);
}

uint16_t ADC23_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc23 = ADC_open(CC1310_LAUNCHXL_ADC0, &params);
    res   = ADC_convert(adc23, &adcValue);
    ADC_close(adc23);
    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC24_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc24 = ADC_open(CC1310_LAUNCHXL_ADC1, &params);
    res   = ADC_convert(adc24, &adcValue);
    ADC_close(adc24);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC25_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc25 = ADC_open(CC1310_LAUNCHXL_ADC2, &params);
    res   = ADC_convert(adc25, &adcValue);
    ADC_close(adc25);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC26_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc26 = ADC_open(CC1310_LAUNCHXL_ADC3, &params);
    res   = ADC_convert(adc26, &adcValue);
    ADC_close(adc26);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC27_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc27 = ADC_open(CC1310_LAUNCHXL_ADC4, &params);
    res   = ADC_convert(adc27, &adcValue);
    ADC_close(adc27);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC28_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc28 = ADC_open(CC1310_LAUNCHXL_ADC5, &params);
    res   = ADC_convert(adc28, &adcValue);
    ADC_close(adc28);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC29_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc29 = ADC_open(CC1310_LAUNCHXL_ADC6, &params);
    res   = ADC_convert(adc29, &adcValue);
    ADC_close(adc29);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}

uint16_t ADC30_Convert(void)
{
    int_fast16_t res      = 0;
    uint16_t     adcValue = 0;

    adc30 = ADC_open(CC1310_LAUNCHXL_ADC7, &params);
    res   = ADC_convert(adc30, &adcValue);
    ADC_close(adc30);

    if (res == ADC_STATUS_SUCCESS)
    {
        if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了
        return adcValue;
    }
    else
    {
        return 0;
    }
}





需要开启多个任务,采用ADC的不同通道。CC1310的ADC最多支持8个通道,但是每次只能采样一个

你好,Viki Shi:

        谢谢你的回答。

uint16_t value0=0,value1=0;

value0 = ADC23_Convert();
value1 = ADC24_Convert();

我没有创建多个任务,这样调用上面的函数也能正常采集adc,我这样写可以吗?有什么弊端吗?

value0 = ADC23_Convert();
value1 = ADC24_Convert();
这样写是没错的。没什么弊端,open -close -open -close, 是可以的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top