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