/********************************************************
* RFM12-Kommunikation, hardwareabhängige Routinen *
* ATmega8-Version für fe (AccessPoint) *
* Wird von rf12.c eingebunden, von sonst nichts *
********************************************************/
// MISO direkt abfragen
#define rf12_data() (PINB&0x10)
#include <avr/wdt.h>
extern void usbPoll();
#define PERBYTE_HOOK usbPoll();wdt_reset()
// Daten-WORD „austauschen“. Blockiert 2,6 µs
WORD rf12_xfer(WORD data) {
PORTB&=~0x04;
asm volatile("out %0,%B1" :: "I" (_SFR_IO_ADDR(SPDR)), "r" (data));
while (!(SPSR&1<<SPIF)); // warten bis High-Byte fertig
asm volatile("in %B0,%2" : "=r" (data): "0"(data), "I" (_SFR_IO_ADDR(SPDR)));
asm volatile("out %0,%A1" :: "I" (_SFR_IO_ADDR(SPDR)), "r" (data));
while (!(SPSR&1<<SPIF)); // warten bis Low-Byte fertig
asm volatile("in %A0,%2" : "=r" (data): "0"(data), "I" (_SFR_IO_ADDR(SPDR)));
PORTB|=0x04; // !SEL deaktivieren
asm volatile("nop");
PORTB&=~0x04; // !SEL reaktivieren: RGIT oder FFIT "guckt raus"
return data;
}
Detected encoding: UTF-8 | 0
|