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 | }
|