Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MCP23S17 by
Diff: MCP23S17.cpp
- Revision:
- 7:53498e24592c
- Parent:
- 6:7b5e59c0e71c
- Child:
- 8:841b19734955
--- a/MCP23S17.cpp Sun Aug 22 12:41:26 2010 +0000
+++ b/MCP23S17.cpp Sun Aug 22 15:37:25 2010 +0000
@@ -1,64 +1,97 @@
-/* MCP23S17 - drive the Microchip MCP23S17 16-bit Port Extender using SPI
-* Copyright (c) 2010 Romilly Cocking
-* Released under the MIT License: http://mbed.org/license/mit
-*
-* version 0.1
-*/
-
-#include "mbed.h"
-#include "MCP23S17.h"
-
-MCP23S17::MCP23S17(SPI& spi, PinName ncs, char writeOpcode) : _spi(spi), _ncs(ncs) {
- _writeOpcode = writeOpcode;
- _readOpcode = _writeOpcode | 1; // low order bit = 1 for read
- _init();
-}
-
-char MCP23S17::_read(char address) {
- _ncs = 0;
- _spi.write(_readOpcode);
- _spi.write(address);
- char result = _spi.write(0);
- _ncs = 1;
- return result;
-}
-
-void MCP23S17::_write(char address, char data) {
- _ncs = 0;
- _spi.write(_writeOpcode);
- _spi.write(address);
- _spi.write(data);
- _ncs = 1;
-}
-
-void MCP23S17::_init() {
- _write(IOCON, (IOCON_BYTE_MODE | IOCON_HAEN )); // Hardware addressing on, operations toggle between A and B registers
-}
-
-void MCP23S17::directionA(char direction) {
- _write(IODIRA, direction);
-}
-
-void MCP23S17::directionB(char direction) {
- _write(IODIRB, direction);
-}
-
-void MCP23S17::gpIntEnA(char interruptsEnabledMask) {
- _write(GPINTENA, interruptsEnabledMask);
-}
-
-void MCP23S17::outputA(char byte) {
- _write(OLATA, byte);
-}
-
-void MCP23S17::outputB(char byte) {
- _write(OLATB, byte);
-}
-
-char MCP23S17::inputA() {
- return _read(GPIOA);
-}
-
-char MCP23S17::inputB() {
- return _read(GPIOB);
-}
+/* MCP23S17 - drive the Microchip MCP23S17 16-bit Port Extender using SPI
+* Copyright (c) 2010 Romilly Cocking
+* Released under the MIT License: http://mbed.org/license/mit
+*
+* version 0.2
+*/
+
+#include "mbed.h"
+#include "MCP23S17.h"
+
+MCP23S17::MCP23S17(SPI& spi, PinName ncs, char writeOpcode) : _spi(spi), _ncs(ncs) {
+ _writeOpcode = writeOpcode;
+ _readOpcode = _writeOpcode | 1; // low order bit = 1 for read
+ _init();
+}
+
+char MCP23S17::_read(char address) {
+ _ncs = 0;
+ _spi.write(_readOpcode);
+ _spi.write(address);
+ char result = _spi.write(0);
+ _ncs = 1;
+ return result;
+}
+
+void MCP23S17::_write(char address, char data) {
+ _ncs = 0;
+ _spi.write(_writeOpcode);
+ _spi.write(address);
+ _spi.write(data);
+ _ncs = 1;
+}
+
+void MCP23S17::_init() {
+ _write(IOCON, (IOCON_BYTE_MODE | IOCON_HAEN )); // Hardware addressing on, operations toggle between A and B registers
+}
+
+void MCP23S17::directionA(char direction) {
+ _write(IODIRA, direction);
+}
+
+void MCP23S17::directionB(char direction) {
+ _write(IODIRB, direction);
+}
+
+void MCP23S17::interruptEnableA(char interruptsEnabledMask) {
+ _write(GPINTENA, interruptsEnabledMask);
+}
+
+void MCP23S17::interruptEnableB(char interruptsEnabledMask) {
+ _write(GPINTENB, interruptsEnabledMask);
+}
+
+void MCP23S17::mirrorInterrupts(bool mirror) {
+ char iocon = _read(IOCON);
+ if (mirror) {
+ iocon = iocon | INTERRUPT_MIRROR_BIT;
+ } else {
+ iocon = iocon & ~INTERRUPT_MIRROR_BIT;
+ }
+ _write(IOCON, iocon);
+
+}
+
+void MCP23S17::interruptPolarity(Polarity polarity) {
+ char iocon = _read(IOCON);
+ if (polarity == ACTIVE_LOW) {
+ iocon = iocon & ~INTERRUPT_POLARITY_BIT;
+ } else {
+ iocon = iocon | INTERRUPT_POLARITY_BIT;
+ }
+ _write(IOCON, iocon);
+}
+
+void MCP23S17::defaultValueA(char valuesToCompare) {
+ _write(DEFVALA, valuesToCompare);
+}
+
+void MCP23S17::interruptControlA(char interruptContolBits) {
+ _write(INTCONA, interruptContolBits);
+}
+
+void MCP23S17::outputA(char byte) {
+ _write(OLATA, byte);
+}
+
+void MCP23S17::outputB(char byte) {
+ _write(OLATB, byte);
+}
+
+char MCP23S17::inputA() {
+ return _read(GPIOA);
+}
+
+char MCP23S17::inputB() {
+ return _read(GPIOB);
+}
