0

我正在尝试以固定的时间间隔(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
    ...
}
4

0 回答 0