Hallo,
einen Gruß an alle Mitglieder hier im Forum - und ein frohes neues Jahr!
Ich bin neu hier und habe eine Frage, weiß aber nicht, wo genau ich die
stellen kann.
Kurz zum Hintergrund: habe nach Jahrzehnten der "Abstinenz" vor zwei
Jahren wieder mit Linux angefangen und bin mittlerweile auf PC im Kernel
Bereich unterwegs (Treiber).
Die Logik verstehe ich, auch wenn es in den Details noch sehr langsam
geht.
Gebt mir Zeit :-)
Bin auf embedded ARM Prozessoren gesto0en und möchte da gerne
hineintauchen.
Mein konkretes Problem - bevor ich mir jetzt ein Evaluation Board zulege
- ist folgendes:
Ich möchte gerne einen Logic Analyser bauen. Also Abgreifen von
digitalen Signalen über ein embedded System und nachfolgende Analyse.
Könnte auch ein Oszilloskop werden, spielt keine Rolle. Sollte auf jeden
Fall verdammt schnell sein.
Thema ist, ich bekomme z.B. von einem externen A/D Wandler
kontinuierlich 8bit Werte mit ner Clock und Valid etc. Evtl. noch ein
Start-Bit zur Synchronisation. Evtl. auch seriell, dann aber definitv
mit Start-Bit. (Kommt auf die Hardware vor dem System an, die ich
natürlich gerne 100%ig flexibel halten möchte).
Diese Werte muss ich irgendwie verarbeiten. Sei es über DMA (dann
brauche ich irgendeinen Chip, der die geclock'ten Daten sammelt und per
DMA schreibt, oder einen Bus zum embedded Prozessor, der in wie auch
immer aussehende Speicherbereiche schreibt.
Irgendwie habe ich da nach extensiver Suche noch keine Idee, wie und ob
das funktionieren kann. SW im ARM oder Chip? Wenn Chip, welcher, bzw.
wonach muss ich suchen? Stichwort?
Für Hilfe wäre ich dankbar. Hoffe, ich kann meinen Knoten lösen. Auch
für Hinweise, ob vielleicht in anderen Threads oder HowTo?.
Grüße
Joachim
Joachim Von stieglitz schrieb:> Ich möchte gerne einen Logic Analyser bauen.
Das klingt eher so, als hättest du bei CPLDs oder FPGAs vorbei schauen
sollen. Die tun sich damit leichter. Den ARM nutzt man dann zur
Auswertung, nicht zum sampeln.
Hi,
wow - superschnell. Danke.
Habe - irgendwie vergeblich - nach FPGAs gesucht. Die machen doch
irgendwie nur Verarbeitung von Daten. Habe das aber nicht wirklich
verstanden, wenn ich ehrlich bin.
CPLDs sagen mir nach kurzer Durchsicht der hier verfügbaren Doku nichts.
Hatte gehofft, es gibt eine "normale" Methode, wie externe Daten im Arm
verarbeitet werden können.
Analog sozusagen zum Verarbeiten im PC von PCI Devices über Interrupt
mit Buffer.
Also etwas peripheres, dass mir nen Buffer erzeugen kann aus nem
geclockten seriellen oder 8bit parallenen Signal.
Edit: bin aber hoffnungsvoll, dass ich hier einen Hinweis bekomme, wo
ich mich schlau machen kann. Es geht mehr darum, wie ich die Datenworte
in den ARM bekomme.
z.B. 16000 Werte übertragen, oder N Werte übertragn, bis neuer
Synchronimpuls kommt, dann wieder warten und speichern bzw. DMAen oder
buffern.
Grüße
Joachim
Hier etwas praktisches:
http://www.mikrocontroller.net/articles/MiniLA
Da hast du Peripherie die deiner CPU Daten zur Verfügung
stellt. Ich denke das du mit einem ARM ö.ä. nicht weit kommen
würdest.
In der Artikelsammlung gibt es vielleicht noch mehr in der
Richtung.
Hi Michael,
danke für die Info.
Klar, es gibt sowas (Logic Analyzer) bestimmt schon, aber meine Idee ist
anders. Vielleicht sollte ich den Logic Analyzer löschen. Der hat sowas
"digitales".
Mein Ziel ist es, beliebige Analoge Werte (Spannung, Strom, Kraft,
Schwingung, also Weg) analog zu digital zu konvertieren. Aber nicht mit
mit evtl. vorhandenen ADCs sondern mit diskreten externen Schaltungen.
Einfach um 100%ig flexibel zu sein. Ob mein Adapter nun
Temperaturverläufe (langsam) oder Spannungsverläufe meines
Zündkreislaufs im Auto (immer noch langsam) oder Spektralanalysen eines
Empfangssignals (verdammt schnell) macht, wäre dann egal. Die externen
Bausteine kriege ich hin.
Also Input = 8bit Wort oder serieller Stream. Wie beim PCIe - ich habe
externe Karten, die sampeln. Hier ist es aber einfacher, da ich nur die
vorhandenen Buffer per Interrupt lesen muss und gut ist. Das ist
einfach, aber ich benötige für verschiedene Anwendungen verschiedene PCI
Karten. Das ufert dann aus...
Meine Schnittstelle hätte ich gerne auf 8bit parallel oder seriell
digital. Was mein embedded System dann draus macht, ist reine SW.
Irgendwie muss man doch externe 8bit Worte per DMA oder so empfangen und
vernünftig verarbeiten können? Ist doch prinzipiell nichts anderes als
die PCI Karten, die entweder onboard oder per DMA dann per Interrupt
buffern? Der ARM ist doch trotz RISC ein "normaler Prozessor? Somit
sollten zumindest DMA Controller verfügbar und anbindbar sein, oder
andere elegantere Lösungen?
Wie gesagt - bin da blank - trotz intensiver Recherchen und es fehlt der
Funke, wie ich mit dem ARM externe geclockte Daten empfangen kann (ohne
den Proc nur damit zu beschäftigen, auf Daten zu warten und auch noch
unsicher bzgl. der Clock Synchronisation zu sein).
Grüße
Joachim
Wenns nicht allzu garstig eilig ist, dann holt man heute Analogdaten
seriell über SPI ab. Und wenn der ARM DMA drin hat, dann passiert das so
ganz nebenbei.
Parallel geht das aber auch, wenns unbedingt sein muss. Ich meine die
STM32 können getriggert durch einen Timer Daten von einem Parallelport
per DMA in den Speicher schaufeln. Obs auch mit externem Trigger geht
habe ich grad nicht parat.
ups, cool - das stm32 scheint in die richtige Richtung zu gehen!
Aber das muss ich erstmal verdauen, bevor ich weiss, ob es funktionert,
bzw. ich es implementieren kann, sieht nicht einfach aus. Newbie eben.
Keine "einfache" Lösung? Dann muss ich versuche, mich mit dem ST DMA
controller zu verständigen (ich mag ST wirklich, by the way).
Und muss nochmal die paralelle Variante prüfen - hatte den Eindruck nach
dem ersten Lesen, dass er parallel kann.
Außerdem kann das "Biest" wohl 12 DMA Channels gleichzeitig. Irgendwie
ne Herausforderung, andererseits auch ein Kostenfaktor (der "Cortex"
aleine riecht schon teuer), da ich nur einen einzige DMA Channel
brauche. Aber da kann ich noch bei ST suchen.
Hilft mir jedenfalls erstmal weiter.
Bin aber dennoch auf der Suche nach einem "einfachen" 8bit DMA Zugriff.
Joachim S. schrieb:> Irgendwie muss man doch externe 8bit Worte per DMA oder so empfangen und> vernünftig verarbeiten können? Ist doch prinzipiell nichts anderes als> die PCI Karten, die entweder onboard oder per DMA dann per Interrupt> buffern? Der ARM ist doch trotz RISC ein "normaler Prozessor? Somit> sollten zumindest DMA Controller verfügbar und anbindbar sein, oder> andere elegantere Lösungen?
Ich hätte da ein FIFO genommen (von IDT gibts da einiges, leider auch
viele alte Kamellen mit 5V Vcc), in das Deine externe Schaltung ihre
Daten reintaktet, das Half-Full-Flag auf eine Interruptleitung, und wenn
das FIFO dann halbvoll ist, kannst Du es dann in einer optimierten
Schleife ohne weitere Abfragen leeren. Das sollte eigentlich relativ fix
gehen, auch ohne DMA.
Um welche Taktraten geht es hier eigentlich?
fchk