首先配置好ADC,每个序列结束时申请中断。再自定义的ADC中断函数,在函数体里对结果寄存器的值进行读取,清除中断标志,重新启动ADC转换等(总之可以进行连续采样,没有问题),但观察到每两次进入中断相隔的时间都不相同,即从进入第一个中断到进入第二个中断所花费的时钟周期数每次都在变化有(在我的配置下,几次分别为584、584、592、576、596、580、588、568、572等)。这是为什么?岂不是不能以固定的采样间隔进行采样?还是我哪里配置不对?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
一个序列只采一个通道A0,级联模式,启动停止模式,顺序采样,在每个SEQ1序列结束时置位INT_SEQ1。以下为中断函数
__interrupt void TT_ADC_ISR(void)
{
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);
if(array_index>(BUF_SIZE-1))
array_index=0;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//写1清除中断标志INT_SEQ1(.0),该位对EOS_BUF1无影响
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位SEQ1到初始状态
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 告知PIE收到了中断,写1清除该组的PIEACK寄存器
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//SEQ1重新启动转换的触发信号
DELAY_US(2.2);//16/7.5M=2.13(us)是在此配置下完成一次转换所需的时间
}
一个序列只采一个通道A0,级联模式,启动停止模式,顺序采样,在每个SEQ1序列结束时置位INT_SEQ1。以下为中断函数
__interrupt void TT_ADC_ISR(void)
{
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);
if(array_index>(BUF_SIZE-1))
array_index=0;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//写1清除中断标志INT_SEQ1(.0),该位对EOS_BUF1无影响
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位SEQ1到初始状态
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 告知PIE收到了中断,写1清除该组的PIEACK寄存器
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//SEQ1重新启动转换的触发信号
DELAY_US(2.2);//16/7.5M=2.13(us)是在此配置下完成一次转换所需的时间
}