/* SPI Initialisierung und polling des Masters */ #define ARRAY_LEN 22 /* Laenge der rec_ und sen_byte Arrays */ #define SPI_MON 6 /* Ueberwachungszeit SPI Antwort Slave */ static uint8_t sen_byte[ARRAY_LEN]; /* per SPI uebertragene Daten */ static uint8_t rec_byte[ARRAY_LEN]; /* per SPI empfangene Daten */ /* initialisieren Interrupts INT0 und INT1 beim Master */ static void init_interrupt(void) { EXT_INT_FLA |= (1 << ISC01)|(1 << ISC11); /* INT0/INT1 Trigger fallende Flanke */ EXT_INT_ACT |= (1 << INT0)|(1 << INT1); /* INT0/INT1 aktivieren => PD2, PD3 */ } /* ISR INT1 => HW-Signal vom Slave PD4 -> PD3 Master => Signal fuer SPI */ ISR(INT1_vect) { slave_frg = 1; /* Slave gibt SPI frei */ } /* Initialization Master Mode (polling) */ static void init_SPI_MASTER_poll(void) { volatile char IOReg; DDRB |= (1< high on SS Pin */ SPCR = (1< SPDR */ while(zaehler < ARRAY_LEN) { /* Abbruch */ while(!(SPSR & (1< INT1!! */ if(!slave_frg) { PORT_ON(PORTD, PD7); /* Slave antwortet nicht */ spi_fehler = 1; zaehler = ARRAY_LEN; } SPDR = sen_byte[zaehler]; /* Sendewert vom Sendespeicher */ slave_frg = 0; } while(!(SPSR & (1<