www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DDRs und Interrupts


Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um welche Hardware geht's denn überhaupt???

Autor: abcd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die DDR gibt es doch seit 89 nicht mehr oder?

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRs sind bestimmte RAM-Bausteine

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

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.