Forum: Mikrocontroller und Digitale Elektronik ATMega88 USART SPI als Slave


von Nobbie (Gast)


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

von TorstenS (Gast)


Lesenswert?

Hallo Nobbie,

wenn der Interrupt aktiviert wird, ist die Übertragung schon vorbei. 
Senden und Empfangen laufen doch parallel. Wenn du vor dem Senden des 
Masters im Slave das zu sendende Byte schon bereitstellst, sollte es 
funktionieren.

Gruß
Torsten

von Nobbie (Gast)


Lesenswert?

Hallo Torsten,

ich sende zyklisch(endlos) in der Mainloop vom MSP430. Somit sollte 
spätestens beim zweiten Schreibzyklus des MSP430 das Byte vom Slave 
übertragen werden.

Gruss
Nobbie

von Nobbie (Gast)


Lesenswert?

Hallo,

ich glaube, dass mit dem USART kein SPI Slav möglich ist. In den 
UserGuides steht folgende Zeile:

"...The USART can also be used in Master SPI mode,.."

Passiv betrachtet heißt das für mich, dass der Slave Mode nicht möglich 
ist.

Gruss
Nobbie

von TorstenS (Gast)


Lesenswert?

Hallo Nobbie,

ich habe auch gerade einen Blick in die Anleitung geworfen und gesehen, 
dass nur der Master-Mode unterstützt wird.

Gruß
Torsten

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.