www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Code nach C übersetzen


Autor: Max Götze (djmax66)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Max,

geht das nicht mit "inline-Assembler"
("Einbettung" der Assembler Befehle in C)?

Otto

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.