This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LC4357: receive data packet through sci protocol

Part Number: TMS570LC4357

sir i have written a code here i need a help for that 

what im doing in that was i want to receive data packets through rs422 to controller tms70ls3137 when im receiving it i should check LRC and CRC for that data packets 

/** @file HL_sys_main.c 
*   @brief Application main file
*   @date 11-Dec-2018
*   @version 04.07.01
*
*   This file contains an empty main function,
*   which can be used for the application.
*/

/* 
* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com  
* 
* 
*  Redistribution and use in source and binary forms, with or without 
*  modification, are permitted provided that the following conditions 
*  are met:
*
*    Redistributions of source code must retain the above copyright 
*    notice, this list of conditions and the following disclaimer.
*
*    Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the 
*    documentation and/or other materials provided with the   
*    distribution.
*
*    Neither the name of Texas Instruments Incorporated nor the names of
*    its contributors may be used to endorse or promote products derived
*    from this software without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
*  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/


/* USER CODE BEGIN (0) */
#include <stdint.h>
#include <stdbool.h>
#include "HL_sci.h"
#include "HL_system.h"
//#include "HL_LRC.h"
/* USER CODE END */

/* Include Files */

#include "HL_sys_common.h"

/* USER CODE BEGIN (1) */
/*#define NORMAL_TAG_ID 0x9
#define LC_GATE_TAG_ID 0xA
#define ADJACENT_TAG_ID 0xB
#define ADJUSTMENT_TAG_ID 0xC*/

static unsigned char command;
#define TSIZE 254
static uint8 R_Data[TSIZE];
static uint32 size;
//static uint8 Rx_size;
static uint8 TempData[128];
#define BUFFER_SIZE 1024

// uint8_t lrc;

void DataExtraction(const uint8 *text, uint8_t index);
void DataPacket(const uint8_t *Data_Format);
void sciDisplayText(sciBASE_t *sci, uint8 *text, uint32 length);/*just sci display text is declaration function.*/
void sciSendByte(sciBASE_t *sci, uint8 byte);
void wait(uint32 wait_time);                                                   /*waiting function declaration.*/

#define  UART sciREG1
#define MAX_PACKET_LENGHT 128

struct DataPacket {
    uint8 startValue[4];
    uint8 pageData[16];
    uint8 dummyDNT[23];
    uint8 pageNo[2];
    uint8 type[2];
    uint8 lrc[2];
};
  struct DataPacket datapacket;

/* USER CODE END */

/** @fn void main(void)
*   @brief Application main function
*   @note This function is empty by default.
*
*   This function is called after startup.
*   The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */

/*uint8_t calculate_lrc(const uint8_t *data, uint32_t size)
{
  uint32_t i;
  for (i = 0; i < size; i++)
  {
    lrc ^= data[i];
  }
  lrc ^= Data_Format.lrc[0];
  return lrc;
}*/

void DataPacket(const uint8_t *datapacket)
{
    typedef char NullChar;
    uint8 i, j = 0, k = 0;
    if (datapacket[0] == '$')
    {
    for (i = 0; i <= size; i++) {
        if (datapacket[i] != '|')
           {
               TempData[j] = datapacket[i];
               j++;
           }
           else
           {
               TempData[j] = (NullChar)'\0';
               k++;
               DataExtraction(TempData,k);
               j = 0;
           }
       }
    }
   // uint8_t lrc = calculate_lrc(packet, size);
        //Data_Format.lrc[0] = lrc;
}

void DataExtraction(const uint8 *text, uint8_t index)
{
    uint8 i = 0;
        switch (index)
        {
        case 1:
            while (text[i] != '\0')
            {
                datapacket.startValue[i] = text[i];
                i++;
            }
            break;
        case 2:
            while (text[i] != '\0')
            {
                datapacket.pageData[i] = text[i];
                i++;
            }
            break;
        case 3:
            while (text[i] != '\0')
            {
                datapacket.dummyDNT[i] = text[i];
                i++;
            }
            break;
        case 4:
            while (text[i] != '\0')
            {
                datapacket.pageNo[i] = text[i];
                i++;
            }
            break;
        case 5:
            while (text[i] != '\0')
            {
                datapacket.type[i] = text[i];
                i++;
           }
            break;
        case 6:
            while (text[i] != '\0')
            {
                datapacket.lrc[i] = text[i];
                i++;
            }
            break;
            }
        sciDisplayText(UART,&TempData[0] ,TSIZE);
}

