ADC原始数据形成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ADC原始数据形成相关的知识,希望对你有一定的参考价值。
我想请你解释我的代码的这一部分。我不确定它到底是做什么的。这是示例代码,我想了解它。原始代码的目的应该是在流模式下从ADC获取数据。这应该是关于形成原始数据。谢谢。
#define CH_DATA_SIZE 6
uint8_t read_buf[CH_DATA_SIZE];
uint32_t adc_data;
TI_ADS1293_SPIStreamReadReg(read_buf, count);
adc_data = ((uint32_t) read_buf[0] << 16) | ((uint16_t) read_buf[1] << 8)
| read_buf[2];
我将跳过变量声明,因为我将在其余的描述中引用它。
代码从这一行开始:
TI_ADS1293_SPIStreamReadReg(read_buf, count);
从谷歌搜索,我假设你有来自this file的这个功能。如果是这个函数,它将从该模块读取三个寄存器(参见8.6寄存器映射,数据寄存器DATA_CHx_ECG
是三个字节长,这应该是count
变量中的内容)。
执行此功能后,您将在read_buf
变量的前三个字节中获得ECG数据,但您需要一个24位值,因为量化值是24位值。
由于我们在C中没有uint24_t
(并且我没有其他语言),我们采用下一个可能的大小,即uint32_t
来声明adc_data
变量。
现在,以下代码从我们从ADC读取的3个字节重建了一个24位值:
adc_data = ((uint32_t) read_buf[0] << 16) | ((uint16_t) read_buf[1] << 8)
| read_buf[2];
从数据表和TI_ADS1293_SPIStreamReadReg
中,我们知道函数确实按照地址来的顺序读取值,在这种情况下按此顺序读取高字节,中间字节和低字节(分别在read_but[0]
,read_buf[1]
和read_buf[2]
中)。
为了重建24位值,代码使用适当的偏移量移位值:read_buf[0]
从第23位移位到16位,从而移位16位,read_buf[1]
从位15到8移位8位,read_buf[2]
从7移位到0,从而移位0位(没有代表这种转变)。我们将代表它们(0xAA
,0xBB
和0xCC
是示例值以显示发生的情况):
read_buf[0] = 0xAA => read_buf[0] << 16 = 0xAA0000
read_buf[1] = 0xBB => read_buf[0] << 8 = 0x00BB00
read_buf[2] = 0xCC => read_buf[0] << 0 = 0x0000CC
要组合三个移位值,代码使用按位或|
,结果如下:
0xAA0000 | 0x00BB00 | 0x0000CC = 0xAABBCC
而且你现在有一个24位的ADC读数值。
以上是关于ADC原始数据形成的主要内容,如果未能解决你的问题,请参考以下文章