b15f/firmware/mcp23s17.cpp

60 lines
1.3 KiB
C++
Raw Normal View History

2019-03-25 12:00:22 +00:00
#include "mcp23s17.h"
2019-04-03 11:30:57 +00:00
MCP23S17::MCP23S17(volatile SPI& spi, SPIADR adr) : spi(spi), adr(adr)
2019-03-25 12:00:22 +00:00
{
2019-03-25 12:42:32 +00:00
}
2019-03-25 12:00:22 +00:00
2019-04-03 06:40:14 +00:00
void MCP23S17::setDirA(uint8_t dir) const volatile
2019-03-25 12:42:32 +00:00
{
2019-04-03 09:38:15 +00:00
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_DIRA);
spi.addByte(dir);
spi.transfer(adr);
2019-03-25 12:00:22 +00:00
}
2019-04-03 06:40:14 +00:00
void MCP23S17::setDirB(uint8_t dir) const volatile
2019-03-25 12:42:32 +00:00
{
2019-04-03 09:38:15 +00:00
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_DIRB);
spi.addByte(dir);
spi.transfer(adr);
2019-03-25 12:42:32 +00:00
}
2019-03-25 12:00:22 +00:00
2019-04-03 06:40:14 +00:00
void MCP23S17::writePortA(uint8_t port) const volatile
2019-03-25 12:00:22 +00:00
{
2019-04-03 09:38:15 +00:00
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_PORTA);
spi.addByte(port);
spi.transfer(adr);
2019-03-25 12:42:32 +00:00
}
2019-03-25 12:00:22 +00:00
2019-04-03 06:40:14 +00:00
void MCP23S17::writePortB(uint8_t port) const volatile
2019-03-25 12:42:32 +00:00
{
2019-04-03 09:38:15 +00:00
spi.addByte(MCP23S17_OPCODE | MCP23S17_WRITE);
spi.addByte(MCP23S17_PORTB);
spi.addByte(port);
spi.transfer(adr);
2019-03-25 12:42:32 +00:00
}
2019-04-03 06:40:14 +00:00
uint8_t MCP23S17::readPortA(void) const volatile
2019-03-25 12:42:32 +00:00
{
2019-04-03 09:38:15 +00:00
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];
2019-03-25 12:42:32 +00:00
}
2019-03-25 12:00:22 +00:00
2019-04-03 06:40:14 +00:00
uint8_t MCP23S17::readPortB(void) const volatile
2019-03-25 12:42:32 +00:00
{
2019-04-03 09:38:15 +00:00
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];
2019-03-25 12:00:22 +00:00
}