UART Interrupt bei PowerPC (e300, 604 kompatibel)

OP #673536
Hallo.
Ich habe mal wieder ein Problem mit meinem embedded PowerPC. Und zwar 
brauche ich den UART Interrupt. Soweit auch erstmal kein Problem. Der 
Interrupt im UART Controller (PC16552D kompatibel) ist aktiviert. Wenn 
ich ein Zeichen über das Terminal sende wird der Interrupt auch korrekt 
vom PPC erkannt ( "System Global Interrupt Vector Register (SIVCR)" 
zeigt UART Interrupt). Aber er springt einfach nicht an 0x500 (external 
interrupt). Es muss also noch irgendwo aktiviert werden, dass er 
überhaupt auf den Interrupt reagiert. Aber ich weiß nicht mehr wo ich 
das einstellen soll. Im "System Global Interrupt Configuration Register" 
kann ich ja nur die Prioritäten festlegen, das brauch ich aber erstmal 
nicht. Das "Interrupt Pending" und "Interrupt Mask" Register ist 
ebenfalls schon auf UART gestellt. Ist da irgendwas, was ich noch 
übersehen habe?
Hier der Link zum Datenblatt: 
http://www.freescale.com/files/32bit/doc/ref_manual/MPC8360ERM.pdf
(Achtung 16,6 MB, 2328 Seiten)
OP
Ahh, nun hab ich es endlich. Da gibts noch das MSR auf das man leider 
nur über Assembler zugriff hat. Also hab ich es erstmal in die 
initialisierung reingepackt.
1
  mfmsr  %r5
2
  ori    %r5,%r5,0x8000
3
  mtmsr  %r5
Nun habe ich natürlich das Problem, was ich bereits im GCC Forum gefragt 
habe. Wenn ich es jetzt im C Code über den inline Assembler machen will, 
woher weiß ich dann welche Register ich benutzen darf damit ich kein 
Datenverlust habe?
OP
Sehr witzig. Ein PowerPC hat erstens kein Push und Pop und zweitens geht 
es mir auch um eine Interrupt Routine, die leider auch nicht direkt vom 
Compiler gemacht wird, da bewege ich mich wieder vollkommen in 
Assembler. Der PowerPC hat ja noch nichtmal einen Stack, StackPointer 
und ProgramCounter. Alles was man machen will muss manuell getan werden. 
Das einzige was man hat ist ein Linkregister wo EINE Rücksprungadresse 
drin gespeichert wird. Wenn ich mich vorher in C bewege weiß ich nicht 
welche Register verwendet werden. Soll ich alle erdenklichen Register 
sichern oder was? Es gibt doch mit Sicherheit irgendwelche Festlegungen 
vom Compiler welche Register gesicherert werden müssen. (EABI)
Gast
Hi

Unter Umstaenden kannst du mir helfen, ich wuerde naemlich gerne mit dem 
PowerPC ueber die UART kommunizieren. Und zwar wuerde ich gerne in einer 
C-Routine abfragen, ob ein bestimmtes Kommando ueber die UART gesendet 
wurde. Falls dies der Fall ist, moechte ich die Daten welche auch 
seriell uebertragen werden abspeichern und dann eine Berechnung starten. 
Kannst du mir hier vielleicht weiterhelfen wie das geht bzw. eine gute 
Ressource empfehlen wo ich mehr zu diesem Thema erfahren kann?

Besten Dank!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.