/*******************************************************************************************************************************/ uint32_t TCAN_READ(uint16_t Add_int16) { uint8_t Addr_byte = 0x00; uint8_t error_mst; uint8_t readData; uint8_t readData1; uint8_t readData2; uint8_t readData3; uint32_t returnData = 0x00000000; //MAKE THE CHIP SELECT LOW CANFD_SS_Pin_PutVal(0); error_mst |= TCAN_Send_Char(AHB_READ_OPCODE); Addr_byte = (uint8_t)(Add_int16>>8); error_mst |= TCAN_Send_Char(Addr_byte); Addr_byte = (uint8_t)(Add_int16); error_mst |= TCAN_Send_Char(Addr_byte); error_mst |= TCAN_Send_Char(0x01); ///////////////////////////ACTUAL READ HAPPENS HERE //error_mst |= TCAN_Recv_Char(&Read_Data); error_mst |= TCAN_Recv_Char(&Read_Data); readData = Read_Data; //1st byte error_mst |= TCAN_Recv_Char(&Read_Data); readData1 = Read_Data; //2nd byte error_mst |= TCAN_Recv_Char(&Read_Data); readData2 = Read_Data; //3rd byte error_mst |= TCAN_Recv_Char(&Read_Data); readData3 = Read_Data; //4th byte returnData = (((uint32_t)readData) << 24) | (((uint32_t)readData1 << 16)) | (((uint32_t)readData2) << 8) | readData3; delay(); //MAKE THE CHIP SELECT HIGH CANFD_SS_Pin_PutVal(1); return returnData; } /*******************************************************************************************************************************/ uint8_t TCAN_WRITE(uint16_t Add_int16,uint32_t data_32) { uint8_t status; uint8_t error_mst; uint8_t Addr_byte; uint8_t Data_byte; status = ERR_OK; CANFD_SS_Pin_PutVal(0); error_mst |= TCAN_Send_Char(AHB_WRITE_OPCODE); Addr_byte = (uint8_t)(Add_int16>>8); error_mst |= TCAN_Send_Char(Addr_byte); Addr_byte = (uint8_t)(Add_int16); error_mst |= TCAN_Send_Char(Addr_byte); error_mst |= TCAN_Send_Char(0x01); ///////////////////////////ACTUAL WRITE HAPPENS HERE Data_byte = (uint8_t)(data_32>>24); error_mst |= TCAN_Send_Char(Data_byte); Data_byte = (uint8_t)(data_32>>16); error_mst |= TCAN_Send_Char(Data_byte); Data_byte = (uint8_t)(data_32>>8); error_mst |= TCAN_Send_Char(Data_byte); Data_byte = (uint8_t)(data_32); error_mst |= TCAN_Send_Char(Data_byte); delay(); //MAKE THE CHIP SELECT HIGH CANFD_SS_Pin_PutVal(1); status = error_mst; return status ; } /*******************************************************************************************************************************/ uint8_t TCAN_BURST_READ(uint16_t Add_int16,uint32_t *data_32, uint8_t No_Of_Words) { uint8_t status; uint8_t word_count; uint8_t error_mst; uint8_t Addr_byte; uint8_t readData; uint8_t readData1; uint8_t readData2; uint8_t readData3; status = ERR_OK; word_count = 0; //MAKE THE CHIP SELECT LOW CANFD_SS_Pin_PutVal(0); error_mst = TCAN_Send_Char(AHB_READ_OPCODE); Addr_byte = (uint8_t)(Add_int16>>8); error_mst = TCAN_Send_Char(Addr_byte); Addr_byte = (uint8_t)(Add_int16); error_mst = TCAN_Send_Char(Addr_byte); error_mst = TCAN_Send_Char(No_Of_Words); ///////////////////////////ACTUAL WRITE HAPPENS HERE for(word_count=0; word_count>8); error_mst |= TCAN_Send_Char(Addr_byte); Addr_byte = (uint8_t)(Add_int16); error_mst |= TCAN_Send_Char(Addr_byte); error_mst |= TCAN_Send_Char(No_Of_Words); ///////////////////////////ACTUAL WRITE HAPPENS HERE for(word_count=0; word_count> 24); error_mst |= TCAN_Send_Char(Data_byte); Data_byte = (uint8_t)(*data_32 >> 16); error_mst |= TCAN_Send_Char(Data_byte); Data_byte = (uint8_t)(*data_32 >> 8); error_mst |= TCAN_Send_Char(Data_byte); Data_byte = (uint8_t)(*data_32); error_mst |= TCAN_Send_Char(Data_byte); data_32++; } delay(); CANFD_SS_Pin_PutVal(1); status = error_mst; return status ; } /*******************************************************************************************************************************/ uint8_t TCAN_Send_Char(uint8_t Send_data) { uint8_t dummy_data; uint8_t SPI0_error; SPI0_error |= CANFD_SendChar(Send_data); //while(SPI0SR_SPTEF == 0); //wait till transmission complete while(SPI0SR_SPIF == 0); //wait till data received complete SPI0_error |= CANFD_RecvChar(&Read_Data); return SPI0_error; } /*******************************************************************************************************************************/ uint8_t TCAN_Recv_Char(uint8_t *Receive_data) { uint8_t dummy_data =0x00; uint8_t SPI0_error; SPI0_error |=CANFD_SendChar(dummy_data); //while(SPI0SR_SPTEF == 0); //wait till transmission complete while(SPI0SR_SPIF == 0); //wait till data received complete SPI0_error |= CANFD_RecvChar(Receive_data); return SPI0_error; } /*******************************************************************************************************************************/ void delay(void) { uint8_t count = 0; for(count = 0;count<100;count++) { __asm("NOP"); } }