Forum: Mikrocontroller und Digitale Elektronik Interruptroutine beim XMEGA


von Johann (Gast)


Lesenswert?

Hallo Atmel Fans,

ich arbeite gerade mit einem XMEGA 256A3U. Als IDE kommt der Codevision 
Compiler zum Einsatz.

Mein Programm sieht wie folgt aus:

1. Im Mainprogramm werden mehrere Schrittmotoren über 2 seperate I2C 
Schnittstellen angesteuert. Ich habe z.B. Funktionen geschrieben wie 
SetNewPosition oder GetStatus. Diese Funktionen müssen z.B. 8 Bytes an 
ein externes Schrittmotor IC übertragen. Das IC2 Interface arbeitet mit 
100kHz. Demnach benötigt man schon recht viel Zeit bis alle Daten an das 
externe IC übertragen sind. Das I2C Interface ist nicht Interrupt 
gesteuert. Sondern ich schreibe das zu übertragene Byte in das I2C Data 
Register und warte polle so lange bis die Übertragung abgeschlossen ist.

Außerdem habe ich eine RS232 Interruptroutine geschrieben. Diese 
Interruptroutine empfängt Daten mit 115200 Bauts.

Nun zu meinem Problem:

Wenn ich gerade Daten an den externen Schrittmotortreiber per I2C 
übertragen trift eine RS232 Interrupt ein. Demnach wird die RS232 
Interruptroutine ausgeführt und unterbricht die I2C Übertragung. Und 
genau hier habe ich bedenken.

Erzeugt die RS232 Interruptroutine ein Backup von ALLEN ALU Registern 
(R1 bis 32)? Die Interruptroutine hat der Codevision Wizard erstellt. 
Demnach weis ich nicht was alles auf dem Stack gesichert wird. Hierzu 
müste ich den Assemble Code genauer analysieren. Jedoch kann die dies 
nicht interpretieren :-). Auf was muss ich denn genau achten. Ich könnte 
auch zu bestimmten Zeitscheiben den globalen Interrupt deaktivieren. 
Jedoch weis ich halt nicht wann dies sinnvoll ist.

von Timmo H. (masterfx)


Lesenswert?

Der Compiler sichert alle Register die in der ISR verwendet werden 
vorher ab und stellt sie vor dem verlassen der ISR wieder her. Außer du 
unterdrückst dies durch irgendeinen Compiler-Direktive in irgendeiner 
form. Bei AVR GCC gibt es dafür ISR_NAKED

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.