Update CCS12 peripheral firmware and documentation
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
/**
|
||||
* @file crc16.c
|
||||
* @brief Расчёт контрольных сумм CRC-CCITT и CRC-16 для протокольных кадров.
|
||||
*
|
||||
* Поддерживает табличные и побитовые варианты алгоритмов. Текущая конфигурация
|
||||
* FAST_CRC/ONLY_CRC16 оставляет в прошивке только требуемый быстрый CRC-16.
|
||||
* Размер задаётся в элементах буфера целевой платформы, а не в байтах host-PC;
|
||||
* начальное значение CRC определяет вызывающий протокол.
|
||||
*/
|
||||
#include "crc16.h"
|
||||
#define MAKE_TABS 0 /* Builds tables below */
|
||||
#define FAST_CRC 1 /* If fast CRC should be used */
|
||||
@@ -87,6 +96,13 @@ WORD crc_16_tab[] = {
|
||||
|
||||
/* CRC-CCITT is based on the polynomial x^16 + x^12 + x^5 + 1. Bits */
|
||||
/* are sent MSB to LSB. */
|
||||
/**
|
||||
* @brief Продолжает расчёт CRC-CCITT по массиву слов.
|
||||
* @param crc Начальное значение либо CRC предыдущего блока.
|
||||
* @param buf Буфер данных; значим младший байт каждого слова.
|
||||
* @param size Число обрабатываемых элементов.
|
||||
* @return Итоговое 16-битное значение CRC-CCITT.
|
||||
*/
|
||||
unsigned int get_crc_ccitt(unsigned int crc,unsigned int *buf,unsigned long size )
|
||||
{
|
||||
#if !(FAST_CRC & !MAKE_TABS)
|
||||
@@ -112,6 +128,13 @@ unsigned int get_crc_ccitt(unsigned int crc,unsigned int *buf,unsigned long size
|
||||
|
||||
/* CRC-16 is based on the polynomial x^16 + x^15 + x^2 + 1. Bits are */
|
||||
/* sent LSB to MSB. */
|
||||
/**
|
||||
* @brief Вычисляет быстрый табличный CRC-16 с отражённым полиномом 0xA001.
|
||||
* @param crc Начальное значение или результат предыдущей порции.
|
||||
* @param buf Входные слова протокольного кадра.
|
||||
* @param size Количество слов.
|
||||
* @return CRC после обработки всего блока.
|
||||
*/
|
||||
unsigned int get_crc_16(unsigned int crc,unsigned int *buf,unsigned long size )
|
||||
{
|
||||
#if !(FAST_CRC & !MAKE_TABS)
|
||||
@@ -139,6 +162,11 @@ unsigned int get_crc_16(unsigned int crc,unsigned int *buf,unsigned long size )
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Побитовый эталон расчёта CRC-16 без таблицы.
|
||||
* @details Используется как компактная реализация и для сверки табличного
|
||||
* варианта; восемь итераций обрабатывают каждый входной байт.
|
||||
*/
|
||||
unsigned int get_crc_16b(unsigned int crc,unsigned int *buf,unsigned long size )
|
||||
{
|
||||
|
||||
@@ -175,6 +203,12 @@ unsigned long i;
|
||||
return (crc & 0xffff);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Проектная обёртка CRC-16 с установленным протоколом начальным значением.
|
||||
* @param buf Кадр без добавляемого поля CRC.
|
||||
* @param size Число элементов кадра.
|
||||
* @return Контрольная сумма, готовая для сравнения или передачи.
|
||||
*/
|
||||
int get_crc16(unsigned int *buf, int size )
|
||||
{
|
||||
int crc16,i,j;
|
||||
|
||||
Reference in New Issue
Block a user