#include "SysTick.h" #include "IM1253E.h" #include "common.h" #include "uart.h" #include "stdbool.h" #define UART1_BUF_SIZE 64 uint8_t Tx_Data_frame_IM1253E[UART1_BUF_SIZE]; extern bool B_Rx_Finish; extern uint8_t RX_Length; extern uint8_t Rx_Data_len; extern uint8_t u8_RX_Index; extern uint8_t u8_RxBuf[UART1_BUF_SIZE]; uint16_t CRC_calculate_function(uint8_t len) { uint8_t i = 0; uint8_t j = 0; uint16_t temp0 = 0xffff; uint16_t temp1 = 0xffff; for(i = 0;i < len;i++) { temp0 = Tx_Data_frame_IM1253E[i] ^ temp0; temp1 = temp0 >> 1; for(j = 0;j < 8;j++) { if((temp0 & 0x0001) > 0) { temp0 = temp1 ^ 0xa001; } else { temp0 = temp1; } temp1 = temp0 >> 1; } } return temp0; } void Read_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t len) { uint16_t temp0; u8_RX_Index = 0; B_Rx_Finish = 0; RX_Length = len << 2; RX_Length = RX_Length + 5; Tx_Data_frame_IM1253E[0] = dev_addr; Tx_Data_frame_IM1253E[1] = cmd_read_IM1253E; Tx_Data_frame_IM1253E[2] = reg_addr >> 8; Tx_Data_frame_IM1253E[3] = reg_addr; Tx_Data_frame_IM1253E[4] = 0x00; Tx_Data_frame_IM1253E[5] = len; temp0 = CRC_calculate_function(6); Tx_Data_frame_IM1253E[6] = temp0; Tx_Data_frame_IM1253E[7] = temp0 >> 8; Start_Send_UartData(Tx_Data_frame_IM1253E,8); } void Write_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t *pt,uint8_t len) { uint8_t i; RX_Length = len + 6; Tx_Data_frame_IM1253E[0] = dev_addr; Tx_Data_frame_IM1253E[1] = cmd_read_IM1253E; Tx_Data_frame_IM1253E[2] = reg_addr >> 8; Tx_Data_frame_IM1253E[3] = reg_addr; Tx_Data_frame_IM1253E[4] = 0x00; Tx_Data_frame_IM1253E[5] = len; Tx_Data_frame_IM1253E[6] = len << 1; for(i = 0;i < len;i++) { Tx_Data_frame_IM1253E[7 + i] = *(pt + i); } Tx_Data_frame_IM1253E[7 + len] = CRC_calculate_function(7 + len); Tx_Data_frame_IM1253E[8 + len] = CRC_calculate_function(7 + len) >> 8; Start_Send_UartData(Tx_Data_frame_IM1253E,(9 + len)); }