使用的CC2640R2F 7×7封装,有用到两个ADC channel,一个检测电量(IOID_25),一个检卡(IOID_30)。
测试发现 IOID_25 的ADC采样一次用时 40us, IOID_30 的ADC采样需要10ms。 注:采样到的值都是正确的。
1. 将 IOID_25 和 IOID_30 都连接到同一个信号上(电量信号),现象不变,说明2个ADC channel采样时间的差异与外部输入信号无关
2. 这两个ADC channel的初始化、采样这部分代码都是一样的,如下:
static void app_adc_init( void ) {ADC_ParamsadcParams;ADC_init();ADC_Params_init(&adcParams);app_battery_adc_handle = ADC_open( ADC_BATTERY_DETECT, &adcParams );if( app_battery_adc_handle == NULL )while(1);ADC_Params_init(&adcParams);app_card_adc_handle = ADC_open( ADC_CV520_CARD_DETECT, &adcParams );if( app_card_adc_handle == NULL )while(1); } void app_evt_process_rfu_timer(void) {HWREGB( GPIO_BASE + GPIO_O_DOUT3_0 + PIN_DBG_03 ) = 1;ADC_convert( app_card_adc_handle, &adc_test ); //ADC_convert( app_battery_adc_handle, &CurValue );HWREGB( GPIO_BASE + GPIO_O_DOUT3_0 + PIN_DBG_03 ) = 0; }
为什么 IOID_30 的ADC采样时间会这么长 ?需要10ms,而 IOID_25 只需要 40us。
Viki Shi:
“这两个ADC channel的初始化、采样这部分代码都是一样的”,确认一下,两个通道的sample time都完全一致吗?
AndyChen:
回复 Viki Shi:
Hi Viki,
不确定你说的“sample time”是指什么,是指采样时间,还是只采样频率/周期,还是采样时钟源频率。。。如果是指采样时间,这正是我的问题所在:
“ IOID_25 的ADC采样一次用时 40us, IOID_30 的ADC采样需要10ms ”
注:我这里所测的采样时间是ADC_convert()函数的执行时间。
Viki Shi:
回复 AndyChen:
我指的是采样频率/周期,两个通道设置得完全一致吗
AndyChen:
回复 Viki Shi:
我测试的时候都是定时器定时2秒采样一次。 采样时钟频率不知道是否有地方可以设置, ADC.h中的ADC_Params也并没有相关的设置
typedef struct ADC_Params_ {void*custom;/*!< Custom argument used by driverimplementation */boolisProtected;/*!< By default ADC uses a semaphoreto guarantee thread safety. Settingthis parameter to 'false' will eliminatethe usage of a semaphore for threadsafety. The user is then responsiblefor ensuring that parallel invocationsof ADC_convert() are thread safe. */ } ADC_Params;