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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.