SPI-Brigde (capseld), for polling interrupt, it is neccessary to adapt the constructor and the function getInt()
Diff: SC18IS602.h
- Revision:
- 0:833cb2c6da5d
- Child:
- 1:2a7edc2be6df
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SC18IS602.h Fri Feb 01 09:40:03 2019 +0000 @@ -0,0 +1,129 @@ +#ifndef H_SC18IS602 +#define H_SC18IS602 + +#include "mbed.h" +#include <string> + +#include "PCA9555.h" + +class SC18IS602 +{ + public: + + static const int BUFFER_SIZE = 200;// Byte + static const bool ACK = false; + static const bool NACK = true; + static const bool INTERRUPT = false; + + + // Register Adress + static const int HARD_ADR = 0x50; + static const int USER_ADR_MASK = 0x07; + + static const int CMD_RW_CS0 = 0x01; + static const int CMD_RW_CS1 = 0x02; + static const int CMD_RW_CS2 = 0x04; + static const int CMD_RW_CS3 = 0x08; + + static const int ADR_SPI_CONF = 0xF0; + static const int ADR_GPIO_WRITE = 0xF4; + static const int ADR_GPIO_READ = 0xF5; + static const int ADR_GPIO_EN = 0xF6; + static const int ADR_GPIO_CONF = 0xF7; + + + //Bit position of register Configure SPI Interface + static const int SPI_BIT_ORDER = 5; + static const int SPI_MODE = 2; + static const int SPI_CLK_RATE = 0; + + // Register Value SPI bit order + static const int SPI_BIT_ORDER_MSB = 0; // MSB of the data word is transmitted first + static const int SPI_BIT_ORDER_LSB = 1; // LSB of the data word is transmitted first + + // Register Value SPI Mode (CPOL, CPHA) + static const int SPI_MODE_00 = 0; + static const int SPI_MODE_01 = 1; + static const int SPI_MODE_10 = 2; + static const int SPI_MODE_11 = 3; + + //Register Value - Clock Rate + static const int SPI_RATE_58K = 0; + static const int SPI_RATE_115K = 1; + static const int SPI_RATE_461K = 2; + static const int SPI_RATE_1M8 = 3; + + + + // Bist position of Register GPIO Enable + static const int GPIO_CS0 = 0; + static const int GPIO_CS1 = 1; + static const int GPIO_CS2 = 2; + static const int GPIO_CS3 = 3; + + + + // Bit position of Register GPIO config + static const int GPIO_CONF_CS0 = 0; + static const int GPIO_CONF_CS1 = 2; + static const int GPIO_CONF_CS2 = 4; + static const int GPIO_CONF_CS3 = 6; + + + // Register Value of GPIO config + static const int BIDIRECTIONAL = 0; // quasi bidirecitonal + static const int PUSH_PULL = 1; // + static const int INPUT_ONLY = 2; // high impedance + static const int OPEN_DRAIN = 3; // needs an external pullup + + + const int iINT; + + // public + SC18IS602(I2C *_i2c, uint8_t uiAdr); + SC18IS602(I2C *_i2c, PCA9555 *_pca , uint8_t uiAdr); // + SC18IS602(I2C *_i2c, DigitalIn *_IntPin, uint8_t uiAdr); // + + + bool configSPI(uint8_t uiConf); + bool enableGPIO(uint8_t uiConf); + bool configGPIO(uint8_t uiConf); + + bool GPIO_pin3_on(); + bool GPIO_pin3_off(); + bool gpio_toggle(uint8_t uiPort); + + bool sendViaSPI(char cAdrByte, char *cDataBytes, uint8_t uiNum); + bool readViaSPI(char cAdrByte, char *cDataBytes, uint8_t uiNum); + + + bool getInt(); + bool clearInt(); + + private: // private + I2C *i2c; // Serial Data & Clock + PCA9555 *pca; + DigitalIn *IntPin; // Interrupt pin + + + bool sendViaI2C(const char *cData, int iLength, string sDebug = ""); + bool readViaI2C(char *cData, int iLength, string sDebug = ""); + + + + + // variable + bool bAck; + unsigned int uiNumByte; + char cCmd[BUFFER_SIZE]; + + const uint8_t SC18IS602_W; // const write-address + const uint8_t SC18IS602_R; // const read-address + + + char cDebug[100]; + +}; + + +#endif