Controll MCP23S17 as GPIO

Committer:
ryood
Date:
Sun Oct 30 14:17:37 2016 +0000
Revision:
3:aaea541bdbf9
Child:
4:4a8ba9d9926b
Impl. ExioMcp23s17DigitalIn

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 3:aaea541bdbf9 1 /*
ryood 3:aaea541bdbf9 2 * ExioDigitalIn.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 3:aaea541bdbf9 16 ExioMcp23s17DigitalIn(ExioMcp23s17& _device, ExioPort _port, int _pin) :
ryood 3:aaea541bdbf9 17 device(_device),
ryood 3:aaea541bdbf9 18 port(_port),
ryood 3:aaea541bdbf9 19 pin(_pin)
ryood 3:aaea541bdbf9 20 {
ryood 3:aaea541bdbf9 21 // set as input
ryood 3:aaea541bdbf9 22 uint8_t tmp = device.ioDirection(port);
ryood 3:aaea541bdbf9 23 device.ioDirection(port, tmp | (1 << pin));
ryood 3:aaea541bdbf9 24 //printf("pin:%d port:%d %d\r\n", pin, port, device.ioDirection(port));
ryood 3:aaea541bdbf9 25 }
ryood 3:aaea541bdbf9 26
ryood 3:aaea541bdbf9 27 void mode(PinMode pull)
ryood 3:aaea541bdbf9 28 {
ryood 3:aaea541bdbf9 29 uint8_t tmp = device.ioPullup(port);
ryood 3:aaea541bdbf9 30 switch (pull) {
ryood 3:aaea541bdbf9 31 case PullUp:
ryood 3:aaea541bdbf9 32 device.ioPullup(port, tmp | (1 << pin));
ryood 3:aaea541bdbf9 33 break;
ryood 3:aaea541bdbf9 34 case PullNone:
ryood 3:aaea541bdbf9 35 device.ioPullup(port, tmp & ~(1 << pin));
ryood 3:aaea541bdbf9 36 break;
ryood 3:aaea541bdbf9 37 default:
ryood 3:aaea541bdbf9 38 error("PinMode must be PullUp or PullNone");
ryood 3:aaea541bdbf9 39 }
ryood 3:aaea541bdbf9 40 }
ryood 3:aaea541bdbf9 41
ryood 3:aaea541bdbf9 42 int read()
ryood 3:aaea541bdbf9 43 {
ryood 3:aaea541bdbf9 44 uint8_t data = device.readPort(port);
ryood 3:aaea541bdbf9 45 int bv = data & (1 << pin);
ryood 3:aaea541bdbf9 46 return bv ? 1 : 0;
ryood 3:aaea541bdbf9 47 }
ryood 3:aaea541bdbf9 48
ryood 3:aaea541bdbf9 49 protected:
ryood 3:aaea541bdbf9 50 ExioMcp23s17 device;
ryood 3:aaea541bdbf9 51 ExioPort port;
ryood 3:aaea541bdbf9 52 int pin;
ryood 3:aaea541bdbf9 53 };
ryood 3:aaea541bdbf9 54
ryood 3:aaea541bdbf9 55 #endif //_EXIOMCP2317SDIGITALIN_H_