FreeRTOS临界区应用与总结


项目背景:

        做一个测量阻抗脉搏波的设备,设备功能其中之一是采集阻抗信号,通过一个高精度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的读取程序在读取过程中,受到了中断的干扰,导致其去做其他事情了。

例如:正常读取进程时,通信帧的情况如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值