/*uint8_t DetermainTagType(uint8_t *DataPacket)
{
    uint8_t tagType = NORMAL_TAG_ID;
    if (DataPacket[0] == LC_GATE_TAG_ID)
    {
      tagType = LC_GATE_TAG_ID;
    } else if (DataPacket[0] == ADJACENT_TAG_ID) {
      tagType = ADJACENT_TAG_ID;
    } else if (DataPacket[0] == ADJUSTMENT_TAG_ID) {
      tagType = ADJUSTMENT_TAG_ID;
    }

    return tagType;
  }*/

/* USER CODE END */

int main(void)
{
/* USER CODE BEGIN (3) */

    uint8_t completeBuffer[BUFFER_SIZE * 3];
     //uint8_t *dataPacketBytes = (uint8_t *)&Data_Format;
     struct DataPacket dataPacket1 = {
         .startValue = "$a00",
         .pageData = "4699040761993d9e",
         .dummyDNT = "0d0c00010400195056005e",
         .pageNo = "00",
         .type = "04",
         .lrc = "b9"
       };
       memcpy(completeBuffer, &dataPacket1, sizeof(dataPacket1));


       // Copy the second data packet into the buffer.
       struct DataPacket dataPacket2 = {
         .startValue = "$a00",
         .pageData = "028e8e82c8b2d05a",
         .dummyDNT = "0a0000010400195056005e",
         .pageNo = "01",
         .type = "04",
         .lrc = "2e"
       };
       memcpy(completeBuffer + sizeof(dataPacket1), &dataPacket2, sizeof(dataPacket2));

       // Copy the third data packet into the buffer.
       struct DataPacket dataPacket3 = {
         .startValue = "$a00",
         .pageData = "783a9ccd032c0007",
         .dummyDNT = "080000010400195056005e",
         .pageNo = "02",
         .type = "04",
         .lrc = "cc"
       };
       memcpy(completeBuffer + sizeof(dataPacket1) + sizeof(dataPacket2), &dataPacket3, sizeof(dataPacket3));

       int i;
       for (i = 0; i <sizeof (completeBuffer) ; i++) {
         sciSendByte(sciREG1, completeBuffer[i]);
       }

    sciInit();      /* initialize sci/sci-lin    */
                              /* even parity , 2 stop bits */
        _enable_interrupt_();                 /* enable pin intruppt request is access*/


              sciEnableNotification(sciREG1, (uint32)SCI_RX_INT);
                sciReceive(sciREG1, 1, (unsigned char*) &command);


                while(1)        /* continious desplay        */
                           {
                              sciDisplayText(UART,&R_Data[0],TSIZE);
                              sciDisplayText(UART,&completeBuffer[i],TSIZE);
                               wait(160000);
                               size = 0;
                           };

/* USER CODE END */

}

/* USER CODE BEGIN (4) */
void sciDisplayText(sciBASE_t *sci, uint8 *text, uint32 length)
{
    while(length > 0)
    {
        length--;
        while ((UART->FLR & (uint8)0x4) == (uint8)4) /* wait until busy */
        {
        sciSendByte(UART,*text++);     /* send out text   */
        }

    };
}

void sciNotification(sciBASE_t *sci, uint32 flags)                           /*sci notification function definition is UART and unsigned integers 4byte flags*/
{
    if (sci == UART)                                                    /*if statements is opened and checking of sci and UART*/
    {
       sciReceive(sciREG1, 1,(unsigned char*) &command);                 /*calling function is sci receive communication*/

       if (size > MAX_PACKET_LENGHT)
               {
                   size = 0u;
               }
               if (command == '$')                                                           /* validating  received data */
               {
                   size = 0u;
               }

       R_Data[size++] = command;                                             /*   Storing in RX variable   */
    }
}

void wait(uint32 wait_time)
{
    while (wait_time > 0)
{
    wait_time--;
  }
}
/* USER CODE END */
so i need help fro this how write a code for receving data packets