#ifndef SPI_HW_H
#define SPI_HW_H

#include <avr/io.h>

#define SPI_HW_PORT PORTB
#define SPI_HW_DIR DDRB
#define SPI_HW_PIN PINB

#define SPI_HW_SCK PB5
#define SPI_HW_MISO PB4
#define SPI_HW_MOSI PB3
#define SPI_HW_CS PB2

static inline void spi_hw_init(uint8_t conf)
{
	SPI_HW_DIR |= (_BV(SPI_HW_CS) | _BV(SPI_HW_SCK) | _BV(SPI_HW_MOSI));
	SPCR = conf;
}

static inline void spi_hw_cs_high()
{
	SPI_HW_PORT |= _BV(SPI_HW_CS);
}

static inline void spi_hw_cs_low()
{
	SPI_HW_PORT &= ~(_BV(SPI_HW_CS));
}

static inline uint8_t spi_hw_data_send(uint8_t data)
{
	SPDR = data;
	while((SPSR & _BV(SPIF)) == 0);
	
	SPSR |= _BV(SPIF);
	
	return SPDR;
}

#endif

