Controll MCP23S17 as GPIO
ExioMcp23s17DigitalIn.h@14:2073b80c69cd, 2016-11-04 (annotated)
- Committer:
- ryood
- Date:
- Fri Nov 04 16:09:03 2016 +0000
- Revision:
- 14:2073b80c69cd
- Parent:
- 9:b0e9ec45a720
keypad 4x4: Debounce
Who changed what in which revision?
User | Revision | Line number | New 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_ |