我用96的ADC0模块对一个类似2次曲线的信号进行采样,用了2种方式,always采样+数字比较器功能和timer触发,中断比较记录数据。均存在问题。
1. always采样+数字比较器
我对波形进行采样,通道按如下配置 ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH13 | ADC_CTL_CMP0 );
ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH13 | ADC_CTL_END );
ADCComparatorConfigure(ADC0_BASE, 0, ADC_COMP_INT_HIGH_ALWAYS );
ADCComparatorRegionSet(ADC0_BASE, 0, 700, 700);
在中断里面用 HWREG(ADC0_BASE + ADC_O_SSFIFO0) 读数 ,当我用500ksps的速率采样,每次大概有140左右的数,但是每次采集的数前8个数不对(这8个数值大小是递减的,应该是上次采集的数的尾部8个数)而本次采集的最后一个数值离700还有很远,大概740左右就没了,每次都是这样。后来尝试在采样开始前读一次FIFO再采集,那么前8个数就变成很小的数,大概30左右(这个曲线的位置离开始采样有比较远的距离,有足够的时间初始化),后面还是一样,如果 数据采集结束后读一次FIFO,那么这8个数就是从740到700递减的8个数;然后在采集,那么前8个数还是很小的数。这是什么原因???
2. timer触发,中断比较记录数据
后来我用这个方式,timer如下配置 SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 );
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()/125000);
TimerControlTrigger(TIMER0_BASE, TIMER_A, 1);
在中断中读数字进行比较,>700的就记录下来,采样的数字顺序是对的。但是当我把SysCtlClockGet()/125000 改为250000,500000,1000000时采样得到点数确是一样,这似乎不对,采样点数应该增加才对,这又是什么原因呢?
请教各位高手,能告知原因吗? 是我哪里设置有问题吗?