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.

LP-MSPM33C321A: MSPM33C321A vs MSPM0G3507 CRC performance

Part Number: LP-MSPM33C321A
Other Parts Discussed in Thread: MSPM0G3507, MSPM33C321A

I was comparing the performance between these two devices at 80 and 160 MHz respectively.

However, the MSPM0G3507 was a few microseconds faster than the MSPM33

Here is the code I used for both processors:

#include "ti_msp_dl_config.h"
#include <string.h>

int CalculateCRC16(uint8_t data[], int startpos, int stoppos);

uint8_t std_data[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
// result should be 0xe5cc, 58828

uint8_t test9[] = {
    0xFE, 0x6B, 0x28, 0x40, 0x80, 0x2B, 0x03, 0xF7, 0xD6, 0xFA, 0xFE, 0x02,
    0xFC, 0xFE, 0xBD, 0xF3, 0xFE, 0xE6, 0xFD, 0xF7, 0x24, 0xFF, 0xFF, 0xEE,
    0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0x10, 0x01, 0x49, 0xF0, 0x80,
    0x2B, 0x03, 0xF7, 0xD6, 0xFA, 0xFE, 0x02, 0xFC, 0xFE, 0xCD, 0xF3, 0xFE,
    0xE6, 0xFD, 0xF7, 0x24, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF,
    0xFE, 0xFF, 0x3B, 0xC9, 0x63, 0x14, 0x80, 0x2B, 0x03, 0xF7, 0xD6, 0xFA,
    0xFE, 0x02, 0xFC, 0xFE, 0xBC, 0xF3, 0xFE, 0xE6, 0xFD, 0xF7, 0x24, 0xFF,
    0xFF, 0xEE, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xFE, 0xFF, 0xD9, 0xCC, 0xA2,
    0xD0, 0x80, 0x2B, 0x03, 0xF7, 0xD6, 0xFA, 0xFE, 0x02, 0xFC, 0xFE, 0xBC,
    0xF3, 0xFE, 0xE6, 0xFD, 0xF7, 0x24, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xEE,
    0xFF, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0x71, 0x01, 0x80, 0x2B, 0x03, 0xF7,
    0xD6, 0xFA, 0xFE, 0x02, 0xFC, 0xFE, 0xCD, 0xF3, 0xFE, 0xE6, 0xFD, 0xF7,
    0x24, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3F,
    0x72, 0x68, 0x80, 0x80, 0x2B, 0x03, 0xF7, 0xD6, 0xFA, 0xFE, 0x02, 0xFC,
    0xFE, 0xBC, 0xF3, 0xFE, 0xE6, 0xFD, 0xF7, 0x24, 0xFF, 0xFF, 0xEE, 0xFF,
    0xFF, 0xEF, 0xFF, 0xFF, 0xEE, 0xFF, 0x0A, 0xBA, 0x21, 0x8B, 0x80, 0x2B,
    0x03, 0xF7, 0xD6, 0xFA, 0xFE, 0x02, 0xFC, 0xFE, 0xBC, 0xF3, 0xFE, 0xE6,
    0xFD, 0xF7, 0x24, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xEE,
    0xFF, 0x04, 0x0D, 0x99, 0x02, 0x80, 0x2B, 0x03, 0xF7, 0xD6, 0xFA, 0xFE,
    0x02, 0xFC, 0xFE, 0xCD, 0xF3, 0xFE, 0xE6, 0xFD, 0xF7, 0x24, 0xFF, 0xFF,
    0xEE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xEE, 0xFF, 0xD9, 0x77, 0xC7, 0x06,
    0x80, 0x2B, 0x03, 0xF7, 0xD6, 0xFA, 0xFE, 0x02, 0xFC, 0xFE, 0xBC, 0xF3,
    0xFE, 0xE6, 0xFD, 0xF7, 0x24, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xEF, 0xFF,
    0xFF, 0xEE, 0xFF, 0x02, 0xC1, 0xE3, 0x1A, 0x80, 0x2B, 0x03, 0xF7, 0xD6,
    0xFA, 0xFE, 0x02, 0xFC, 0xFE, 0xCC, 0xF3, 0xFE, 0xE6, 0xFD, 0xF7, 0x24,
    0xFF, 0x01, 0x01, 0x01, 0x80, 0x0A, 0xBA, 0xB6, 0x62, 0xBD};
// 0x62BD = 25277



int main(void) {
  volatile int std_checksum __attribute__((unused));


  SYSCFG_DL_init();
  
  std_checksum = CalculateCRC16(std_data, 0, 8);
  // std_checksum = CalculateCRC16(test9, 0, 307);

  
  while (1) {
    DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_FAIL_LED_PIN);

    SYSCFG_DL_CRCP_init();

    /*
    for (int i = 0; i < 308; i++) {
      DL_CRCP_feedData8(CRCP0, test9[i]);
    }
    */
    

    memcpy(CRCP0_S->CRCIN_IDX, test9, 308);

    std_checksum = DL_CRCP_getResult16(CRCP0);
    

    //std_checksum = CalculateCRC16(test9, 0, 307);
    
    //delay_cycles(1000);

    DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_FAIL_LED_PIN);

    delay_cycles(100000);
  }
}

int CalculateCRC16(uint8_t data[], int startpos, int stoppos) {
  int polynomial = 0x1021; // 0001 0000 0010 0001  (0, 5, 12)
  int crc = 0x1D0F;        // 0x1D0F;

  for (int ijk = startpos; ijk <= stoppos; ijk++) {
    int b = (int)(data[ijk] & 0xFF);
    for (int jkl = 0; jkl < 8; jkl++) {
      bool bit = ((b >> (7 - jkl) & 1) == 1);
      bool c15 = ((crc >> 15 & 1) == 1);
      crc <<= 1;
      if (c15 ^ bit)
        crc ^= polynomial;
    }
  }

  crc = crc & 0x0000FFFF; // Bottom 16 bits only.

  return crc;
}

I have also attached the project files . 

CRC Test File.zip