www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik UART Interrupt bei PowerPC (e300, 604 kompatibel)

Autor: Timmo H. (masterfx)
Datum: 11.10.2007 09:50

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_manua...
(Achtung 16,6 MB, 2328 Seiten)
Autor: Timmo H. (masterfx)
Datum: 11.10.2007 10:37

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.
  mfmsr  %r5
  ori    %r5,%r5,0x8000
  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?
Autor: Michael Wilhelm (Gast)
Datum: 11.10.2007 10:42

Indem du die von dir benutzten Register sicherst. Push und Pop.

MW
Autor: Timmo H. (masterfx)
Datum: 11.10.2007 11:04

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)

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net