Hallo,
ich bastle zur Zeit mit den RFM12 Funkmodulen und der Ethersex Firmware
rum. Kann mir jemand von euch erklären, was der unten stehende Code
macht?
Speziell interessiert mich, warum am Anfang der Interruptroutine
'rfm12_trans (0x0000)' aufgerufen wird (was macht rfm12_trans (0x0000)
überhaupt?).
Und, unter welchen Umständen kann es passieren, dass man in das letzte
'if' reinläuft. Was läuft da falsch?
Bernd Vogt schrieb:> Und, unter welchen Umständen kann es passieren, dass man in das letzte> 'if' reinläuft. Was läuft da falsch?
Unter dem Umstand, dass in der Variable status z.B. der Wert 0 ist.
Das könnte sein, wenn z.B. das RFM12 Modul nicht versorgt wird, oder,
oder...
> was macht rfm12_trans (0x0000) überhaupt?
Das sieht man, wenn man sich die Funktion mal genauer ansieht...
Hallo,
Status holen, Interruptquelle maskieren, um den Auslöser zu
identifizieren.
PowerOnReset und FIFO-Overflow werden zuerst getestet.
Der letzte Fall testet, ob ein anderes Int-Bit außer 0x8000 (FIFO hat
Daten) gesetzt ist. Wenn nicht, wurde der Interrupt wohl durch eine
Störung und nicht vom RFM12 ausgelöst...
Gruß aus berlin
Michael
Zunächst mal Danke für eure Antworten! Ich denke ich beginne zu
begreifen was hier passiert... wobei mir die Ursache noch föllig unklar
ist :(
Ich verstehe das jetzt so: Der Befehl 0x0000 liest das Statusregister
des RFM12 aus. Es wird erwartet, dass das erste Bit im Register gesetzt
ist, was soviel bedeutet, wie dass das RFM12 Modul bereit zum Senden
ist. Leider ist aber dieses Bit 0 und das bedeutet, dass das Modul
gerade Daten empfängt? Evtl. durch eine Störung?
Was könnte die Ursache für diese Störung sein? Kann es evtl. auch an
einer fehlerhaften Initialisierung oder sogar Verkabelung des Moduls
liegen?
Das Seltsame ist, dass ich das selbe Verhalten auf zwei verschiedenen
Boards (AVR-NET-IO und Pollin Funkboard) und auch an zwei föllig
verschiedenen Standorten habe...
Grüße,
Bernd
Hallo,
da ich das gleiche Problem habe, interessiert mich wie weit Du gekommen
bist.
In den vielen Seiten die ich durchkämmt habe, fand ich das die 868
module mit rx-fifo-read (b000), dazu muß ef-bit gesetzt sein oder
status-read gelesen werden.
Ich glaube, der Interrupt kommt von RX, aber warum?