#ifdef ATMEGA32 #include #define CI_LATCH 2 #elif defined(AT90S8515) #include <90S8515.h> #define CI_LATCH 2 #elif defined(ATMEGA8) #include #define CI_LATCH 1 #elif defined(ATMEGA48) #include #define CI_LATCH 1 #endif #include "controller_input.h" void controller_input_init(void) { //Assuming SPI setup by LED driver. DDRB.CI_LATCH=1;//Set latch as output. PORTB.CI_LATCH=1;//Data latch active low (keep high). } unsigned char controller_input_get(void) { PORTB.CI_LATCH=0;//Latch switches. SPDR=0xFF;//Output one byte to activate SPI input. while(!(SPSR&0x80));//Wait for transfer complete. PORTB.CI_LATCH=1;//Unlatch shift register. return ~SPDR;//Clear second SPIF flag and return input value. }