Other Parts Discussed in Thread: ADS1292R, ADS1292
我在移植官方给的ADS1292R例程库的时候,有个地方一直不明白。望有人给解答一下。
例程中将9个字节的原始数据读回来之后,做了合并处理,将没3个字节合成一个32位的数据存放在ADS1x9x_ECG_Data_buf中。ADS1x9x_ECG_Data_buf[1]存放的是ch1的数据,ADS1x9x_ECG_Data_buf[2]存放的是ch2的数据。
代码如下:这段代码没有问题,可以理解。
for (ECG_Chan_num = 0; ECG_Chan_num < 3; ECG_Chan_num++)
{
ADS1x9x_ECG_Data_buf[ECG_Chan_num] = (signed long)SPI_Rx_buf[3*ECG_Chan_num];
ADS1x9x_ECG_Data_buf[ECG_Chan_num] = ADS1x9x_ECG_Data_buf[ECG_Chan_num] << 8;
ADS1x9x_ECG_Data_buf[ECG_Chan_num] |= SPI_Rx_buf[3*ECG_Chan_num+1];
ADS1x9x_ECG_Data_buf[ECG_Chan_num] = ADS1x9x_ECG_Data_buf[ECG_Chan_num] << 8;
ADS1x9x_ECG_Data_buf[ECG_Chan_num] |= SPI_Rx_buf[3*ECG_Chan_num+2];
}
可是后面在滤波 之前又做了处理,代码如下:
ADS1x9x_ECG_Data_buf[1] = ADS1x9x_ECG_Data_buf[1];
ADS1x9x_ECG_Data_buf[2] = ADS1x9x_ECG_Data_buf[2] >> 4;
ADS1x9x_ECG_Data_buf[1] &= 0xFFFF;
ADS1x9x_ECG_Data_buf[2] &= 0xFFFF;
ECGRawData[0] = (short)ADS1x9x_ECG_Data_buf[1];
ECGRawData[1] = (short)ADS1x9x_ECG_Data_buf[2];
ECGRawData[0-1]是需要进行滤波的原始数据,为什么又24bit数据变成了16bit的,重点是标红出的代码怎么理解。
后面将两个16bit的数据带入了滤波函数中。代码如下:
Resp_ProcessCurrSample(&ECGRawData[0],&ECGFilteredData[0]);
ECG_ProcessCurrSample(&ECGRawData[1],&ECGFilteredData[1]);
望有大神解答一下。谢谢