avr-firmwares/drivers/spi.c

24 lines
496 B
C

#include "spi.h"
#include <avr/io.h>
uint8_t spi_init(uint8_t spcr) {
PORTB |= (1 << 5); // set SCK hi
DDRB |= (1 << 5); // set SCK as output
DDRB &= ~(1 << 4); // set MISO as input
DDRB |= (1 << 3); // set MOSI as output
DDRB |= (1 << 2); // SS must be output for Master mode to work
SPCR = spcr | SPE;
return(SPSR);
}
uint8_t spi_transfer(uint8_t in) {
uint8_t v;
SPDR = in;
// wait for transfer to complete
while(! (SPSR & (1<<SPIF)) ) {};
v = SPDR;
return(v);
}