PIC32 - zwei SPI Schnittstellen kontinuierlich betreiben

OP #2934935
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!
OP #2935724
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)?
#2937017
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren