mirror of https://github.com/ARMmbed/mbed-os.git
Add K64F Hardware CRC reference implementation
- Add support for all currently defined polynomials - Add 'CRC' flag to targets.json for K64F profilepull/6708/head
parent
e0d98bfe2c
commit
fd8b974d47
|
@ -0,0 +1,125 @@
|
||||||
|
#include "crc_api.h"
|
||||||
|
|
||||||
|
#include "drivers/fsl_crc.h"
|
||||||
|
#include "platform/mbed_assert.h"
|
||||||
|
|
||||||
|
#ifdef DEVICE_CRC
|
||||||
|
|
||||||
|
static crc_bits_t width;
|
||||||
|
|
||||||
|
bool hal_crc_is_supported(const uint32_t polynomial)
|
||||||
|
{
|
||||||
|
switch (polynomial)
|
||||||
|
{
|
||||||
|
case POLY_8BIT_CCITT:
|
||||||
|
case POLY_7BIT_SD:
|
||||||
|
case POLY_16BIT_CCITT:
|
||||||
|
case POLY_16BIT_IBM:
|
||||||
|
case POLY_32BIT_ANSI:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hal_crc_compute_partial_start(const uint32_t polynomial)
|
||||||
|
{
|
||||||
|
crc_config_t config;
|
||||||
|
|
||||||
|
switch (polynomial)
|
||||||
|
{
|
||||||
|
case POLY_32BIT_ANSI:
|
||||||
|
{
|
||||||
|
width = kCrcBits32;
|
||||||
|
|
||||||
|
config.polynomial = polynomial;
|
||||||
|
config.seed = 0xFFFFFFFFU;
|
||||||
|
config.reflectIn = true;
|
||||||
|
config.reflectOut = true;
|
||||||
|
config.complementChecksum = true;
|
||||||
|
config.crcBits = width;
|
||||||
|
config.crcResult = kCrcFinalChecksum;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case POLY_16BIT_IBM:
|
||||||
|
{
|
||||||
|
width = kCrcBits16;
|
||||||
|
|
||||||
|
config.polynomial = polynomial;
|
||||||
|
config.seed = 0;
|
||||||
|
config.reflectIn = true;
|
||||||
|
config.reflectOut = true;
|
||||||
|
config.complementChecksum = false;
|
||||||
|
config.crcBits = width;
|
||||||
|
config.crcResult = kCrcFinalChecksum;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case POLY_16BIT_CCITT:
|
||||||
|
{
|
||||||
|
width = kCrcBits16;
|
||||||
|
|
||||||
|
config.polynomial = polynomial;
|
||||||
|
config.seed = 0xFFFFFFFFU;
|
||||||
|
config.reflectIn = false;
|
||||||
|
config.reflectOut = false;
|
||||||
|
config.complementChecksum = false;
|
||||||
|
config.crcBits = width;
|
||||||
|
config.crcResult = kCrcFinalChecksum;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case POLY_8BIT_CCITT:
|
||||||
|
{
|
||||||
|
width = kCrcBits16;
|
||||||
|
|
||||||
|
config.polynomial = polynomial;
|
||||||
|
config.seed = 0U;
|
||||||
|
config.reflectIn = false;
|
||||||
|
config.reflectOut = false;
|
||||||
|
config.complementChecksum = false;
|
||||||
|
config.crcBits = width;
|
||||||
|
config.crcResult = kCrcFinalChecksum;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case POLY_7BIT_SD:
|
||||||
|
{
|
||||||
|
width = kCrcBits16;
|
||||||
|
|
||||||
|
config.polynomial = polynomial;
|
||||||
|
config.seed = 0U;
|
||||||
|
config.reflectIn = false;
|
||||||
|
config.reflectOut = false;
|
||||||
|
config.complementChecksum = false;
|
||||||
|
config.crcBits = width;
|
||||||
|
config.crcResult = kCrcFinalChecksum;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CRC_Init(CRC0, &config);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hal_crc_compute_partial(const uint8_t *data, const size_t size)
|
||||||
|
{
|
||||||
|
CRC_WriteData(CRC0, data, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t hal_crc_get_result(void)
|
||||||
|
{
|
||||||
|
switch (width)
|
||||||
|
{
|
||||||
|
case kCrcBits16:
|
||||||
|
return CRC_Get16bitResult(CRC0);
|
||||||
|
case kCrcBits32:
|
||||||
|
return CRC_Get32bitResult(CRC0);
|
||||||
|
default:
|
||||||
|
MBED_ASSERT("Unhandled switch case");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // DEVICE_CRC
|
|
@ -631,7 +631,7 @@
|
||||||
"macros": ["CPU_MK64FN1M0VMD12", "FSL_RTOS_MBED"],
|
"macros": ["CPU_MK64FN1M0VMD12", "FSL_RTOS_MBED"],
|
||||||
"inherits": ["Target"],
|
"inherits": ["Target"],
|
||||||
"detect_code": ["0240"],
|
"detect_code": ["0240"],
|
||||||
"device_has": ["ANALOGIN", "ANALOGOUT", "EMAC", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE", "STDIO_MESSAGES", "STORAGE", "TRNG", "FLASH"],
|
"device_has": ["ANALOGIN", "ANALOGOUT", "CRC", "EMAC", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE", "STDIO_MESSAGES", "STORAGE", "TRNG", "FLASH"],
|
||||||
"features": ["LWIP", "STORAGE"],
|
"features": ["LWIP", "STORAGE"],
|
||||||
"release_versions": ["2", "5"],
|
"release_versions": ["2", "5"],
|
||||||
"device_name": "MK64FN1M0xxx12",
|
"device_name": "MK64FN1M0xxx12",
|
||||||
|
|
Loading…
Reference in New Issue