Other Parts Discussed in Thread: MSPM0G3507, MSPM33C321A
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: LP-MSPM33C321A
Thread 中讨论的其他器件: MSPM0G3507、 MSPM33C321A
我分别在 80 和 160MHz 条件下比较了这两款器件的性能。
然而、MSPM0G3507 比 MSPM33 快几微秒
以下是我用于两个处理器的代码:
#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;
}
我还附上了项目文件。
