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)
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?
Indem du die von dir benutzten Register sicherst. Push und Pop. MW
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)
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!
Was hast du denn bis jetzt? Muss es interruptgesteuert sein, oder reicht pollen? Ist es ein PowerQUICC mit UART Controller? Das Erkennen von Kommandos ist ja eigentlich trivial.
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.