Controll MCP23S17 as GPIO
ExioMcp23s17DigitalIn.h@3:aaea541bdbf9, 2016-10-30 (annotated)
- 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?
User | Revision | Line number | New 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_ |