SPI-Brigde (capseld), for polling interrupt, it is neccessary to adapt the constructor and the function getInt()
SC18IS602.h
- Committer:
- x1dmoesc
- Date:
- 2020-04-23
- Revision:
- 3:9cf83f16c17d
- Parent:
- 2:cb90c271c412
File content as of revision 3:9cf83f16c17d:
#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 = true;
static const bool NACK = false;
static const bool INTERRUPT = false;
static const bool WAIT_SEC = 10e-6;
// Register Adress
static const int HARD_ADR = 0x50;
static const int USER_ADR_MASK = 0x07;
struct{
static const uint8_t CS0 = 0x01;
static const uint8_t CS1 = 0x02;
static const uint8_t CS2 = 0x04;
static const uint8_t CS3 = 0x08;
}CMD_RW;
static const int ADR_SPI_CONF = 0xF0;
struct{
static const int WRITE = 0xF4;
static const int READ = 0xF5;
static const int EN = 0xF6;
static const int CONF = 0xF7;
}ADR_GPIO;
//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
struct{
static const int MSB = 0; // MSB of the data word is transmitted first
static const int LSB = 1; // LSB of the data word is transmitted first
}SPI_BITORDER;
// 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;
// Bit position of Register GPIO Enable
struct{
static const int CS0 = 0;
static const int CS1 = 1;
static const int CS2 = 2;
static const int CS3 = 3;
}GPIO;
// 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(uint8_t uiCS, char cAdrByte, char *cDataBytes, uint8_t uiNum);
bool readViaSPI(uint8_t uiCS, char cAdrByte, char *cDataBytes, uint8_t uiNum);
//void setIntFuncPtr( bool (*Int_ptr)(void));
protected: // 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 = "");
void waitFor(bool bInt);
bool getInt();
bool clearInt();
//bool (*getInt_ptr)(void);
// 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];
int iTimeOut;
};
#endif