我正在尝试以固定的时间间隔(150us)读取 ADC。控制器 (NUC230/240) 数据表指定“具有 1 MSPS 的 2 位 SAR ADC”,这意味着读取 1 个样本需要 1us。因此,如果我不在代码中做任何其他事情,我预计会有 150 个 ADC 样本。然而,我在 150us 内得到 170 到 175 个读数!我很好奇为什么我每次都没有得到相同数量的样本。以及如何以超过数据表中指定的速度读取。代码:
void TMR1_IRQHandler(void){
bReadAdcValue = OFF;
}
void TMR2_IRQHandler(void){
bFirst30PercentPeakFlag = OFF;
}
while(1){
...
//some code
...
TIMER_Open(TIMER1, TIMER_ONESHOT_MODE, 300);
TIMER_Open(TIMER2, TIMER_ONESHOT_MODE, 6666);//150us timer
bFirst30PercentPeakFlag = ON;
bReadAdcValue = ON;
while(ON == bReadAdcValue) {
while(LOW == ADC_GET_INT_FLAG(ADC, ADC_ADF_INT)) {
//wait for ADC conversion
}
u16AdcData = ADC_GET_CONVERSION_DATA(ADC, DATA_ADC_CHANNEL);
ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
if(ON == bFirst30PercentPeakFlag){
if(Count_i < 170){
u32First30PercentPeakData += u16AdcData;
Count_i++;
}
}
}
PRINT(count_i);
count_i = 0;
...
//other code
...
}