Forked from romilly. Changed the way SPI handler is injected in constructor
Fork of MCP23S17 by
MCP23S17.h
- Committer:
- wyunreal
- Date:
- 2014-03-02
- Revision:
- 10:ca0429a15915
- Parent:
- 9:068b1e8909bb
File content as of revision 10:ca0429a15915:
/* 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.4
*/
#include "mbed.h"
#ifndef MCP23S17_H
#define MCP23S17_H
#define INTERRUPT_POLARITY_BIT 0x02
#define INTERRUPT_MIRROR_BIT 0x40
// all register addresses assume IOCON.BANK = 0 (POR default)
#define IODIRA 0x00
#define GPINTENA 0x04
#define DEFVALA 0x06
#define INTCONA 0x08
#define IOCON 0x0A
#define GPPUA 0x0C
#define GPIOA 0x12
#define OLATA 0x14
// Control settings
#define IOCON_BANK 0x80 // Banked registers
#define IOCON_BYTE_MODE 0x20 // Disables sequential operation. If bank = 0, operations toggle between A and B registers
#define IOCON_HAEN 0x08 // Hardware address enable
enum Polarity { ACTIVE_LOW , ACTIVE_HIGH };
enum Port { PORT_A, PORT_B };
class MCP23S17 {
public:
MCP23S17(SPI* spi, PinName ncs, char writeOpcode);
void direction(Port port, char direction);
void configurePullUps(Port port, char offOrOn);
void interruptEnable(Port port, char interruptsEnabledMask);
void interruptPolarity(Polarity polarity);
void mirrorInterrupts(bool mirror);
void defaultValue(Port port, char valuesToCompare);
void interruptControl(Port port, char interruptContolBits);
char read(Port port);
void write(Port port, char byte);
protected:
SPI* _spi;
DigitalOut _ncs;
void _init();
void _write(Port port, char address, char data);
void _write(char address, char data);
char _read(Port port, char address);
char _read(char address);
char _readOpcode;
char _writeOpcode;
};
#endif
