C51 COMPILER V9.01   SH_IEC60730B_8051F_EE                                                 10/11/2023 14:22:17 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE SH_IEC60730B_8051F_EE
OBJECT MODULE PLACED IN .\output\sh_iec60730b_8051f_ee.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE code_classb\iec60730_lib\sh_iec60730b_8051f_ee.c LARGE OPTIMIZE(7,SIZE) 
                    -REGFILE(.\output\McuFlash_ISP.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage) DEBUG OBJE
                    -CTEXTEND PRINT(.\output\sh_iec60730b_8051f_ee.lst) OBJECT(.\output\sh_iec60730b_8051f_ee.obj)

line level    source

   1          /*
   2           * IEC60730 Class B Library for SINOWEALTH 8051 based ICs.
   3           * File:    sh_iec60730b_8051f_ee.c
   4           * Version: 1.0
   5           * Author:  Robin.zhang Chaoming.luo
   6           * Date:    04/21/2023
   7           * SINOWEALTH IS SUPPLYING THIS SOFTWARE FOR USE EXCLUSIVELY ON SINOWEALTH'S 
   8           * MICROCONTROLLER PRODUCTS. IT IS PROTECTED UNDER APPLICABLE COPYRIGHT LAWS. 
   9           * THIS SOFTWARE IS FOR GUIDANCE IN ORDER TO SAVE TIME. AS A RESULT, SINOWEALTH 
  10           * SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES 
  11           * WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH FIRMWARE AND/OR
  12           * THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN 
  13           * CONNECTION WITH THEIR PRODUCTS.
  14           *
  15          */
  16          
  17          #include "sh_iec60730b_8051f_cfg.h"
*** WARNING C318 IN LINE 17 OF code_classb\iec60730_lib\sh_iec60730b_8051f_ee.c: can't open file 'sh_iec60730b_8051f_cfg
             -.h'
  18          #include "MCURegister.h"
  19          
  20          #if SH_CHK_EE_EN == 1
