Nabend zusammen,
Ich hab schon viel gegoogelt und auch hier schon einige Threads
durchgeschaut, ich komme aber leider auf keine Lösung. Ich bin grade
dabei eine Ansteuerung für ein RFM12 Funkmodul zu programmieren und
möchte, sobald ich ein Register über SPI beschreibe, auch auslesen was
wirklich reingeschrieben wurde. Das sollte doch meines Verständnisses
nach möglich sein, indem ich die ersten 8 Bit über SPI übertrage, dann
das SPDR auslese, dann die anderen 8 Bit übertrage und dann wieder das
SPDR auslese oder nicht?
Ich vernwede momentan folgenden Code:
1 | unsigned int rfm12_write_command(unsigned int data)
|
2 | {
|
3 | unsigned int daten = 0;
|
4 | PORT_SPI &= ~(1<<PIN_SS);
|
5 | SPDR = (data>>8);
|
6 | while(!(SPSR & (1<<SPIF)));
|
7 | daten = SPDR<<8;
|
8 | SPDR = (data & 0x00FF);
|
9 | while(!(SPSR & (1<<SPIF)));
|
10 | daten |= (SPDR & 0x00FF);
|
11 | PORT_SPI |= (1<<PIN_SS);
|
12 | _delay_ms(1);
|
13 | return daten;
|
14 | }
|
15 |
|
16 | void Init_SPI()
|
17 | {
|
18 | DDR_SPI = (1<<PIN_SCK) | (1<<PIN_MOSI) | (1<<PIN_SS);
|
19 | DDR_SPI &= ~(1<<PIN_MISO);
|
20 | PORT_SPI |= (1<<PIN_SS);
|
21 |
|
22 | SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0); //SPI Enable und SPI als Master
|
23 | SPSR = (1<<SPI2X);
|
24 |
|
25 | _delay_ms(1);
|
26 | }
|
Das ganze lasse ich mir über UART ausgeben, ich bekomme aber immer nur
0xFFFF als Registerinhalt zurück. Fällt da jemandem ein Fehler bei der
SPI Übertragung auf oder ähnliches?
Vielen Dank schonmal,
Liebe Grüße