unsigned char crcMediumCheck16 (unsigned char byte1, unsigned char byte2, unsigned char byte3) { unsigned char synd; synd = (byte1 ^ 0xEC); if (synd & 0x80) synd ^= 0xB7; synd = propagate7[synd] ^ byte2; if (synd & 0x80) synd ^= 0xB7; synd = propagate7[synd] ^ byte3; if (synd & 0x80) synd ^= 0xB7; return synd == 0; } uint16_t max14912_readback; /* cmd2 + data2 + crc2 + cmd1 + data1 + crc1 */ uint16_t Maxim14912_Data_Write(uint16_t data, uint16_t *pfault_data) { uint8_t dat1, dat2; //dat1 is first MAX14912(bit8-15),dat2 is second MAX14912(bit0-7) uint8_t CMD_Data[6]={0x80,0,0,0x80,0,0}; uint8_t data_rx[6]; uint8_t crc_check1, crc_check2; uint8_t ret = 0; uint16_t fault_data; dat1 = (uint8_t)((data >> 8) & 0xff); dat2 = (uint8_t)(data & 0xff); /* data build */ CMD_Data[4] = dat1; CMD_Data[1] = dat2; /* crc build */ CMD_Data[2] = crcMediumEncode16(CMD_Data[0], CMD_Data[1]); CMD_Data[5] = crcMediumEncode16(CMD_Data[3], CMD_Data[4]); /* spi send&recev */ Dio_Spi_Cs_Enable(DO_CS_SELECT); Dio_Spi_Transfer_Data(CMD_Data, data_rx, 6); Dio_Spi_Cs_Release(); /* crc check */ crc_check1 = crcMediumCheck16(data_rx[0], data_rx[1], data_rx[2]); crc_check2 = crcMediumCheck16(data_rx[3], data_rx[4], data_rx[5]); if((crc_check1 == 0) && (crc_check2 == 0)) { fault_data = ((uint16_t)data_rx[0]) | ((uint16_t)data_rx[3] << 8); *pfault_data = fault_data; max14912_readback = ((uint16_t)data_rx[1]) | ((uint16_t)data_rx[4] << 8); /* 2021.09.10 */ } else //crc错误 { max14912_readback = 0; /* 2021.09.10 */ ret = 1; } return ret; }
时间: 2024-04-27 13:22:18 浏览: 142
这段代码中主要实现了一个函数 Maxim14912_Data_Write,用于向一个 MAX14912 设备写入数据,并进行 CRC 校验。该函数的输入参数为一个 16 位的数据,其中高 8 位为 dat1,低 8 位为 dat2。函数首先将输入的数据按照一定的格式存储到数组 CMD_Data 中,然后计算出两个 CRC 校验码并存储到 CMD_Data 数组中。接着,函数通过 SPI 总线向 MAX14912 设备发送数据,并接收从设备返回的数据。最后,函数对接收到的数据进行 CRC 校验,若校验通过则将数据读取出来并返回 0,否则返回 1。
相关问题
typedef unsigned char Byte;
typedef是C/C++语言中的一个关键字,用于给已有的数据类型起一个新的别名。在这个例子中,typedef unsigned char Byte;的意思是将unsigned char类型起一个新的别名Byte。
unsigned char是一种无符号字符类型,它占用1个字节(8位),表示范围为0到255。通常用来表示字节数据。
通过使用typedef,我们可以方便地使用Byte来代替unsigned char,使代码更加易读和易于维护。
typedef unsigned char BYTE;
typedef unsigned char BYTE;是一种定义数据类型的方式。在这个例子中,它定义了一个BYTE类型,它被定义为一个无符号字符。在C++中,使用typedef可以给现有的数据类型取一个新的名字,这种方式可以使代码更加易读易懂。在本例中,BYTE可以代替unsigned char使用,从而使代码更具可读性和可维护性。
阅读全文