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
Gast
#579729
Hallo Max,
geht das nicht mit "inline-Assembler"
("Einbettung" der Assembler Befehle in C)?
Otto
Gast
#579738
die C-Umsetzung sieht doch nicht so verkehrt aus, vielleicht mal die Assemblerausgabe vom C Compiler aktivieren und gucken wie der die Zuweisungen umsetzt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.