Forum: Mikrocontroller und Digitale Elektronik Hier ein Beispiel einer CRC-16 Prüfung


von bundy (Gast)


Lesenswert?

Hier eine CRC-16 Prüfung aus einem 32 Bit Datenwort 0x3d23f034
im Old School Assembler

Gegencheck mit CRC-Calculator von
https://www.ghsi.de/component/option,com_wrapper/Itemid,151/
war erfolgreich ;)
1
GPOLYNOM = w6
2
CRC = w3
3
DATA = w4
4
COUNT = w5
5
RESULT = w0
6
7
_test_crc:
8
  MOV #0x8005,GPOLYNOM
9
  MOV #0x3d23,CRC      ;Testdaten 3d23f034
10
  MOV #0xf034,DATA
11
  MOV #0x10,COUNT      ;Anzahl Bit-Shifts (DATA.Length)
12
  CALL _calculate_crc    ;Berechne CRC..
13
  MOV #0x0000,DATA    ;GPOLYNOM.Length - 1 an Testdaten als 0 anhängen
14
  MOV #0x0f,COUNT      ;GPOLYNOM.Length - 1
15
  CALL _calculate_crc    ;Berechne CRC..
16
  XOR CRC,GPOLYNOM,CRC  ;Restwert / GPOLYNOM => CRC
17
  MOV #0x1,RESULT      ;Rückgabewert der Prüfung auf true setzen
18
  MOV #0x6eef,w6      ;Zu erwartende CRC-Summe aus den Testdaten
19
   CPSEQ w6,CRC      ;CRC korrekt?
20
  MOV #0x0,RESULT      ;NEIN ! Rückgabewert auf false setzen
21
RETURN  
22
23
_calculate_crc:
24
  BTSC CRC,#0xf      ;High-Bit von CRC gesetzt?  
25
   XOR CRC,GPOLYNOM,CRC          ;Ja! CRC / GPOLYNOM = CRC
26
  RLC DATA,DATA      ;DATA << 1
27
  RLC CRC,CRC       ;CRC << 1 (DATA Bit)
28
  DEC COUNT,COUNT      ;
29
  CP0 COUNT        ;
30
  BRA NZ,_calculate_crc  ;Datenpaket durch?
31
RETURN
32
  
33
.end

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.