ADC原始数据形成

时间:2019-04-20 11:32:30

标签: c msp430 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];

1 个答案:

答案 0 :(得分:1)

我将跳过变量声明,因为我将在说明书的其余部分中引用它。

代码从这一行开始:

TI_ADS1293_SPIStreamReadReg(read_buf, count);

从Google搜索中,我假设您具有this file中的此功能。如果是此功能,它将从该模块读取三个寄存器(请参见 8.6寄存器映射,数据寄存器DATA_CHx_ECG的长度为3个字节,即{{1 }}变量。

执行此功能后,您将在count变量的前三个字节中保存ECG数据,但是由于量化值是24位值,因此您需要一个24位值。

由于C语言中没有read_buf(并且我不知道其他语言),因此我们采用下一个可能的大小,即uint24_t来声明uint32_t变量。

现在,以下代码确实从我们从ADC读取的3个字节中重建了单个24位值:

adc_data

从数据表和adc_data = ((uint32_t) read_buf[0] << 16) | ((uint16_t) read_buf[1] << 8) | read_buf[2]; 中,我们知道该函数确实按地址的顺序读取值,在这种情况下,高字节,中字节和低字节分别以此顺序读取( TI_ADS1293_SPIStreamReadRegread_but[0]read_buf[1])。

要重建24位值,代码会将值偏移适当的偏移量:read_buf[2]从第23位移至16,从而偏移了16位,read_buf[0]从第15位移至8,因此偏移了8位和read_buf[1]从7到0移位了0位(此移位未表示)。我们将这样表示它们(read_buf[2]0xAA0xBB是显示发生情况的示例值):

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 的结果是:

|

现在您的ADC读数为24位。