Forum: Mikrocontroller und Digitale Elektronik XMega128D3 SPI Probleme bei read


von Mathias F. (savag)


Lesenswert?

Hallo Leute,
folgenedes Problem:

Ich habe ein Projekt mit SPI aufgebaut. Als Master dient ein XMega128D3 
als
Slave ein DSP (ADAU1452). Bis jetzt habe ich alle Register des DSP 
beschreiben können. Also Filter setzten usw. Nun möchte ich jedoch ein 
Register Lesen, doch leider kommt nach dem Lesebefehl nichts vom DSP.

Meine Vermutung ist dass mein XMega nur in der Zeit die Clock generiert 
während er dem DSP sagt aus welchem Register ich lesene möchte.

Behaupte dies mal so da ich den SPI mit einem Analyzer mitschneide.

Hier meine Config für den SPI Master Port:
1
  PORTD.DIRSET = PIN4_bm;        //Init SS pin as output
2
  PORTD.DIRSET = PIN5_bm;        //MOSI als output
3
  PORTD.DIRCLR = PIN6_bm;        //MISO als input
4
  PORTD.DIRSET = PIN7_bm;        //CLK als output
5
    
6
  PORTD.OUTSET = PIN4_bm;        //Set SS output to high
7
  PORTD.PIN6CTRL = PORT_OPC_PULLUP_gc;  //Pull UP auf MISO
8
  
9
  
10
  SPID.CTRL = SPI_MODE_0_gc | SPI_PRESCALER_DIV16_gc | SPI_ENABLE_bm | SPI_MASTER_bm;

Und hier die Funktion:
1
unsigned char SPI_Master_send(uint8_t TXdata)
2
{
3
  /* Send pattern. */
4
  SPID.DATA = TXdata;
5
6
  /* Wait for transmission complete. */
7
  while(!(SPID.STATUS & SPI_IF_bm)) {
8
9
  }
10
  return = SPID.DATA;
11
}

: Bearbeitet durch User
von Loocee L. (loocee)


Lesenswert?

Jetzt fehlen nur noch soviele Dummy Writes von deinem Master
wie du vom DSP an Daten erwartest. Denn dein DSP kann ja als
Slave nicht von sich aus aktiv werden und Clocks generieren.

Also:

- Dummy Write
- Datum aus SPI Register lesen

so oft wie du Anzahl Bytes erwartest.

Eventuel musst du "warten" bis dein DSP seine Daten bereit hat.

: Bearbeitet durch User
von Mathias F. (savag)


Lesenswert?

SEEEEEEHR GUT,
na klar dass war das Problem :)

Also nochmal für alle die das Problem auch mal haben sollten.

Mein µC hat keinen Clock mehr auf der SPI erzeugt nachdem ich die 2Byte 
des zulesenden Registers übertragen habe.
Um nun ein Clock zu erzeugen sendet man Dummy Werte z.b. 0xFF nach den 
2Byte
der Adresse von der man lesen möchte.
Da bei SPI auf der MOSI wie auf der MISO gleichzeitig Daten gesendet 
werden können nutz der SLAVE nun diese Clock um meine gewünschten Bytes 
aus zu geben.

Danke nochmal an Eberhard F.

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.