b15f/spi.cpp

56 lines
859 B
C++
Raw Normal View History

2019-03-25 08:57:38 +00:00
#include "spi.h"
SPI::SPI(void)
{
}
void SPI::init(void) const
{
2019-03-25 12:00:22 +00:00
// Konfiguriere SPI DDRs
2019-03-25 12:42:32 +00:00
dMode(SLSL, OUT);
2019-03-25 08:57:38 +00:00
dMode(MOSI, OUT);
dMode(MISO, IN);
dMode(SCLK, OUT);
2019-03-25 12:42:32 +00:00
2019-03-25 12:00:22 +00:00
// 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);
2019-03-25 12:42:32 +00:00
// waehle keinen SPI Slave aus
setAdr(SPIADR::NONE);
2019-03-25 12:00:22 +00:00
}
/*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;
2019-03-25 08:57:38 +00:00
}