Forum: Digitale Signalverarbeitung / DSP / Machine Learning eZdsp F28335 SPI


von K.A. (Gast)


Lesenswert?

Hallo ihr!

Ich hab ein Problem.

Ich soll auf dem eZdsp F28335 zwei SPI generieren. Das Problem ist, auf 
diesem Board befindet sich aber nur eine.
Es sollen Daten über die SPI geschickt werden und dann wieder 
aufgenommen werden.

Es ist ein Beispiel vorhanden. Das nennt sich SPI Loop. Ich kann damit 
die Werte auf dem Oszi messen, aber nicht am SOMI. Ist das so richtig?
Ich habe nämlich gedacht, wenn die Daten gesendet und empfangen werden, 
würde ich an allen Aus-/Eingängen etwas messen.

Könntet ihr mir da weiter helfen?
Der Betreuer ist leider erst wieder am Freitag da, also kann ich den 
nicht fragen.

Gruß,

K.A.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Wenn der Datendurchsatz nicht kritisch ist, kann man an einen SPI Master 
einfach mehrere Slaves anschließen. Zur Auswahl, welcher Slave 
angesprochen wird, verwendet man den Chipselect-Eingang der Slaves.

Etwa so:

Master

Master[MOSI]    ->Slave1[MOSI], Slave2[MOSI]
Master[MISO]    ->Slave1[MISO], Slave2[MISO]
Master[SPICLK]  ->Slave1[SPICLK], Slave2[SPICLK]
Master[GPIO1]   ->Slave1[CS]
Master[GPIO2]   ->Slave2[CS]

An MISO kannst du nur etwas messen, wenn die gesendeten Daten nicht 
konstant
0 oder 1 als Bitwerte enthalten.

Grüße,

Peter

von K.A. (Gast)


Lesenswert?

Danke für deine Antwort.

Konfiguriere ich dann einfach freie IO Pins für den Slave?

Das ich einen Master an mehrere Slaves anhängen kann, hab ich auch 
gelesen.

Kennst du das Board?

von cyno (Gast)


Lesenswert?

Hi K.A.,

ich hab dein Problem jetzt nur oberflächlich überfolgen, aber da ich in 
meiner DA mit diesem DSP gearbeitet habe und auch zwei 
SPI-Schnittstellen brauchte, wollte ich dir den Tipp geben und im 
Datenblatt mal nach McBSP (Multi-channel Buffered Serial Port) zu 
schauen. Den gibt es zweimal und dieser lässt sich auch als SPI 
konfigurieren.

Gruß,
cno

von cyno (Gast)


Lesenswert?

Ergänzung: Habe damals auch mit ezDSP Board gearbeitet...

Gruß,
cyno

von K.A. (Gast)


Lesenswert?

Danke für die Antwort.

Habe das genau gemacht, wie es in der Anleitung steht. Also habe jetzt 
einen Master und einen Slave generiert.

Ich habe nun das Beispiel für die mcbsp_spi_loopback mir angeschaut.

Da steht dann in der Main loop:

for(;;)
{
   mcbsp_xmit(sdata1,sdata2);
   while( McbspbRegs.SPCR1.bit.RRDY == 0 )
{} 
while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}
   rdata2 = McbspaRegs.DRR2.all;
   rdata1 = McbspaRegs.DRR1.all;
   if((rdata2 != sdata2)&&(rdata1 != sdata1)) error( );
   delay_loop();
   sdata1^=0xFFFF;
   sdata2^=0xFFFF;
   asm("    nop");
}

Kann ich das dann auch nutzen? Ich hätte gemeint, dass es gehen würde.

von Jan H. (cyno)


Lesenswert?

Ist zwar schon eine Weile her und ich hab die Unterlagen gerade nicht 
zur Hand, aber theoretisch kannst du das nutzen. Bei dem Beispiel hast 
du natürlich nur den Effekt das du von dem einen McBSP-Port Daten in 
einer Endlosschleife an den anderen schickst.
Aber die Funktionen (ggf. müssen noch deinen Anforderungen angepasst 
werden) kannst du schonmal als Ausgangspunkt für dein eigenes Projekt 
nutzen. Hatte ich damals auch so gemacht - die Beispiele sind dafür echt 
gute gemacht.

von K.A. (Gast)


Lesenswert?

Super danke.

Wenn ich noch weitere Fragen habe, dann wende ich mich an dich g

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.