SPI macht interrupt

This commit is contained in:
Tristan Krause 2019-04-03 11:38:15 +02:00
parent 266d90df56
commit fd2cb56ef3
11 changed files with 605 additions and 538 deletions

View file

@ -6,56 +6,54 @@ MCP23S17::MCP23S17(volatile SPI& spi, uint8_t adr) : spi(spi), adr(adr)
void MCP23S17::setDirA(uint8_t dir) const volatile
{
spi.setAdr(adr);
spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.pushByte(MCP23S17_DIRA);
spi.pushByte(dir);
spi.setAdr(SPIADR::NONE);
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_DIRA);
spi.addByte(dir);
spi.transfer(adr);
}
void MCP23S17::setDirB(uint8_t dir) const volatile
{
spi.setAdr(adr);
spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.pushByte(MCP23S17_DIRB);
spi.pushByte(dir);
spi.setAdr(SPIADR::NONE);
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_DIRB);
spi.addByte(dir);
spi.transfer(adr);
}
void MCP23S17::writePortA(uint8_t port) const volatile
{
spi.setAdr(adr);
spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.pushByte(MCP23S17_PORTA);
spi.pushByte(port);
spi.setAdr(SPIADR::NONE);
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_PORTA);
spi.addByte(port);
spi.transfer(adr);
}
void MCP23S17::writePortB(uint8_t port) const volatile
{
spi.setAdr(adr);
spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.pushByte(MCP23S17_PORTB);
spi.pushByte(port);
spi.setAdr(SPIADR::NONE);
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_PORTB);
spi.addByte(port);
spi.transfer(adr);
}
uint8_t MCP23S17::readPortA(void) const volatile
{
spi.setAdr(adr);
spi.pushByte(MCP23S17_OPCODE | MCP23S17_READ);
spi.pushByte(MCP23S17_PORTA);
uint8_t port = spi.pushByte(0);
spi.setAdr(SPIADR::NONE);
return port;
spi.addByte(MCP23S17_OPCODE | MCP23S17_READ);
spi.addByte(MCP23S17_PORTA);
spi.addByte(0);
spi.addByte(0);
spi.transfer(adr);
spi.wait();
return spi.buffer[3];
}
uint8_t MCP23S17::readPortB(void) const volatile
{
spi.setAdr(adr);
spi.pushByte(MCP23S17_OPCODE | MCP23S17_READ);
spi.pushByte(MCP23S17_PORTB);
uint8_t port = spi.pushByte(0);
spi.setAdr(SPIADR::NONE);
return port;
spi.addByte(MCP23S17_OPCODE | MCP23S17_READ);
spi.addByte(MCP23S17_PORTB);
spi.addByte(0);
spi.addByte(0);
spi.transfer(adr);
spi.wait();
return spi.buffer[3];
}