我想开启多个adc。
1、在不使用sce的情况下,必须建立多个线程任务,每个线程任务都开启一个adc任务?
2、那么在使用sce的情况下,也是开启多个任务?
3、使用多个adc的时候,我不想连续测试,又想功耗很低,需要采集的时候才采集,那么我应该用哪个好?
我下面写的程序可行吗?
#include "adc.h" #include <ti/drivers/ADC.h> ADC_Paramsparams; ADC_Handleadc23,adc24,adc25,adc26,adc27,adc28,adc29,adc30; void ADC_Init(void) {ADC_init();ADC_Params_init(¶ms); } uint16_t ADC23_Convert(void) {int_fast16_t res= 0;uint16_tadcValue = 0;adc23 = ADC_open(CC1310_LAUNCHXL_ADC0, ¶ms);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_tadcValue = 0;adc24 = ADC_open(CC1310_LAUNCHXL_ADC1, ¶ms);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_tadcValue = 0;adc25 = ADC_open(CC1310_LAUNCHXL_ADC2, ¶ms);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_tadcValue = 0;adc26 = ADC_open(CC1310_LAUNCHXL_ADC3, ¶ms);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_tadcValue = 0;adc27 = ADC_open(CC1310_LAUNCHXL_ADC4, ¶ms);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_tadcValue = 0;adc28 = ADC_open(CC1310_LAUNCHXL_ADC5, ¶ms);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_tadcValue = 0;adc29 = ADC_open(CC1310_LAUNCHXL_ADC6, ¶ms);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_tadcValue = 0;adc30 = ADC_open(CC1310_LAUNCHXL_ADC7, ¶ms);res= ADC_convert(adc30, &adcValue);ADC_close(adc30);if (res == ADC_STATUS_SUCCESS){if(adcValue < 1) adcValue=1;//避开0,这样就知道是不是转换成功了return adcValue;}else{return 0;} }
Viki Shi:
需要开启多个任务,采用ADC的不同通道。CC1310的ADC最多支持8个通道,但是每次只能采样一个
user4988634:
回复 Viki Shi:
你好,Viki Shi:
谢谢你的回答。
uint16_t value0=0,value1=0;value0 = ADC23_Convert(); value1 = ADC24_Convert();我没有创建多个任务,这样调用上面的函数也能正常采集adc,我这样写可以吗?有什么弊端吗?