add PortMCP23S17::beginProtocol()
This commit is contained in:
parent
bc5e9dd07f
commit
fbf4eda206
@ -9,7 +9,8 @@ Port classes are the keybrd library's interface to microcontroller ports or I/O
|
|||||||
class PortInterface
|
class PortInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void begin(const uint8_t strobeOn)=0;
|
virtual void beginProtocol()=0; //SPI or I2C bus
|
||||||
|
virtual void begin(const uint8_t strobeOn)=0; //configure GPIO pins
|
||||||
virtual void write(const uint8_t strobePin, const bool pinLogicLevel)=0;
|
virtual void write(const uint8_t strobePin, const bool pinLogicLevel)=0;
|
||||||
virtual uint8_t read()=0;
|
virtual uint8_t read()=0;
|
||||||
};
|
};
|
||||||
|
@ -17,24 +17,27 @@ uint8_t PortMCP23S17::transfer(const uint8_t command, const uint8_t registerAddr
|
|||||||
|
|
||||||
/* begin() is called from Scanner_IOE::begin().
|
/* begin() is called from Scanner_IOE::begin().
|
||||||
Initiates SPI bus and configures I/O pins for read and write.
|
Initiates SPI bus and configures I/O pins for read and write.
|
||||||
strobeOn is logic level of strobe on, HIGH or LOW
|
|
||||||
|
|
||||||
MCP23S17 SPI interface is 10 MHz max.
|
MCP23S17 SPI interface is 10 MHz max.
|
||||||
The electrical limitation to bus speed is bus capacitance and the length of the wires involved.
|
The electrical limitation to bus speed is bus capacitance and the length of the wires involved.
|
||||||
Longer wires require lower clock speeds.
|
Longer wires require lower clock speeds.
|
||||||
|
|
||||||
begin() is called from Scanner_IOE::begin() twice, once each for refPortWrite and refPortRead.
|
|
||||||
The first 4 lines only need to be called once, but seem to work OK if called a second time.
|
|
||||||
*/
|
*/
|
||||||
void PortMCP23S17::begin(const uint8_t strobeOn)
|
void PortMCP23S17::beginProtocol()
|
||||||
{
|
{
|
||||||
uint8_t pullUp; //bits, GPPU 0=pull-up disabled, 1=pull-up enabled
|
|
||||||
|
|
||||||
pinMode(SS, OUTPUT); //configure controller's Slave Select pin to output
|
pinMode(SS, OUTPUT); //configure controller's Slave Select pin to output
|
||||||
digitalWrite(SS, HIGH); //disable Slave Select
|
digitalWrite(SS, HIGH); //disable Slave Select
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
SPI.beginTransaction(SPISettings (5000000, MSBFIRST, SPI_MODE0)); //control SPI bus, 5 MHz
|
SPI.beginTransaction(SPISettings (5000000, MSBFIRST, SPI_MODE0)); //control SPI bus, 5 MHz
|
||||||
//SPI.endTransaction() not called to release SPI bus because keyboard only has one SPI device
|
//SPI.endTransaction() not called to release SPI bus because keyboard only has one SPI device
|
||||||
|
}
|
||||||
|
|
||||||
|
/* begin() is called from Scanner_IOE::begin().
|
||||||
|
strobeOn is logic level of strobe on, HIGH or LOW
|
||||||
|
configure IODIR and GPPU.
|
||||||
|
*/
|
||||||
|
void PortMCP23S17::begin(const uint8_t strobeOn)
|
||||||
|
{
|
||||||
|
uint8_t pullUp; //bits, GPPU 0=pull-up disabled, 1=pull-up enabled
|
||||||
|
|
||||||
if (strobeOn == LOW) //if active low, use internal pull-up resistors
|
if (strobeOn == LOW) //if active low, use internal pull-up resistors
|
||||||
{
|
{
|
||||||
|
@ -42,6 +42,7 @@ class PortMCP23S17 : public PortInterface
|
|||||||
uint8_t transfer(const uint8_t command, const uint8_t registerAddr, const uint8_t data);
|
uint8_t transfer(const uint8_t command, const uint8_t registerAddr, const uint8_t data);
|
||||||
public:
|
public:
|
||||||
PortMCP23S17(PortIOE& port, const uint8_t readPins) : port(port), readPins(readPins) {}
|
PortMCP23S17(PortIOE& port, const uint8_t readPins) : port(port), readPins(readPins) {}
|
||||||
|
void beginProtocol();
|
||||||
void begin(const uint8_t strobeOn);
|
void begin(const uint8_t strobeOn);
|
||||||
virtual void write(const uint8_t pin, const bool logicLevel);
|
virtual void write(const uint8_t pin, const bool logicLevel);
|
||||||
virtual uint8_t read();
|
virtual uint8_t read();
|
||||||
|
@ -12,8 +12,9 @@ Initiates communication protocal and configs ports.
|
|||||||
*/
|
*/
|
||||||
void Scanner_IOE::begin()
|
void Scanner_IOE::begin()
|
||||||
{
|
{
|
||||||
refPortRead.begin(strobeOn);
|
refPortWrite.beginProtocol();
|
||||||
refPortWrite.begin(strobeOn);
|
refPortWrite.begin(strobeOn);
|
||||||
|
refPortRead.begin(strobeOn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* scan() is called on every iteration of sketch loop().
|
/* scan() is called on every iteration of sketch loop().
|
||||||
|
Reference in New Issue
Block a user