Hallo Zusammen, ich muss für ein HC12kompakt die CAN-Schnittstelle programmieren. Ich habe nicht viel Ahnung davon. Ich habe im Internet für den HC12compakt aber ein Code-Beispiel in Assembler gefunden. Ich programmiere jedoch in C. Der Assembler Code ist vollständig angehängt, die wichtigsten Sachen (wie ich denke) schreibe ich aber schonmal hier rein. Also von der Struktur her sieht der Assembler Code so aus: ======================================================================== === ; Chip-Select addresses of the CAN-Controller on the HC12compact-board CAN_ADDR equ $0301 ; select CAN-controller register CAN_DATA equ $0201 ; access to CAN-controller register ; Registers of SJA1000 in BasicCAN-mode CR equ 0 ; Control Register ;hier folgen dann die anderen Register (siehe Anhang) ;nun der Zugriff: ldx #CR ; enter Reset-Mode in order to configure the ldaa #$01 ; SJA1000 CAN parameters jsr writeSJA1000 ; write to CAN-Controller register ;die Funktion writeSJA1000 ; Func: writes a byte to a given SJA1000-CAN-Controller address ; Args: X = register address, A = new contents ; Retn: - ; Dest: - writeSJA1000 stx CAN_ADDR-1 staa CAN_DATA rts ======================================================================== == Meine Übersetzung nach C sieht bislang so aus: ======================================================================== == //in der main.h #define ioCAN_ADDR ( *( volatile TByte * ) ( 0x0300 ) ) #define ioCAN_DATA ( *( volatile TByte * ) ( 0x0200 ) ) //in der main.c ioCAN_ADDR = 0; //Controll Register ioCAN_DATA = 0x01; // Reset Mode aktivieren um Daten zu schreiben ioCAN_DATA = 0x03; // Receive Interrupt setzen, Reset bleibt aktiv ======================================================================== == Es geht mit nicht um die Werte, die ich in die Register schreibe, sondern darum, ob ich mit diesem C-Code auf die Register lesend und schreibend zugreifen kann. Das Testen der Sache gestaltet sich derzeit etwas schweirig, von daher, wäre es super, wenn ihr mir schon im Vorhinein helfen könntet Vielen Dank und Viele Grüße Max
Hallo Max, geht das nicht mit "inline-Assembler" ("Einbettung" der Assembler Befehle in C)? Otto
die C-Umsetzung sieht doch nicht so verkehrt aus, vielleicht mal die Assemblerausgabe vom C Compiler aktivieren und gucken wie der die Zuweisungen umsetzt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.