toshi mura
/
NRP2020_main
gjyrjyykkudt
Diff: MCP/MCP.h
- Revision:
- 0:db8d4af513c0
- Child:
- 1:5b0303768126
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MCP/MCP.h Mon Jan 20 08:46:24 2020 +0000 @@ -0,0 +1,79 @@ +#ifndef MCP_H_ +#define MCP_H_ + +#include "mbed.h" + +#define SDA PB_7 +#define SCL PB_6 + +#define MCP_ADDRESS 0x40 + +// MCP register address +#define IODIRA 0x00 +#define IODIRB 0x01 +#define IPOLA 0x02 +#define IPOLB 0x03 +#define GPINTENA 0x04 +#define GPINTENB 0x05 +#define DEFVALA 0x06 +#define DEFVALB 0x07 +#define INTCONA 0x08 +#define INTCONB 0x09 +#define IOCONA 0x0A +#define IOCONB 0x0B +#define GPPUA 0x0C +#define GPPUB 0x0D +#define INTFA 0x0E +#define INTFB 0x0F +#define INTCAPA 0x10 +#define INTCAPB 0x11 +#define GPIOA 0x12 +#define GPIOB 0x13 +#define OLATA 0x14 +#define OLATB 0x15 + +typedef enum { + OUTPUT, + INPUT, + INPUT_PULLUP, +}pin_mode; + +typedef union { + uint8_t port_A, port_B; + uint16_t all; +}mcp_register; + +class MCP { + public: + /* MCP class constracter + / deffult Input + / */ + MCP(PinName sda, PinName scl, uint8_t device_address); + // MCP pin define * pin number is 0 ~ 15 + void PinMode(uint8_t pin, uint8_t mode); + // MCP DigitalWrite * pin number is 0 ~ 15 + void Write(uint8_t pin, bool signal); + // MCP DigitalRead * pin number is 0 ~ 15 + bool Read(uint8_t pin, bool signal); + // MCP initialize + void Initialize(void); + // MCP register update and read new data + void Update(void); + // i2c error check + bool ErrorOccurred(void); + + private: + I2C i2c; + char _read_opcode; + char _write_opcode; + + uint16_t _pull_data; + uint16_t _read_data; + uint16_t _write_data; + + void _Write(uint8_t address, uint8_t data); + void _Read(uint8_t address, uint8_t data); + +}; + +#endif //I2C_H_ \ No newline at end of file