32 lines
793 B
C
32 lines
793 B
C
#include "aSPISlave.h"
|
||
#include <avr/io.h>
|
||
|
||
ISR(SPI_STC_vect) {
|
||
char received = SPDR;
|
||
data[index] = received;
|
||
index++;
|
||
}
|
||
|
||
void SPI_SlaveInit(void) {
|
||
DDR_SPI = (1 << DD_MISO);
|
||
SPCR = (1 << SPE);
|
||
}
|
||
|
||
char CRC8(char *data, int length) {
|
||
char crc = 0x00;
|
||
char poly = 0x07; // полином для CRC8
|
||
|
||
for (int i = 0; i < length - 2; i++) {
|
||
crc ^= data[i]; // XOR текущего байта с crc
|
||
|
||
for (int j = 0; j < length; j++) {
|
||
if (crc & 0x80) { // если старший бит crc равен 1
|
||
crc = (crc << 1) ^ poly; // сдвигаем crc на 1 бит влево и XOR с полиномом
|
||
} else {
|
||
crc <<= 1; // иначе просто сдвигаем на 1 бит влево
|
||
}
|
||
}
|
||
}
|
||
|
||
return crc;
|
||
} |