Controll MCP23S17 as GPIO

Committer:
ryood
Date:
Fri Nov 04 12:19:01 2016 +0000
Revision:
9:b0e9ec45a720
Parent:
4:4a8ba9d9926b
??????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 3:aaea541bdbf9 1 /*
ryood 4:4a8ba9d9926b 2 * ExioMcp23s17DigitalIn.h
ryood 3:aaea541bdbf9 3 *
ryood 3:aaea541bdbf9 4 * Created: 2016.10.30
ryood 3:aaea541bdbf9 5 *
ryood 3:aaea541bdbf9 6 */
ryood 3:aaea541bdbf9 7
ryood 3:aaea541bdbf9 8 #ifndef _EXIOMCP2317SDIGITALIN_H_
ryood 3:aaea541bdbf9 9 #define _EXIOMCP2317SDIGITALIN_H_
ryood 3:aaea541bdbf9 10
ryood 3:aaea541bdbf9 11 #include "mbed.h"
ryood 3:aaea541bdbf9 12 #include "ExioMcp23s17.h"
ryood 3:aaea541bdbf9 13
ryood 3:aaea541bdbf9 14 class ExioMcp23s17DigitalIn {
ryood 3:aaea541bdbf9 15 public:
ryood 9:b0e9ec45a720 16 ExioMcp23s17DigitalIn(ExioMcp23s17* _pDevice, ExioPort _port, int _pin) :
ryood 9:b0e9ec45a720 17 pDevice(_pDevice),
ryood 3:aaea541bdbf9 18 port(_port),
ryood 3:aaea541bdbf9 19 pin(_pin)
ryood 3:aaea541bdbf9 20 {
ryood 3:aaea541bdbf9 21 // set as input
ryood 9:b0e9ec45a720 22 uint8_t tmp = pDevice->ioDirection(port);
ryood 9:b0e9ec45a720 23 pDevice->ioDirection(port, tmp | (1 << pin));
ryood 3:aaea541bdbf9 24 }
ryood 3:aaea541bdbf9 25
ryood 3:aaea541bdbf9 26 void mode(PinMode pull)
ryood 3:aaea541bdbf9 27 {
ryood 9:b0e9ec45a720 28 uint8_t tmp = pDevice->ioPullup(port);
ryood 3:aaea541bdbf9 29 switch (pull) {
ryood 3:aaea541bdbf9 30 case PullUp:
ryood 9:b0e9ec45a720 31 pDevice->ioPullup(port, tmp | (1 << pin));
ryood 3:aaea541bdbf9 32 break;
ryood 3:aaea541bdbf9 33 case PullNone:
ryood 9:b0e9ec45a720 34 pDevice->ioPullup(port, tmp & ~(1 << pin));
ryood 3:aaea541bdbf9 35 break;
ryood 3:aaea541bdbf9 36 default:
ryood 3:aaea541bdbf9 37 error("PinMode must be PullUp or PullNone");
ryood 3:aaea541bdbf9 38 }
ryood 3:aaea541bdbf9 39 }
ryood 3:aaea541bdbf9 40
ryood 3:aaea541bdbf9 41 int read()
ryood 3:aaea541bdbf9 42 {
ryood 9:b0e9ec45a720 43 uint8_t data = pDevice->readPort(port);
ryood 3:aaea541bdbf9 44 int bv = data & (1 << pin);
ryood 3:aaea541bdbf9 45 return bv ? 1 : 0;
ryood 3:aaea541bdbf9 46 }
ryood 3:aaea541bdbf9 47
ryood 3:aaea541bdbf9 48 protected:
ryood 9:b0e9ec45a720 49 ExioMcp23s17* pDevice;
ryood 3:aaea541bdbf9 50 ExioPort port;
ryood 3:aaea541bdbf9 51 int pin;
ryood 3:aaea541bdbf9 52 };
ryood 3:aaea541bdbf9 53
ryood 3:aaea541bdbf9 54 #endif //_EXIOMCP2317SDIGITALIN_H_