Hallo, ich habe hier folgende Anwendung, die ich gerne realisieren möchte. Und zwar möchte ich gerne einen linearen CCD Sensor mit einem STM32F4 Controller auslesen. Die Ansteuerung des CCD Sensors ist ansich kein Problem. Die analogen Daten werden rausgeclockt und per externen dual 8-bit ADC digital gewandelt. Der ADC gibt mit der steigenden Clock Flanke den Wert des ersten Analogwertes aus und mit der fallenden Flanke den Wert des zweiten Wertes (gibt CCD Sensoren, die bei jedem Clock 2 Analogsignale ausgeben). Ich möchte nun das rausclocken per Timer realisieren und bei jeder Periode einen DMA Transfer starten, der die ADC Daten von einem GPIO Port einliest. Da das ganze sehr schnell passieren soll (ca. 20 MHz Clock) muss der DMA Transfer innerhalb von 25ns (halbe Periode, da in der zweiten Periode bereits andere Daten vom ADC anliegen) abgeschlossen sein. In der zweiten Periode sollte eigentlich auch noch ein DMA Transfer stattfinden. D.h. 2 x 8bit x 20MHz = 320MBit/s. Ist das überhaupt möglich mit einem STM32F4? Die eigentliche Frage ist, ob man eine maximale Zugriffszeit für den DMA Transfer angeben kann? Für den STM32F103 gibt es eine App Note mit der Anzahl von Clockzyklen für den DMA Zugriff. Gibt es das für den Cortex M4 auch? Danke schonmal, Andreas
zwischen M3 und M4 dürfte ausser der Taktfrequenz an diesem Punkt kein Unterschied sein. Das Problem ist der externe AD wo du ja einen (langsamen) 8 bit Port als Eingang brauchst. Soweit ich weis, beziehen sich die DMA Quellen oder Ziele immer auf (interne) Peripherieregister weil du ja gar keinen externen Datenbus hast (?)
Genau, der externe AD Converter liefert mir die Daten als 8-bit Wort an einem Port und den müsste ich einlesen (einmal bei steigender und einmal bei fallender Flanke meines Clock Signals). Die Ports sind beim M4 laut Datenblatt aber am AHB Bus, der mit den vollen 168MHz geclockt wird, was denke ich beim M3 noch nicht so ist (hab ich aber nicht nachgesehen). Die App Note über den DMA vom M3 AN2548 (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00160362.pdf?s_searchtype=keyword) sagt, dass die Service Time per DMA Kanal folgendermaßen aussieht:
wobei t_A ... 2 AHB clock cylces arbitration time t_{Acc} ... access time (1 AHB clock bus matrix arbitration + 2 APB clocks effective data transfer + 1 AHB clocks bus synchronization) t_{SRAM} ... SRAM read/write time (1 AHB clock bus matrix + 1 AHB clock single read/write) Ich würde das so verstehen, dass der DMA beim M3 zumindest 3 AHB clocks + 2 APB clocks benötigt, bis die Daten vom Port eingelesen wurden. Wenn die GPIOs beim M4 am AHB Bus dran sind dann nehm ich mal an, dass mindestens 4 AHB clocks notwendig wären, was eine minimale Verzögerung von 4 AHB Clocks oder ca. 24ns@168MHz bedeuten würde. Das wäre für mich schon das absolute Maximum. Da dürfte dann bei der Arbitrierung des Busses keine Verzögerung mehr enstehen was man so aber glaub ich auch nicht unbedingt garantieren kann, oder?? Ist meine Überlegung richtig, oder seh ich das ganz falsch? Danke, Andreas
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.