我使用MSP430F149对一个低频的信号进行采样。程序按下列设置ADC12的寄存器:
//ADC12初始化设置
P6SEL |= 0x03; //ADC12 A1/A0
ADC12CTL0 = ADC12ON + SHT0_3 + MSC;
ADC12CTL1 = SHP + ADC12DIV_7 + ADC12SSEL_1 + CONSEQ_3; //ADC12时钟源为ACLK,1/8分频
ADC12MCTL0 = INCH_0;
ADC12MCTL1 = INCH_1 + EOS;
ADC12IE = 0x02; //开启ADC12IFG.1中断
//ADC12中断函数
#pragma vector = ADC_VECTOR
__interrupt void ISR_ADC12(void)
{
_DINT();
ADC12IE = 0x00; //关闭ADC12中断
buff0[index] = ADC12MEM0;
buff1[index] = ADC12MEM1;
index++;
if(index == 30)
{
index = 0;
......
}
ADC12IE = 0x02; //开启ADC12IFG.1中断
_EINT();
}
其中ACLK时钟为LFXT1,是32768Hz的晶振。我根据如下公式:
4*Tadc12clk*2^SHTx + 13*(ADC12CLK时钟分频系数*1/Fadc12clk)
计算的采样频率大约是30.1Hz。从ADC12MEM寄存器接收数据是在中断程序中进行的,经过测量发现每个通道各接收30个数据均花费700ms的时间。这样看来,实际的采样率和寄存器设置的理论采样率有很大出入。这是为什么呢?
