terom@10: #ifndef QMSK_SPI_H terom@10: #define QMSK_SPI_H terom@10: terom@10: #include "stdlib.h" terom@10: #include "port.h" terom@10: terom@10: static ioport_t *const SPI_DDR = &DDRB; terom@10: static ioport_t *const SPI_PORT = &PORTB; terom@10: terom@10: static const byte SPI_SCK = PORTB5; terom@10: static const byte SPI_MISO = PORTB4; terom@10: static const byte SPI_MOSI = PORTB3; terom@10: static const byte SPI_SS = PORTB2; terom@10: terom@10: enum spi_dord { terom@10: SPI_DORD_MSB = 0b0, terom@10: terom@10: SPI_DORD = SPI_DORD_MSB terom@10: }; terom@10: terom@10: enum spi_cpol { terom@10: SPI_CPOL_0 = 0b0, terom@10: SPI_CPOL_1 = 0b1, terom@10: terom@10: SPI_CPOL = SPI_CPOL_1 // mode 3 terom@10: }; terom@10: terom@10: enum spi_cpha { terom@10: SPI_CPHA_0 = 0b0, terom@10: SPI_CPHA_1 = 0b1, terom@10: terom@10: SPI_CPHA = SPI_CPHA_1 // mode 3 terom@10: }; terom@10: terom@10: enum spi_clock { terom@10: SPI_CLOCK_4 = 0b000, terom@10: SPI_CLOCK_16 = 0b001, terom@10: SPI_CLOCK_64 = 0b010, terom@10: SPI_CLOCK_128 = 0b011, terom@10: terom@10: SPI_CLOCK = SPI_CLOCK_16 terom@10: }; terom@10: terom@10: #define SPI_COUNT 2 terom@10: terom@10: /* terom@10: * Initialize in SPI master mode. terom@10: */ terom@10: void spi_init (); terom@10: terom@10: /* terom@10: * Write out value, and return read value. terom@10: */ terom@10: byte spi_readwrite (byte value); terom@10: terom@10: /* terom@10: * Perform an SPI bus update. terom@10: */ terom@10: void spi_update (); terom@10: terom@10: void spi_set (byte index, byte value); terom@10: terom@10: byte spi_get (byte index); terom@10: terom@10: #endif