RFM12 FIFO Problem

OP #1998623
Lesenswert?

Hallo Ihr RFM12 Experten,

ich habe bei mir einen RFM12 Sender und Empfänger laufen.
Der Sender funktioniert soweit schonmal fehlerfrei.
Leider macht der Empfänger noch ein Problem. Im Forum habe ich leider 
noch nichts passendes gefunden...
Ich kann leider nur die ersten beiden gesendeten Bytes (16bit) aus dem 
FIFO lesen.

Ich habe folgenden Ablauf:
Sender:

   RFM12_write(0x8228);
   delay_us(4);
   RFM12_write(0x8238);

   RFM12_SendByte(0xAA);
   RFM12_SendByte(0xAA);
   RFM12_SendByte(0xAA);

   RFM12_SendByte(0x2D);
   RFM12_SendByte(0xD4);

   RFM12_SendByte(0x3A);
   RFM12_SendByte(0x5A);
   RFM12_SendByte(0x6A);
   RFM12_SendByte(0x7A);
   RFM12_SendByte(0x8A);
 ... usw.

Der Sender sendet alle 5 sec. diese Daten.

Empfänger:
Empfang wird über einen Interrupt ausgelöst.
 Beim Auslesen des FIFOs bekomme ich folgende Werte zurück:
  nIRQReceive
  rfm12_GetStatus()=                  A0E0
  rfm12_read_data(): data[0]: 3a      --> Byte i.O.
  rfm12_GetStatus()=                  80FF
  rfm12_read_data(): data[1]: 5a      --> Byte i.O.
  rfm12_GetStatus()=                  0287   // FIFO leer
  rfm12_read_data(): data[2]: 00      --> Byte n.i.O.
  rfm12_GetStatus()=                  02A7   // FIFO leer
  rfm12_read_data(): data[3]: 00      --> Byte n.i.O.


Die Funktion RFM12_read_fifo() sieht wie folgt aus:
int16 RFM12_read_fifo(){
   int i;
   int16 data;
   disable_interrupts(GLOBAL);
     while(input(SDO==1));
        RFM12_GetStatus();
      data=rfm12_read_data(0xB000);
      delay_us(2);
     enable_interrupts(GLOBAL);
     return(data);
}


Jetzt stellt sich mir die Frage, warum ich nur die ersten zwei 
gesendeten Bytes empfangen kann.
Ich vermute, dass der RFM12 16bit in den FIFO überträgt und di nächsten 
16bit können nicht in den FIFO geschrieben werden.
Kann es evtl. noch ein Timing Thema sein, dass ich den FIFO schon zu 
früh abfrage?
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.