Der Übeltäter hier ist der AHB Bus! Teuflich kann ich dir sagen, daher muste ich bei uns auf die Pläne einen ATSAML21 zu verwenden nach 2 Wochen investierter Arbeit abbrechen.DSB (data synchronisation barrier)
und DSM (data synchronisation memory)
Deine Auflösung macht schon fast einen Cortex notwendig, aber die DMAs bei Cortex Kernen sind leider fast alle sog. eDMA welche das Transferdeskriptor-Modell verwenden. Liegen die Deskriptoren im RAM muss für jede Aktion erst der aktuelle Deskriptor von den Registern in den RAM geschrieben werden (Writeback) dann der getriggerte Deskriptor aus dem RAM geladen werden und dann erst kann die Transaktion starten. Tritt dann noch ein Busy-Flag wegen AHB Sync auf ist dier Performance richtig im Teich.
Es gibt einige wenige Prozessoren (STM32 als mir bekanntes Beispiel), welche die Deskriptoren in eigenen Registern vorhalten (damit auch Funktionsmäßig limitiert sind auf Inkrement und Dekrement aber keine Addresssprünge ... fuck schreibt mand as wirklich so???) und deswege halbwegs agil reagieren. Aber der STM leidet darunter dass er nur fest verdrahtete Events zu DMA Channel Verbindungen hat und somit ziemlich unflexibel in der Perepherie zu benutzen ist. Man kann ja z.B. nichtmal 2 DMAs verkettet laufen lassen um z.B. immer einen ADC Wert und sofort passend dazu einen Timestamp auf einem 2ten Channel zu kopieren.
Ich rate daher bei Zeitkritischen Basteleien immer eine Voruntersuchung der Hardware vorzunehmen, das Datenblatt verschweigt oft vieles, weil der Schreiber die generelle Funktion im Sinne hatte aber der praktische Anwender in der Regel extreme Ideen![]()
Lesezeichen