#include "spi.h" SPI::SPI(void) { } void SPI::init(void) const { // Konfiguriere SPI DDRs dMode(SLSL, OUT); dMode(MOSI, OUT); dMode(MISO, IN); dMode(SCLK, OUT); // Konfiguriere DMUX DDRs dMode(DMUX1, OUT); dMode(DMUX2, OUT); dMode(DMUX3, OUT); // aktiviere SPI, Master Modus, SPI Modus 0 // F_SPI = F_CPU / 2 (prescaler 2) SPCR = _BV(SPE) | _BV(MSTR); SPSR = _BV(SPI2X); // waehle keinen SPI Slave aus setAdr(SPIADR::NONE); } /*void SPI::setFreq(uint32_t freq) const { }*/ void SPI::setAdr(uint8_t adr) const { dWrite(DMUX1, 0); dWrite(DMUX2, 0); dWrite(DMUX3, 0); if(adr & 0x01) dWrite(DMUX1, 1); if(adr & 0x02) dWrite(DMUX2, 1); if(adr & 0x04) dWrite(DMUX3, 1); } uint8_t SPI::pushByte(uint8_t b) const { SPDR = b; while(!(SPSR & _BV(SPIF))); return SPDR; }