ZHCAAO5A June 2020 – August 2021 ADS112C04 , ADS112U04 , ADS114S06 , ADS114S08 , ADS122C04 , ADS122U04 , ADS1235 , ADS1235-Q1 , ADS124S06 , ADS124S08 , ADS1259 , ADS1259-Q1 , ADS125H01 , ADS125H02 , ADS1260 , ADS1260-Q1 , ADS1261 , ADS1262 , ADS1263 , ADS127L01 , ADS131A02 , ADS131A04 , ADS131M04 , ADS131M06 , ADS131M08
汉明位是通过以下方式计算得出的:获取接收到的数据并计算汉明位,然后通过按位异或的方式与接收到的汉明位进行比较。
/**
* 通过重新计算并与传输的数据执行异或运算以进行比较来验证汉明/数据位。
*
* \详细信息:通过为每个汉明位使用位掩码,然后计算掩码值中
* 置 1 的位的数量,来计算汉明位。 该操作执行 5 次,
* 针对每个汉明位执行一次。此外,会计算校验和,返回附加到 24 位
* 数据的完整字节。用于计算的“in”值假定
* 传输的数据不包含汉明字节。计算完成后,
* 将汉明字节添加到输入值中,这是通过将 24 位值
* 左移 8 位来完成的。
*
* \参数 uint32_t in 是要计算和比较的值。
*
* \返回 uint32_t ham,如果与汉明位/校验和的计算结果相匹配,则返回 0。
*/
uint32_t checkHamming(uint32_t in)
{
// 验证汉明位时,取输入数据并计算汉明值,然后减去
// 汉明字节
// 所以取“in”并右移 8 位,然后计算汉明值
uint32_t ham = calcHamming((in & 0xFFFFFF00) >> 8);
// 计算出的汉明字节与从数据返回的汉明字节进行异或运算,
// 在理想情况下结果对于汉明码加上校验和为 0,因为汉明值
// 是完整的 32 位字,汉明字节是从数据中计算出来的,然后
// 与实际传输的汉明字节进行比较
uint32_t res = ham ^ in;
if(res == 0) return res;
else return (ham & 0x000000FF);
}