Forum: Mikrocontroller und Digitale Elektronik Wie XMOS X-Link an STM32F4 anschliessen


von Uli (Gast)


Lesenswert?

Hallo,

ich brauche für ein Projekt eine Art Coprozessor.
Dafür wollte ich einen XMOS Prozessor nehmen.

Die Daten vom XMOS kommen aber recht flott und müssen entsprechend 
eingelesen werden.
Ich habe auf dem XMOS auch keinen Platz mehr für einen SPI Task, wenn 
der überhaupt schnell genug wäre.
Hatte auch schon überlegt alles mit XMOS zu machen, aber der STM32F4 hat 
halt fast alles was ich brauche als Hardware drin.
Mir fehlt halt nur eine Schnittstelle und der XMOS macht noch gleich 
eine Vorverarbeitung um den STM zu entlasten.

So nun brauche ich aber eine Schnittstelle und da hat XMOS diesen 
schönen X_LINK.
Über den wollte ich den XMOS auch gleich booten.

Nur wie kann man den X-LINK nutzen?

Es soll so was für den AVR geben, nur der Code ist unauffindbar.

Viele Grüsse,
Uli

von Uli (Gast)


Lesenswert?

Kann mir keiner helfen?


Ich bin ja nicht untätig, ich glaube das der Empfang wohl am schnellsten 
mit einem Pin-Change Interrupt gehen müsste. Wobei man dann irgendwie 
die Daten weiterleiten muss.
Aber wie ich das nun so hin bekomme das ich kaum Systemlast produziere 
kann ich noch nicht sagen

Das Senden ist ja mehr ein abarbeiten der Bits.
Aber auch hier suche ich noch was ohne viel Systemlast.

Hat jemand eine Idee?

Uli

von Marco S (Gast)


Lesenswert?

Googeln bis

http://archive.xmoslinkers.org/upload/306

Da gibt es was für

######################################################################## 
#######
# Makefile for the project xmos_link_test
######################################################################## 
#######

## General Flags
PROJECT = xmos_link_test
MCU = attiny44
TARGET = xmos_link_test.elf
CC = avr-gcc

von ./. (Gast)


Lesenswert?

> ich glaube das der Empfang wohl am schnellsten  mit einem Pin-Change
> Interrupt gehen müsste.

Da bist Du wohl auf dem Holzweg.
Mit einem Interrupt per Flankenwechsel duerfte das eher die langsamste
Methode werden da Daten einzulesen.

Wenn es im Angebot der STM32-Peripherie nichts passendes gibt:
Schraub Dir ein paar Schieberegister an den ARM.
Wenn die voll sind, dann waere ein Interrupt ja vielleicht OK.

von (prx) A. K. (prx)


Lesenswert?

Wenn es um Tempo geht, dann muss der X-Link nicht das Optimum sein. Man 
sollte sich überlegen, ob man den DMA Controller des STM32 effektiv ins 
Spiel bringen kann. Auf XMOS Seite ist das Kommunikationsverfahren 
sowieso frei programmierbar.

von Uli (Gast)


Lesenswert?

Den Code für den AVR hatte ich schon gesucht aber nie gefunden, Danke.

Der Code basiert aber auch auf Pin-change.
Das das nicht das Optimum ist, ist auch mir klar, aber SPI geht halt 
nicht (nichts mehr frei).
Ob wohl mir das sehr entgegen kommen würde, alleine schon weil der STM32 
dann nicht viel damit zu tun hat außer nach dem einlesen die Daten zu 
verarbeiten.
Von XMOS aus ist es ein einfaches Senden zu einem andern Kern, ohne 
Systemlast.

Wenn der STM32 ein 16 Bit Parallel SPI Interface hätte dann könnte ich 
den Coprozessor auch mit einem zweiten STM32 machen.
Es kommen aber ca. 6 Mega Byte pro Sekunde auf der Schnittstelle an.
Die werden durch den XMOS auf ca. 500KB/sec reduziert.

An einen FPGA hatte ich auch schon gedacht, aber da kenne ich mich nicht 
aus.
Gut ist kein Grund, kann man lernen, aber XMOS & STM32 kenne ich.

Ein paar Schieberegister werden nicht gehen, wüste jetzt nicht wie man 
diese System umbiegen könnte. Da braucht man schon etwas mehr Logik.
Die Bits kommen etwas anders rein (2 Draht):
Es gibt eine Leitung für "0" und eine für "1".
Ein Flankenwechsel an einer Leitung entspricht einer 0 oder 1.
Also Leitung "0" ->Lo->Hi->Lo->Hi --> macht 4 Wechsel auf der Null also 
-> 0000.

von GB (Gast)


Lesenswert?

Schau Dir doch den XMOS XA an, der hat einen Cortex-M und einen XMOS 
(+Schnittstellen, ADC, DAC, ...) drin.

von GB (Gast)


Lesenswert?

Alternativ nimmst Du die USB-Serie und hängst das ganze über High-Speed 
USB zusammen.

von Uli (Gast)


Lesenswert?

Alles gute Ideen, aber auch da braucht man immer einen Task vom XMOS und 
wie ich schon mehrfach sagte, ich habe keinen mehr frei.

von (prx) A. K. (prx)


Lesenswert?

Zweiten kleinen XMOS fürs Interface verwenden.

von Uli (Gast)


Lesenswert?

Und einen A9 als WD und zum Booten der anderen Prozessoren?
Mal im ernst irgendwo ist dann auch mal eine Grenze die man nicht 
übertreten sollte.

von (prx) A. K. (prx)


Lesenswert?

Yep. Und an der Grenze hängst du grad. ;-)
Soll heissen, du hast einen XMOS mit N Tasks und brauchst N+1.

: Bearbeitet durch User
von Uli (Gast)


Lesenswert?

Ich versuche mal mein Glück mit dem Pin-Change.
Der STM32 ist ja nicht gerade langsam und sollte das schaffen.
Wenn mir das zuviel Systemzeit schluckt dann überlege ich weiter.

Nebenbei schaue ich noch mal ob ich nicht einen Task frei bekomme.

Ein Zweiter XMOS wollte ich nicht, wenn dann kommt ein grösserer drauf.
Auch wenn das dann schwerer zu löten ist.
Alternativ könnte ich ja auch einen AVR dazwischen hängen, den Code habe 
ich ja jetzt.

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