Forum: Mikrocontroller und Digitale Elektronik PIC32 - zwei SPI Schnittstellen kontinuierlich betreiben


von Christian S. (chrill)


Lesenswert?

Hallo zusammen,

ich möchte mit einem PIC32MX1xxxxx mit einem SPI Modul (SPI1) 
kontinuierlich Daten einlesen (slave, bitclock = 200-300 kHz) und 
gleichzeitig auf dem zweiten SPI Modul (SPI2) daraus abgeleitete Daten 
ausgeben (framed, slave, bitclock = 3 MHz).

Ich bin mir dabei nicht sicher wie eine mögliche Implementierung 
aussehen könnte.
Aufgrund der unterschiedlichen Busgeschwindigkeiten ist es 
wahrscheinlich nicht sehr sinnvoll für beide Module die SpiChnPutC(...) 
und SpiChnGetC(...) Funktionen zu verwenden, da SpiChnGetC(...) abwartet 
bis 1 Byte aus dem Buffer gelesen werden kann (oder?).

Wäre es sinnvoll SPI1 interruptgesteuert zu betreiben und SPI2 in einer 
Endlosschleife per SpiChnPutC(...)? Oder beide Interrupgesteuert? Oder 
sollte ich DMA Kanäle verwenden?

Ich bin für jede Anregung dankbar!

von Mick M. (highlow)


Lesenswert?

SPI2 sendet erst wenn SPI1 empfangen hat?

SPI1 interruptgesteuert zu betrieben, bietet sich jedenfalls schon 
einmal an.

von Stampede (Gast)


Lesenswert?

Schau dir mal die DMA Beispiele mit SPI an.

von Christian S. (chrill)


Lesenswert?

Mick M. schrieb:
> SPI2 sendet erst wenn SPI1 empfangen hat?
>
> SPI1 interruptgesteuert zu betrieben, bietet sich jedenfalls schon
> einmal an.

SPI2 sendet immer, auch wenn SPI1 noch nicht empfangen hat (SPI1 
überschreibt den Wert den SPI2 schickt - sonst schickt SPI2 den alten 
Wert und inkrementiert).

Was ist genau wäre eigentlich der Unterschied zwischen:
A) SPI1 interruptgesteuert (Interrupt nach 8 gelesenen Bits)
und
B) SPI1 über DMA Kanal (DMA Interrupt nach 8 gelesenen Bits)?

von Dieter W. (dds5)


Lesenswert?

Christian S. schrieb:
> Was ist genau wäre eigentlich der Unterschied zwischen:
> A) SPI1 interruptgesteuert (Interrupt nach 8 gelesenen Bits)
> und
> B) SPI1 über DMA Kanal (DMA Interrupt nach 8 gelesenen Bits)?


Bei A muss sich die Interrupt Service Routine um das Abholen der Daten 
an der Quelle und den Transport in das SPI Senderegister kümmern.

Bei B braucht's keine ISR, da macht die DMA-Einheit die ganze Arbeit.

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.