*** WARNING C322 IN LINE 20 OF code_classb\iec60730_lib\sh_iec60730b_8051f_ee.c: unknown identifier
              
              SHT_EEADDR xdata __iec60730b_ee1_checksum;
              SHT_EEADDR     __iec60730b_ee1_addr;
              SHT_U16        __iec60730b_ee1_crc;
              
              SHT_EEADDR xdata __iec60730b_ee2_checksum;
              SHT_EEADDR     __iec60730b_ee2_addr;
              SHT_U16        __iec60730b_ee2_crc;
              
              SHT_U16        __iec60730b_ee_xram_crc;
              SHT_U16 xdata   __iec60730b_ee_xram_checksum    _at_    SH_CHK_EETOXRAM_END_ADDR;
               
              SHT_U16 code CRC16Table[256]=
              {
                  0x0000,  0x1021,  0x2042,  0x3063,  0x4084,  0x50a5,  0x60c6,  0x70e7,
                  0x8108,  0x9129,  0xa14a,  0xb16b,  0xc18c,  0xd1ad,  0xe1ce,  0xf1ef,
                  0x1231,  0x0210,  0x3273,  0x2252,  0x52b5,  0x4294,  0x72f7,  0x62d6,
                  0x9339,  0x8318,  0xb37b,  0xa35a,  0xd3bd,  0xc39c,  0xf3ff,  0xe3de,
                  0x2462,  0x3443,  0x0420,  0x1401,  0x64e6,  0x74c7,  0x44a4,  0x5485,
                  0xa56a,  0xb54b,  0x8528,  0x9509,  0xe5ee,  0xf5cf,  0xc5ac,  0xd58d,
                  0x3653,  0x2672,  0x1611,  0x0630,  0x76d7,  0x66f6,  0x5695,  0x46b4,
                  0xb75b,  0xa77a,  0x9719,  0x8738,  0xf7df,  0xe7fe,  0xd79d,  0xc7bc,
                  0x48c4,  0x58e5,  0x6886,  0x78a7,  0x0840,  0x1861,  0x2802,  0x3823,
                  0xc9cc,  0xd9ed,  0xe98e,  0xf9af,  0x8948,  0x9969,  0xa90a,  0xb92b,
                  0x5af5,  0x4ad4,  0x7ab7,  0x6a96,  0x1a71,  0x0a50,  0x3a33,  0x2a12,
                  0xdbfd,  0xcbdc,  0xfbbf,  0xeb9e,  0x9b79,  0x8b58,  0xbb3b,  0xab1a,
                  0x6ca6,  0x7c87,  0x4ce4,  0x5cc5,  0x2c22,  0x3c03,  0x0c60,  0x1c41,
                  0xedae,  0xfd8f,  0xcdec,  0xddcd,  0xad2a,  0xbd0b,  0x8d68,  0x9d49,
                  0x7e97,  0x6eb6,  0x5ed5,  0x4ef4,  0x3e13,  0x2e32,  0x1e51,  0x0e70,
                  0xff9f,  0xefbe,  0xdfdd,  0xcffc,  0xbf1b,  0xaf3a,  0x9f59,  0x8f78,
C51 COMPILER V9.01   SH_IEC60730B_8051F_EE                                                 10/11/2023 14:22:17 PAGE 2   

                  0x9188,  0x81a9,  0xb1ca,  0xa1eb,  0xd10c,  0xc12d,  0xf14e,  0xe16f,
                  0x1080,  0x00a1,  0x30c2,  0x20e3,  0x5004,  0x4025,  0x7046,  0x6067,
                  0x83b9,  0x9398,  0xa3fb,  0xb3da,  0xc33d,  0xd31c,  0xe37f,  0xf35e,
                  0x02b1,  0x1290,  0x22f3,  0x32d2,  0x4235,  0x5214,  0x6277,  0x7256,
                  0xb5ea,  0xa5cb,  0x95a8,  0x8589,  0xf56e,  0xe54f,  0xd52c,  0xc50d,
                  0x34e2,  0x24c3,  0x14a0,  0x0481,  0x7466,  0x6447,  0x5424,  0x4405,
                  0xa7db,  0xb7fa,  0x8799,  0x97b8,  0xe75f,  0xf77e,  0xc71d,  0xd73c,
                  0x26d3,  0x36f2,  0x0691,  0x16b0,  0x6657,  0x7676,  0x4615,  0x5634,
                  0xd94c,  0xc96d,  0xf90e,  0xe92f,  0x99c8,  0x89e9,  0xb98a,  0xa9ab,
                  0x5844,  0x4865,  0x7806,  0x6827,  0x18c0,  0x08e1,  0x3882,  0x28a3,
                  0xcb7d,  0xdb5c,  0xeb3f,  0xfb1e,  0x8bf9,  0x9bd8,  0xabbb,  0xbb9a,
                  0x4a75,  0x5a54,  0x6a37,  0x7a16,  0x0af1,  0x1ad0,  0x2ab3,  0x3a92,
                  0xfd2e,  0xed0f,  0xdd6c,  0xcd4d,  0xbdaa,  0xad8b,  0x9de8,  0x8dc9,
                  0x7c26,  0x6c07,  0x5c64,  0x4c45,  0x3ca2,  0x2c83,  0x1ce0,  0x0cc1,
                  0xef1f,  0xff3e,  0xcf5d,  0xdf7c,  0xaf9b,  0xbfba,  0x8fd9,  0x9ff8,
                  0x6e17,  0x7e36,  0x4e55,  0x5e74,  0x2e93,  0x3eb2,  0x0ed1,  0x1ef0
              };
              
              /*******************************************************************************
               *
               * @brief    This function generate the 16-bit CRC value using SW.
               *
               * @param    dataIn        - tested data.
               * @param    crcVal        - start condition seed (for the first iteration it is
               *                           typically user defined value, for the next iterations
               *                           it is the result from the previous function call).
               *
               * @return   16-bit crc value of the memory range (CRC-16-CCITT - normal 0x1021).
               *
               ******************************************************************************/
              SHT_U16 sh_8051f_crc_ee_sw16(SHT_U8 dataIn, SHT_U16 crcVal)
              {
                  SHT_U8 crcVH;
                  SHT_U8 i;
                  for(i = 0; i < 8; i++)
                  {
                      crcVH = crcVal>>8;        
                      crcVal <<= 1;
                      if((dataIn ^ crcVH) >> 7)
                          crcVal ^= 0x1021;
                       dataIn <<= 1;
                  }    
                      return crcVal;    
              }
              
              /*******************************************************************************
               *
               * @brief    This function caculate CRC in runtime and check the result after done.
               *
               * @param    void
               *
               * @return   SH_CHK_PASS
               *           SH_CHK_FAIL_EE
               *
               ******************************************************************************/
              SHT_RESULT sh_8051f_ee1_runtime(void)
              {
                   SHT_RESULT checkResult = SH_CHK_PASS;
                   if(__iec60730b_ee1_addr == SH_CHK_EE1_START_ADDR)
                       __iec60730b_ee1_crc = 0xFFFF;
                   
                   sh_8051f_ee_readchecksum((SH_CHK_EE1_END_ADDR-2), (SHT_RESULT xdata *)&__iec60730b_ee1_checksum, 2);
C51 COMPILER V9.01   SH_IEC60730B_8051F_EE                                                 10/11/2023 14:22:17 PAGE 3   

                   
                   FLASHCON |= 0x01;  //MOVC instruction or SSP function access EEPROM area
                   __iec60730b_ee1_crc = sh_8051f_crc_ee_sw16(*(SHT_U8 code *)__iec60730b_ee1_addr, __iec60730b_ee1_crc)
             -;
                   FLASHCON &= ~0x01; //MOVC instruction or SSP function access Main Block area
                   
                   __iec60730b_ee1_addr++;
                   if(__iec60730b_ee1_addr >= (SH_CHK_EE1_END_ADDR-2))
                   {
                       if(__iec60730b_ee1_crc != __iec60730b_ee1_checksum)
                           checkResult = SH_CHK_FAIL_EE;
                       __iec60730b_ee1_addr = SH_CHK_EE1_START_ADDR;
                   }
                   return checkResult;
              }
               
              /*******************************************************************************
               *
               * @brief    This function caculate CRC in runtime and check the result after done.
               *
               * @param    void
               *
               * @return   SH_CHK_PASS
               *           SH_CHK_FAIL_EE
               *
               ******************************************************************************/
              SHT_RESULT sh_8051f_ee2_runtime(void)
              {
                   SHT_RESULT checkResult = SH_CHK_PASS;
                   if(__iec60730b_ee2_addr == SH_CHK_EE2_START_ADDR)
                       __iec60730b_ee2_crc = 0xFFFF;
                   
                   sh_8051f_ee_readchecksum((SH_CHK_EE2_END_ADDR-2), (SHT_RESULT xdata *)&__iec60730b_ee2_checksum, 2);
                   
                   FLASHCON |= 0x01;  //MOVC instruction or SSP function access EEPROM area
                   __iec60730b_ee2_crc = sh_8051f_crc_ee_sw16(*(SHT_U8 code *)__iec60730b_ee2_addr, __iec60730b_ee2_crc)
             -;
                   FLASHCON &= ~0x01; //MOVC instruction or SSP function access Main Block area
                   
                   __iec60730b_ee2_addr++;
                   if(__iec60730b_ee2_addr >= (SH_CHK_EE2_END_ADDR-2))
                   {
                       if(__iec60730b_ee2_crc != __iec60730b_ee2_checksum)
                           checkResult = SH_CHK_FAIL_EE;
                       __iec60730b_ee2_addr = SH_CHK_EE2_START_ADDR;
                   }
                   return checkResult;
              }
               
               /*************************************************************************************************
               *
               * @brief    This function reads the CRC of the EEPROM at run time.
               *
               * @param    SourceAddr         -Source address
               * @param    *TargetAddr        -Target address
               * @param    Length             -Read length
               *
               *************************************************************************************************/
              void sh_8051f_ee_readchecksum(SHT_EEADDR SourceAddr, SHT_RESULT xdata *TargetAddr, SHT_EEADDR Length)
              {
                      SHT_EEADDR i;
                  SHT_RESULT xdata *data TargetAddr1 = TargetAddr;
C51 COMPILER V9.01   SH_IEC60730B_8051F_EE                                                 10/11/2023 14:22:17 PAGE 4   

              
                  FLASHCON |= 0x01;   //MOVC instruction or SSP function access EEPROM area
                  for(i=0; i<Length; i++)
                      {
                              *TargetAddr1 = CBYTE[SourceAddr+i];
                              TargetAddr1++;
                      }
                  FLASHCON &= ~0x01;  //MOVC instruction or SSP function access Main Block area
              }
              
              /*******************************************************************************
               *
               * @brief    This function caculate CRC in runtime and check the result after done.
               *
               * @param    void
               *
               * @return   SH_CHK_PASS
               *           SH_CHK_FAIL_EE
               *
               ******************************************************************************/
              SHT_RESULT sh_8051f_ee_xram_runtime(void)
              {
                   SHT_RESULT checkResult = SH_CHK_PASS;
                   
                   __iec60730b_ee_xram_crc = sh_8051f_crc_ee_xram((SHT_U8 xdata *)SH_CHK_EETOXRAM_START_ADDR, (SH_CHK_EE
             -TOXRAM_SIZE - 2));
                   
                   if(__iec60730b_ee_xram_crc != __iec60730b_ee_xram_checksum)
                           checkResult = SH_CHK_FAIL_EE;
                   
                   return checkResult;
              }
              
              
              /*******************************************************************************
               *
               * @brief    This function generate the EEPROM to XRAM CRC.
               *
               * @param    *p                 -Start address
               * @param    counter            -Length of data
               *
               * @return   16-bit crc value of the memory range (CRC-16-CCITT - normal 0x1021).
               *
               ******************************************************************************/
              SHT_U16 sh_8051f_crc_ee_xram(SHT_U8 xdata *p, SHT_U16 counter)                   //look-up table calculte 
             -CRC 
              {
                  SHT_U16 crc16 = 0xFFFF;
                  
                      for( ; counter > 0; counter--)
                      {
                              crc16 = CRC16Table[(SHT_U8)(*p ^ (crc16 >> 8))] ^ (crc16 << 8); 
                          p++;
                  }
                  return(crc16);
              }
              #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V9.01   SH_IEC60730B_8051F_EE                                                 10/11/2023 14:22:17 PAGE 5   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)
