项目背景:
做一个测量阻抗脉搏波的设备,设备功能其中之一是采集阻抗信号,通过一个高精度ADC转换为AD值,并将AD值输出。软件模块示例如下:
if (CS1259Ready()) //等待ADC转换完成
{
Z13Adc = ReadADC(); //转换完成后读取ADC值;
printf("%d\t\t",Z13Adc);
Z13Res = CalRes(Z13Adc); //通过ADC值计算阻抗值
printf("%d\r\n",Z13Res);
vTaskDelay(5/portTICK_RATE_MS);
}
遇到的问题:
在连续读取ADC值时,会随机的中断测量,导致测量停止,或者可能会随机的发送错误数据,经排查非串口传输的原因。且传输错误的数据通常为随机性的产生FF,例如24bit的ADC,会出现后几个bit为F的情况。现象如下:
问题分析:
用逻辑分析仪抓取 ,发现是ADC的读取程序在读取过程中,受到了中断的干扰,导致其去做其他事情了。
例如:正常读取进程时,通信帧的情况如下: