DDRs und Interrupts

OP #2080658
Lesenswert?

Hallo miteinander

Ich habe eine kleine Frage betreffend DDRs und ISR:
Kann ich in der ISR die DDRs so setzen, wie ich sie benötige und werden 
die dann am Ende der ISR automatisch wieder auf den Wert gesetzt, den 
sie vor der ISR hatten?

Mein Problem ist, dass ich ein par Werte für DA-Wandler über USB an 
einen MCU sende. Dieser soll die dann in externen RAMs 
zwischenspeichern.
Jetzt ist das Problem, dass ich auf dem Ausgabesignal der DA-Wanlder 
zwar mein Signal sehe, das ich sende, aber auch noch einen grossen Teil 
Störungen.
Wenn ich aber die Ansteuerung der DA-Wandler auserhalb der ISR habe, 
dann habe ich nur das Signal.

Wenn ich jetzt gerade dabei bin, vom FTDI Daten in ein RAM zu 
verschiebe, und die ISR irgendwann in der RAM-write Funktion aufgerufen 
wird, muss ich die DDR ja wieder auf Input schalten, damit ich überhaupt 
einen Wert vom RAM lesen kann. Aber am Ende der ISR muss das DDR wieder 
auf Output, damit das schreiben beendet werden kann.

Ich habe dazu leider nicht viel gefunden. Weder im GCC Tutorial, noch 
bei Google oder im Doc von meinem Compiler (HI TECH)

Ich könnte mir denken, dass dies gleich wie mit den Variablen abläuft, 
oder nicht?

Besten Dank für die Auskunft
Patrick
#2080930
Lesenswert?

abcd schrieb:
> die DDR gibt es doch seit 89 nicht mehr oder?

03.10.1990, du Kasper!

Patrick B. schrieb:
> Wenn ich jetzt gerade dabei bin, vom FTDI Daten in ein RAM zu
>
> verschiebe, und die ISR irgendwann in der RAM-write Funktion aufgerufen
>
> wird, muss ich die DDR ja wieder auf Input schalten, damit ich überhaupt
>
> einen Wert vom RAM lesen kann. Aber am Ende der ISR muss das DDR wieder
>
> auf Output, damit das schreiben beendet werden kann.

Sowas ist natürlich gewagt. Wenn's ungünstig läuft, unterbrichst du 
deinen Schreibzyklus mittendrin. Das kann nicht gutgehen.

DRR sichern und wiederherstellen? klar.

ISR(...)
{
   char nRegs = DDRx;
.
.
.
  DDRx = nRegs;
}

Bleibt aber immer noch die Unterbrechung des Schreibzyklus. Da sollte 
man sich vielleicht was sichereres überlegen.

mfg.
OP #2081092
Lesenswert?

Johann L. schrieb:
> Um welche Hardware geht's denn überhaupt???

Primär um einen dsPIC30F6012A mit FT245 und 2 AS7C256

Thomas Eckmann schrieb:
> Bleibt aber immer noch die Unterbrechung des Schreibzyklus. Da sollte
> man sich vielleicht was sichereres überlegen.

Das Problem ist, dass ich die Ausgabe über einen Timer realisieren muss. 
Bei den Schreib- und Lesefunktionen habe ich vorher die Interrupts 
deaktiviert und dann gleich nachher wieder aktiviert. Aber 
interessanterweise sind die Störungen nur im Interrupt-Betrieb 
vorhanden, nicht aber wenn ich es über eine if-Abfrage ausgebe.

Das mit dem Sichern wird dann wohl der Fall sein.
MFG
Patrick

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren