-extracredit

Dependencies:   mbed

Committer:
sheldonfernandes2404
Date:
Wed Jan 28 04:08:50 2015 +0000
Revision:
0:574e155464d5
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sheldonfernandes2404 0:574e155464d5 1 /* MCP23S17 - drive the Microchip MCP23S17 16-bit Port Extender using SPI
sheldonfernandes2404 0:574e155464d5 2 * Copyright (c) 2010 Romilly Cocking
sheldonfernandes2404 0:574e155464d5 3 * Released under the MIT License: http://mbed.org/license/mit
sheldonfernandes2404 0:574e155464d5 4 *
sheldonfernandes2404 0:574e155464d5 5 * version 0.4
sheldonfernandes2404 0:574e155464d5 6 */
sheldonfernandes2404 0:574e155464d5 7 #include "mbed.h"
sheldonfernandes2404 0:574e155464d5 8
sheldonfernandes2404 0:574e155464d5 9 #ifndef MCP23S17_H
sheldonfernandes2404 0:574e155464d5 10 #define MCP23S17_H
sheldonfernandes2404 0:574e155464d5 11
sheldonfernandes2404 0:574e155464d5 12 #define INTERRUPT_POLARITY_BIT 0x02
sheldonfernandes2404 0:574e155464d5 13 #define INTERRUPT_MIRROR_BIT 0x40
sheldonfernandes2404 0:574e155464d5 14
sheldonfernandes2404 0:574e155464d5 15 // all register addresses assume IOCON.BANK = 0 (POR default)
sheldonfernandes2404 0:574e155464d5 16
sheldonfernandes2404 0:574e155464d5 17 #define IODIRA 0x00
sheldonfernandes2404 0:574e155464d5 18 #define GPINTENA 0x04
sheldonfernandes2404 0:574e155464d5 19 #define DEFVALA 0x06
sheldonfernandes2404 0:574e155464d5 20 #define INTCONA 0x08
sheldonfernandes2404 0:574e155464d5 21 #define IOCON 0x0A
sheldonfernandes2404 0:574e155464d5 22 #define GPPUA 0x0C
sheldonfernandes2404 0:574e155464d5 23 #define GPIOA 0x12
sheldonfernandes2404 0:574e155464d5 24 #define OLATA 0x14
sheldonfernandes2404 0:574e155464d5 25
sheldonfernandes2404 0:574e155464d5 26 // Control settings
sheldonfernandes2404 0:574e155464d5 27
sheldonfernandes2404 0:574e155464d5 28 #define IOCON_BANK 0x80 // Banked registers
sheldonfernandes2404 0:574e155464d5 29 #define IOCON_BYTE_MODE 0x20 // Disables sequential operation. If bank = 0, operations toggle between A and B registers
sheldonfernandes2404 0:574e155464d5 30 #define IOCON_HAEN 0x08 // Hardware address enable
sheldonfernandes2404 0:574e155464d5 31
sheldonfernandes2404 0:574e155464d5 32 enum Polarity { ACTIVE_LOW , ACTIVE_HIGH };
sheldonfernandes2404 0:574e155464d5 33 enum Port { PORT_A, PORT_B };
sheldonfernandes2404 0:574e155464d5 34
sheldonfernandes2404 0:574e155464d5 35 class MCP23S17 {
sheldonfernandes2404 0:574e155464d5 36 public:
sheldonfernandes2404 0:574e155464d5 37 MCP23S17(SPI& spi, PinName ncs, char writeOpcode);
sheldonfernandes2404 0:574e155464d5 38 void direction(Port port, char direction);
sheldonfernandes2404 0:574e155464d5 39 void configurePullUps(Port port, char offOrOn);
sheldonfernandes2404 0:574e155464d5 40 void interruptEnable(Port port, char interruptsEnabledMask);
sheldonfernandes2404 0:574e155464d5 41 void interruptPolarity(Polarity polarity);
sheldonfernandes2404 0:574e155464d5 42 void mirrorInterrupts(bool mirror);
sheldonfernandes2404 0:574e155464d5 43 void defaultValue(Port port, char valuesToCompare);
sheldonfernandes2404 0:574e155464d5 44 void interruptControl(Port port, char interruptContolBits);
sheldonfernandes2404 0:574e155464d5 45 char read(Port port);
sheldonfernandes2404 0:574e155464d5 46 void write(Port port, char byte);
sheldonfernandes2404 0:574e155464d5 47 protected:
sheldonfernandes2404 0:574e155464d5 48 SPI& _spi;
sheldonfernandes2404 0:574e155464d5 49 DigitalOut _ncs;
sheldonfernandes2404 0:574e155464d5 50 void _init();
sheldonfernandes2404 0:574e155464d5 51 void _write(Port port, char address, char data);
sheldonfernandes2404 0:574e155464d5 52 void _write(char address, char data);
sheldonfernandes2404 0:574e155464d5 53 char _read(Port port, char address);
sheldonfernandes2404 0:574e155464d5 54 char _read(char address);
sheldonfernandes2404 0:574e155464d5 55 char _readOpcode;
sheldonfernandes2404 0:574e155464d5 56 char _writeOpcode;
sheldonfernandes2404 0:574e155464d5 57 };
sheldonfernandes2404 0:574e155464d5 58
sheldonfernandes2404 0:574e155464d5 59 #endif