Hallo Leute,
ich benutze folgenden Code auf einen 328P, kompiliert mit der aktuellen
Fassung von AVR Studio. Als Debugger wird ein AVR Dragon verwendet.
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 |
|
4 | int main(void){
|
5 |
|
6 | uint8_t spi_command = 0;
|
7 |
|
8 | DDRB |= (1<<4); //SPI-MISO
|
9 |
|
10 | SPCR |= (1<<SPE);
|
11 |
|
12 | SPDR = 23;
|
13 |
|
14 | while (!(SPSR & (1<<SPIF))){asm volatile ("nop");}
|
15 |
|
16 | spi_command = SPDR;
|
17 |
|
18 | while(1)
|
19 | {
|
20 | asm volatile ("nop");
|
21 | }
|
22 | }
|
SPDR wird laut IO View gar nicht gesetzt, was schon etwas wundert. Wenn
der Master Daten sendet, so wird wie erwartet SPIF gesetzt aber im SPDR
stehen falsche Daten (Master sendet eine '6' also 0x36, im SPDR steht
aber eine '>' also 0x3E) Laut Logic-Analyser sind die Daten auf dem Bus
korrekt.
Weiss jemand Rat?