ATMega88 USART SPI als Slave

Gast #1129230
Lesenswert?

Hallo,

ich möchte zwei MCUs(MSP430 <--> ATMEga88) über SPI kommunizieren 
lassen.
Der MSP430 muss SPI Master und der ATMega88 muss SPI Slave sein. 
Verdrahtet ist der ATMega:

   PD4   IN     SPI Clock vom MSP430
   PD0   IN     RXD (Daten vom MSP430)
   PD1   OUT    TXD (Daten zum MSP430)

Softwareseitig habe ich den ATMega wie folgt konfiguriert:

1
unsigned char spi_USARTInit(void)
2
{
3
  UCSR0B = 0x00; //disable
4
  UCSR0A = 0x00; //disable
5
  UCSR0C = 0x00; //disable
6

7
  UCSR0C |= (1 << 6);   // synchronus mode
8

9
  // set interrupts, enable rx/tx
10
  UCSR0B = (( 1 << RXCIE0 ) | ( 1 << RXEN0 ) | ( 1 << TXEN0 ));
11
}
12

13
void spi_USARTISR_Receive(void) __interrupt[USART_RX_vect]
14
{
15
  
16
  //uart has received a character in UDR
17
  unsigned char status, resh, resl;
18

19
  status  = UCSR0A;
20
  resh    = UCSR0B;
21
  resl    = UDR0;
22
  UDR0    = 'T';
23
  sys_ToggleLED();
24
}

Wenn ich den Code jetzt ausführe und der SPI Master ein Byte sendet, 
erkenne ich, dass der Interrupt im ATMega (SPI Slave) ausgeführt wird. 
Die LED toggelt und ein Byte wird über die TX Leitung geschickt.
Mein Problem ist jetzt, dass dieses Byte nicht dem gesendeten Byte ('T') 
entspricht(über OSZI angeschaut).

Jetzt meine Fragen:
- kann man das SPI Interface im ATMega via USART überhaupt als Slave 
betreiben?
- ist bei mir noch ein Fehler erkennbar?

Wäre für Input sehr dankbar

Gruss
Nobbie

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