Gast
#2390174
Hallo, bräuchte Hilfe: Mit meinem LPC1758 muss ich große Datenmengen empfangen (ca. 300kByte/s mit 6,5MBaud). Wenn ich es über Interrupt mache ist mein Controller eigentlich die meiste Zeit ausgelastet immer in die Interrupts zu springen, deswegen woltle ich es über DMA machen. Problem: Ich weiß nicht wielange die Pakete sind, die ich empfangen soll und auf die ich dann reagieren muss, weiß nur dass sie zwischen 20 und 255 Byte sind) Deswegen hab ich die DMA Übertragungsgröße auf 255 gesetzt und schreibe in einen 255 Byte Puffer. In meiner Hauptschleife, schau ich dann immer nach, ob das 1. Byte schon geschrieben ist (darin steht auch die Gesamtlänge des Pakets drin) Somit weiß ich wo das letzte Byte stehen muss und ich schaue nach, ob darin schon die ENDE-Kennzeichnung steht. Somit weiß ich, mein Paket habe ich empfangen. Dann schalte ich den DMA Kanal aus und wieder ein, damit er beim nächsten Byte wieder an die Startadresse des Puffers schreibt. Soweit funktioniert das auch, wenn zwischen den Paketen mind. 4ms liegen, kommen sie schneller passiert es immer wieder, dass der DMA die neuen Bytes oben im Puffer anfügt, anstatt von der Startadresse neu anzufangen? Irgendjemand eine Idee oder bessere Lösung wie man das mit den variablen Paketlängen lösen könnte? Gibt es beim DMA ein Register oder so wo ich auslesen kann, wieviele Bytes mir der DMA schon vom RX geschickt hat?