1 // Martin Thomas 3/2008
\r
5 #include <util/delay.h>
\r
9 void SPI_init( void )
\r
11 SPI_PORT |= (1<<SPI_MISO_BIT) | ( 1<<SPI_SS_BIT); // enable pull-up input and SS default high
\r
12 SPI_PORT &= ~( (1<<SPI_SCK_BIT) | (1<<SPI_MOSI_BIT) ); // output-inits
\r
13 SPI_DDR &= ~(1<<SPI_MISO_BIT);
\r
14 SPI_DDR |= (1<<SPI_MOSI_BIT) | (1<<SPI_SCK_BIT) | (1<<SPI_SS_BIT); //Set MOSI, SCK AND SS as outputs
\r
15 // SPSR = (1<<SPI2X);
\r
16 SPCR = (1<<SPE) | (1<<MSTR) | ( 1<<SPR1) | ( 1<<SPR0 );
\r
19 void SPI_release( void )
\r
22 SPI_DDR &= ~( (1<<SPI_MOSI_BIT) | (1<<SPI_SCK_BIT) | (1<<SPI_SS_BIT ) );
\r
23 SPI_PORT &= ~( (1<<SPI_MISO_BIT) | ( 1<<SPI_SS_BIT) );
\r
26 uint8_t SPI_rw( uint8_t out )
\r
30 _delay_ms(1); // slow down to give slave time to process
\r
34 while( !(SPSR0 & (1<<SPIF0)) ) { ; }
\r
38 while( !(SPSR & (1<<SPIF)) ) { ; }
\r