Forum: Mikrocontroller und Digitale Elektronik DDRs und Interrupts


von Patrick B. (p51d)


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

von Hubert G. (hubertg)


Lesenswert?

Wenn du am Beginn einer ISR das DDRx umschaltest und willst es am Ende 
der ISR wieder im Anfangszustand haben, dann musst du es machen. Von 
alleine passiert sicher nichts.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Um welche Hardware geht's denn überhaupt???

von abcd (Gast)


Lesenswert?

die DDR gibt es doch seit 89 nicht mehr oder?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

DDRs sind bestimmte RAM-Bausteine

http://de.wikipedia.org/wiki/Double_Data_Rate

von Thomas E. (thomase)


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.

von Patrick B. (p51d)


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

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.