16-Bit I/O Expander with Serial Interface (SPI)

Dependents:   relaekort_til_motorstyring Nucleo_MCP23S17_Test BSM02 POT_V_1_1

Committer:
stjo2809
Date:
Wed Jan 20 10:49:02 2016 +0000
Revision:
3:b2a44e1e54b8
Parent:
2:b74bf9a31168
Version 2 (tested)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stjo2809 2:b74bf9a31168 1 /* mbed MCP23S17 Library, for driving the MCP23S17 16-Bit I/O Expander with Serial Interface (SPI)
stjo2809 2:b74bf9a31168 2 * Copyright (c) 2015, Created by Steen Joergensen (stjo2809) inspired by Romilly Cocking MCP23S17 library
stjo2809 2:b74bf9a31168 3 *
stjo2809 2:b74bf9a31168 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
stjo2809 2:b74bf9a31168 5 * of this software and associated documentation files (the "Software"), to deal
stjo2809 2:b74bf9a31168 6 * in the Software without restriction, including without limitation the rights
stjo2809 2:b74bf9a31168 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
stjo2809 2:b74bf9a31168 8 * copies of the Software, and to permit persons to whom the Software is
stjo2809 2:b74bf9a31168 9 * furnished to do so, subject to the following conditions:
stjo2809 2:b74bf9a31168 10 *
stjo2809 2:b74bf9a31168 11 * The above copyright notice and this permission notice shall be included in
stjo2809 2:b74bf9a31168 12 * all copies or substantial portions of the Software.
stjo2809 2:b74bf9a31168 13 *
stjo2809 2:b74bf9a31168 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
stjo2809 2:b74bf9a31168 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
stjo2809 2:b74bf9a31168 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
stjo2809 2:b74bf9a31168 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
stjo2809 2:b74bf9a31168 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
stjo2809 2:b74bf9a31168 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
stjo2809 2:b74bf9a31168 20 * THE SOFTWARE.
stjo2809 2:b74bf9a31168 21 */
stjo2809 2:b74bf9a31168 22
stjo2809 2:b74bf9a31168 23 #include "mbed.h"
stjo2809 2:b74bf9a31168 24 #include "MCP23S17.h"
stjo2809 2:b74bf9a31168 25
stjo2809 2:b74bf9a31168 26 //=============================================================================
stjo2809 2:b74bf9a31168 27 // Public functions
stjo2809 2:b74bf9a31168 28 //=============================================================================
stjo2809 2:b74bf9a31168 29
stjo2809 2:b74bf9a31168 30 MCP23S17::MCP23S17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset) : _hardwareaddress(hardwareaddress), _spi(spi), _nCs(nCs), _nReset(nReset)
stjo2809 2:b74bf9a31168 31 {
stjo2809 2:b74bf9a31168 32 _make_opcode(_hardwareaddress);
stjo2809 2:b74bf9a31168 33 _initialization();
stjo2809 2:b74bf9a31168 34 }
stjo2809 2:b74bf9a31168 35
stjo2809 2:b74bf9a31168 36 MCP23S17::MCP23S17(int hardwareaddress, SPI& spi, PinName nCs) : _hardwareaddress(hardwareaddress), _spi(spi), _nCs(nCs), _nReset(NC) // _nReset(NC) added for the compiler
stjo2809 2:b74bf9a31168 37 {
stjo2809 2:b74bf9a31168 38 _make_opcode(_hardwareaddress);
stjo2809 2:b74bf9a31168 39 _initialization();
stjo2809 2:b74bf9a31168 40 }
stjo2809 2:b74bf9a31168 41
stjo2809 2:b74bf9a31168 42 char MCP23S17::read(char reg_address)
stjo2809 2:b74bf9a31168 43 {
stjo2809 2:b74bf9a31168 44 return _read(reg_address);
stjo2809 2:b74bf9a31168 45 }
stjo2809 2:b74bf9a31168 46
stjo2809 2:b74bf9a31168 47 void MCP23S17::write(char reg_address, char data)
stjo2809 2:b74bf9a31168 48 {
stjo2809 2:b74bf9a31168 49 _write(reg_address, data);
stjo2809 2:b74bf9a31168 50 }
stjo2809 2:b74bf9a31168 51
stjo2809 2:b74bf9a31168 52 void MCP23S17::bit(char reg_address, int bitnumber, bool high_low)
stjo2809 2:b74bf9a31168 53 {
stjo2809 2:b74bf9a31168 54 char i;
stjo2809 2:b74bf9a31168 55
stjo2809 2:b74bf9a31168 56 if(bitnumber >= 1 || bitnumber <= 8)
stjo2809 2:b74bf9a31168 57 {
stjo2809 2:b74bf9a31168 58 if(high_low == 1)
stjo2809 2:b74bf9a31168 59 {
stjo2809 2:b74bf9a31168 60 i = _read(reg_address);
stjo2809 2:b74bf9a31168 61 i = i | (0x01 << (bitnumber-1));
stjo2809 2:b74bf9a31168 62 _write(reg_address, i);
stjo2809 2:b74bf9a31168 63 }
stjo2809 2:b74bf9a31168 64 if(high_low == 0)
stjo2809 2:b74bf9a31168 65 {
stjo2809 2:b74bf9a31168 66 i = _read(reg_address);
stjo2809 2:b74bf9a31168 67 i = i & ~(0x01 << (bitnumber-1));
stjo2809 2:b74bf9a31168 68 _write(reg_address, i);
stjo2809 2:b74bf9a31168 69 }
stjo2809 2:b74bf9a31168 70 }
stjo2809 2:b74bf9a31168 71 }
stjo2809 2:b74bf9a31168 72
stjo2809 2:b74bf9a31168 73 void MCP23S17::reset()
stjo2809 2:b74bf9a31168 74 {
stjo2809 2:b74bf9a31168 75 _nReset = 0;
stjo2809 2:b74bf9a31168 76 wait_us(5);
stjo2809 2:b74bf9a31168 77 _nReset = 1;
stjo2809 2:b74bf9a31168 78 _initialization();
stjo2809 2:b74bf9a31168 79 }
stjo2809 2:b74bf9a31168 80
stjo2809 2:b74bf9a31168 81 char MCP23S17::iodira()
stjo2809 2:b74bf9a31168 82 {
stjo2809 2:b74bf9a31168 83 return _read(IODIRA_ADDR);
stjo2809 2:b74bf9a31168 84 }
stjo2809 2:b74bf9a31168 85
stjo2809 2:b74bf9a31168 86 void MCP23S17::iodira(char data)
stjo2809 2:b74bf9a31168 87 {
stjo2809 2:b74bf9a31168 88 _write(IODIRA_ADDR, data);
stjo2809 2:b74bf9a31168 89 }
stjo2809 2:b74bf9a31168 90
stjo2809 2:b74bf9a31168 91 char MCP23S17::iodirb()
stjo2809 2:b74bf9a31168 92 {
stjo2809 2:b74bf9a31168 93 return _read(IODIRB_ADDR);
stjo2809 2:b74bf9a31168 94 }
stjo2809 2:b74bf9a31168 95
stjo2809 2:b74bf9a31168 96 void MCP23S17::iodirb(char data)
stjo2809 2:b74bf9a31168 97 {
stjo2809 2:b74bf9a31168 98 _write(IODIRB_ADDR, data);
stjo2809 2:b74bf9a31168 99 }
stjo2809 2:b74bf9a31168 100
stjo2809 2:b74bf9a31168 101 char MCP23S17::ipola()
stjo2809 2:b74bf9a31168 102 {
stjo2809 2:b74bf9a31168 103 return _read(IPOLA_ADDR);
stjo2809 2:b74bf9a31168 104 }
stjo2809 2:b74bf9a31168 105
stjo2809 2:b74bf9a31168 106 void MCP23S17::ipola(char data)
stjo2809 2:b74bf9a31168 107 {
stjo2809 2:b74bf9a31168 108 _write(IPOLA_ADDR, data);
stjo2809 2:b74bf9a31168 109 }
stjo2809 2:b74bf9a31168 110
stjo2809 2:b74bf9a31168 111 char MCP23S17::ipolb()
stjo2809 2:b74bf9a31168 112 {
stjo2809 2:b74bf9a31168 113 return _read(IPOLB_ADDR);
stjo2809 2:b74bf9a31168 114 }
stjo2809 2:b74bf9a31168 115
stjo2809 2:b74bf9a31168 116 void MCP23S17::ipolb(char data)
stjo2809 2:b74bf9a31168 117 {
stjo2809 2:b74bf9a31168 118 _write(IPOLB_ADDR, data);
stjo2809 2:b74bf9a31168 119 }
stjo2809 2:b74bf9a31168 120
stjo2809 2:b74bf9a31168 121 char MCP23S17::gpintena()
stjo2809 2:b74bf9a31168 122 {
stjo2809 2:b74bf9a31168 123 return _read(GPINTENA_ADDR);
stjo2809 2:b74bf9a31168 124 }
stjo2809 2:b74bf9a31168 125
stjo2809 2:b74bf9a31168 126 void MCP23S17::gpintena(char data)
stjo2809 2:b74bf9a31168 127 {
stjo2809 2:b74bf9a31168 128 _write(GPINTENA_ADDR, data);
stjo2809 2:b74bf9a31168 129 }
stjo2809 2:b74bf9a31168 130
stjo2809 2:b74bf9a31168 131 char MCP23S17::gpintenb()
stjo2809 2:b74bf9a31168 132 {
stjo2809 2:b74bf9a31168 133 return _read(GPINTENB_ADDR);
stjo2809 2:b74bf9a31168 134 }
stjo2809 2:b74bf9a31168 135
stjo2809 2:b74bf9a31168 136 void MCP23S17::gpintenb(char data)
stjo2809 2:b74bf9a31168 137 {
stjo2809 2:b74bf9a31168 138 _write(GPINTENB_ADDR, data);
stjo2809 2:b74bf9a31168 139 }
stjo2809 2:b74bf9a31168 140
stjo2809 2:b74bf9a31168 141 char MCP23S17::defvala()
stjo2809 2:b74bf9a31168 142 {
stjo2809 2:b74bf9a31168 143 return _read(DEFVALA_ADDR);
stjo2809 2:b74bf9a31168 144 }
stjo2809 2:b74bf9a31168 145
stjo2809 2:b74bf9a31168 146 void MCP23S17::defvala(char data)
stjo2809 2:b74bf9a31168 147 {
stjo2809 2:b74bf9a31168 148 _write(DEFVALA_ADDR, data);
stjo2809 2:b74bf9a31168 149 }
stjo2809 2:b74bf9a31168 150
stjo2809 2:b74bf9a31168 151 char MCP23S17::defvalb()
stjo2809 2:b74bf9a31168 152 {
stjo2809 2:b74bf9a31168 153 return _read(DEFVALB_ADDR);
stjo2809 2:b74bf9a31168 154 }
stjo2809 2:b74bf9a31168 155
stjo2809 2:b74bf9a31168 156 void MCP23S17::defvalb(char data)
stjo2809 2:b74bf9a31168 157 {
stjo2809 2:b74bf9a31168 158 _write(DEFVALB_ADDR, data);
stjo2809 2:b74bf9a31168 159 }
stjo2809 2:b74bf9a31168 160
stjo2809 2:b74bf9a31168 161 char MCP23S17::intcona()
stjo2809 2:b74bf9a31168 162 {
stjo2809 2:b74bf9a31168 163 return _read(INTCONA_ADDR);
stjo2809 2:b74bf9a31168 164 }
stjo2809 2:b74bf9a31168 165
stjo2809 2:b74bf9a31168 166 void MCP23S17::intcona(char data)
stjo2809 2:b74bf9a31168 167 {
stjo2809 2:b74bf9a31168 168 _write(INTCONA_ADDR, data);
stjo2809 2:b74bf9a31168 169 }
stjo2809 2:b74bf9a31168 170
stjo2809 2:b74bf9a31168 171 char MCP23S17::intconb()
stjo2809 2:b74bf9a31168 172 {
stjo2809 2:b74bf9a31168 173 return _read(INTCONB_ADDR);
stjo2809 2:b74bf9a31168 174 }
stjo2809 2:b74bf9a31168 175
stjo2809 2:b74bf9a31168 176 void MCP23S17::intconb(char data)
stjo2809 2:b74bf9a31168 177 {
stjo2809 2:b74bf9a31168 178 _write(INTCONB_ADDR, data);
stjo2809 2:b74bf9a31168 179 }
stjo2809 2:b74bf9a31168 180
stjo2809 2:b74bf9a31168 181 char MCP23S17::iocon()
stjo2809 2:b74bf9a31168 182 {
stjo2809 2:b74bf9a31168 183 return _read(IOCON_ADDR);
stjo2809 2:b74bf9a31168 184 }
stjo2809 2:b74bf9a31168 185
stjo2809 2:b74bf9a31168 186 void MCP23S17::iocon(char data)
stjo2809 2:b74bf9a31168 187 {
stjo2809 2:b74bf9a31168 188 _write(IOCON_ADDR, data);
stjo2809 2:b74bf9a31168 189 }
stjo2809 2:b74bf9a31168 190
stjo2809 2:b74bf9a31168 191 char MCP23S17::gppua()
stjo2809 2:b74bf9a31168 192 {
stjo2809 2:b74bf9a31168 193 return _read(GPPUA_ADDR);
stjo2809 2:b74bf9a31168 194 }
stjo2809 2:b74bf9a31168 195
stjo2809 2:b74bf9a31168 196 void MCP23S17::gppua(char data)
stjo2809 2:b74bf9a31168 197 {
stjo2809 2:b74bf9a31168 198 _write(GPPUA_ADDR, data);
stjo2809 2:b74bf9a31168 199 }
stjo2809 2:b74bf9a31168 200
stjo2809 2:b74bf9a31168 201 char MCP23S17::gppub()
stjo2809 2:b74bf9a31168 202 {
stjo2809 2:b74bf9a31168 203 return _read(GPPUB_ADDR);
stjo2809 2:b74bf9a31168 204 }
stjo2809 2:b74bf9a31168 205
stjo2809 2:b74bf9a31168 206 void MCP23S17::gppub(char data)
stjo2809 2:b74bf9a31168 207 {
stjo2809 2:b74bf9a31168 208 _write(GPPUB_ADDR, data);
stjo2809 2:b74bf9a31168 209 }
stjo2809 2:b74bf9a31168 210
stjo2809 2:b74bf9a31168 211 char MCP23S17::intfa()
stjo2809 2:b74bf9a31168 212 {
stjo2809 2:b74bf9a31168 213 return _read(INTFA_ADDR);
stjo2809 2:b74bf9a31168 214 }
stjo2809 2:b74bf9a31168 215
stjo2809 2:b74bf9a31168 216 char MCP23S17::intfb()
stjo2809 2:b74bf9a31168 217 {
stjo2809 2:b74bf9a31168 218 return _read(INTFB_ADDR);
stjo2809 2:b74bf9a31168 219 }
stjo2809 2:b74bf9a31168 220
stjo2809 2:b74bf9a31168 221 char MCP23S17::intcapa()
stjo2809 2:b74bf9a31168 222 {
stjo2809 2:b74bf9a31168 223 return _read(INTCAPA_ADDR);
stjo2809 2:b74bf9a31168 224 }
stjo2809 2:b74bf9a31168 225
stjo2809 2:b74bf9a31168 226 char MCP23S17::intcapb()
stjo2809 2:b74bf9a31168 227 {
stjo2809 2:b74bf9a31168 228 return _read(INTCAPB_ADDR);
stjo2809 2:b74bf9a31168 229 }
stjo2809 2:b74bf9a31168 230
stjo2809 2:b74bf9a31168 231 char MCP23S17::gpioa()
stjo2809 2:b74bf9a31168 232 {
stjo2809 2:b74bf9a31168 233 return _read(GPIOA_ADDR);
stjo2809 2:b74bf9a31168 234 }
stjo2809 2:b74bf9a31168 235
stjo2809 2:b74bf9a31168 236 void MCP23S17::gpioa(char data)
stjo2809 2:b74bf9a31168 237 {
stjo2809 2:b74bf9a31168 238 _write(GPIOA_ADDR, data);
stjo2809 2:b74bf9a31168 239 }
stjo2809 2:b74bf9a31168 240
stjo2809 2:b74bf9a31168 241 char MCP23S17::gpiob()
stjo2809 2:b74bf9a31168 242 {
stjo2809 2:b74bf9a31168 243 return _read(GPIOB_ADDR);
stjo2809 2:b74bf9a31168 244 }
stjo2809 2:b74bf9a31168 245
stjo2809 2:b74bf9a31168 246 void MCP23S17::gpiob(char data)
stjo2809 2:b74bf9a31168 247 {
stjo2809 2:b74bf9a31168 248 _write(GPIOB_ADDR, data);
stjo2809 2:b74bf9a31168 249 }
stjo2809 2:b74bf9a31168 250
stjo2809 2:b74bf9a31168 251 char MCP23S17::olata()
stjo2809 2:b74bf9a31168 252 {
stjo2809 2:b74bf9a31168 253 return _read(OLATA_ADDR);
stjo2809 2:b74bf9a31168 254 }
stjo2809 2:b74bf9a31168 255
stjo2809 2:b74bf9a31168 256 void MCP23S17::olata(char data)
stjo2809 2:b74bf9a31168 257 {
stjo2809 2:b74bf9a31168 258 _write(OLATA_ADDR, data);
stjo2809 2:b74bf9a31168 259 }
stjo2809 2:b74bf9a31168 260
stjo2809 2:b74bf9a31168 261 char MCP23S17::olatb()
stjo2809 2:b74bf9a31168 262 {
stjo2809 2:b74bf9a31168 263 return _read(OLATB_ADDR);
stjo2809 2:b74bf9a31168 264 }
stjo2809 2:b74bf9a31168 265
stjo2809 2:b74bf9a31168 266 void MCP23S17::olatb(char data)
stjo2809 2:b74bf9a31168 267 {
stjo2809 2:b74bf9a31168 268 _write(OLATB_ADDR, data);
stjo2809 2:b74bf9a31168 269 }
stjo2809 2:b74bf9a31168 270
stjo2809 2:b74bf9a31168 271 void MCP23S17::intmirror(bool mirror)
stjo2809 2:b74bf9a31168 272 {
stjo2809 2:b74bf9a31168 273 char kopi_iocon = _read(IOCON_ADDR);
stjo2809 2:b74bf9a31168 274 if (mirror)
stjo2809 2:b74bf9a31168 275 {
stjo2809 2:b74bf9a31168 276 kopi_iocon = kopi_iocon | INTERRUPT_MIRROR_BIT;
stjo2809 2:b74bf9a31168 277 }
stjo2809 2:b74bf9a31168 278 else
stjo2809 2:b74bf9a31168 279 {
stjo2809 2:b74bf9a31168 280 kopi_iocon = kopi_iocon & ~INTERRUPT_MIRROR_BIT;
stjo2809 2:b74bf9a31168 281 }
stjo2809 2:b74bf9a31168 282 _write(IOCON_ADDR, kopi_iocon);
stjo2809 2:b74bf9a31168 283 }
stjo2809 2:b74bf9a31168 284
stjo2809 2:b74bf9a31168 285 void MCP23S17::intpol(bool polarity)
stjo2809 2:b74bf9a31168 286 {
stjo2809 2:b74bf9a31168 287 char kopi_iocon = _read(IOCON_ADDR);
stjo2809 2:b74bf9a31168 288 if (polarity == false)
stjo2809 2:b74bf9a31168 289 {
stjo2809 2:b74bf9a31168 290 kopi_iocon = kopi_iocon | INTERRUPT_POLARITY_BIT;
stjo2809 2:b74bf9a31168 291 }
stjo2809 2:b74bf9a31168 292 else
stjo2809 2:b74bf9a31168 293 {
stjo2809 2:b74bf9a31168 294 kopi_iocon = kopi_iocon & ~INTERRUPT_POLARITY_BIT;
stjo2809 2:b74bf9a31168 295 }
stjo2809 2:b74bf9a31168 296 _write(IOCON_ADDR, kopi_iocon);
stjo2809 2:b74bf9a31168 297 }
stjo2809 2:b74bf9a31168 298
stjo2809 2:b74bf9a31168 299 //=============================================================================
stjo2809 2:b74bf9a31168 300 // Private functions
stjo2809 2:b74bf9a31168 301 //=============================================================================
stjo2809 2:b74bf9a31168 302
stjo2809 2:b74bf9a31168 303 void MCP23S17::_initialization()
stjo2809 2:b74bf9a31168 304 {
stjo2809 2:b74bf9a31168 305 _write(IOCON_ADDR, 0x2A); // setup af control register (BANK = 0, MIRROR = 0, SEQOP = 1, DISSLW = 0, HAEN = 1, ODR = 0, INTPOL = 1, NC = 0)
stjo2809 3:b2a44e1e54b8 306 _nCs = 1;
stjo2809 2:b74bf9a31168 307 }
stjo2809 2:b74bf9a31168 308
stjo2809 2:b74bf9a31168 309 void MCP23S17::_make_opcode(int _hardwareaddress)
stjo2809 2:b74bf9a31168 310 {
stjo2809 2:b74bf9a31168 311 switch(_hardwareaddress)
stjo2809 2:b74bf9a31168 312 {
stjo2809 2:b74bf9a31168 313 case 0:
stjo2809 2:b74bf9a31168 314 _writeopcode = 0x40;
stjo2809 2:b74bf9a31168 315 _readopcode = 0x41;
stjo2809 2:b74bf9a31168 316 break;
stjo2809 2:b74bf9a31168 317
stjo2809 2:b74bf9a31168 318 case 1:
stjo2809 2:b74bf9a31168 319 _writeopcode = 0x42;
stjo2809 2:b74bf9a31168 320 _readopcode = 0x43;
stjo2809 2:b74bf9a31168 321 break;
stjo2809 2:b74bf9a31168 322
stjo2809 2:b74bf9a31168 323 case 2:
stjo2809 2:b74bf9a31168 324 _writeopcode = 0x44;
stjo2809 2:b74bf9a31168 325 _readopcode = 0x45;
stjo2809 2:b74bf9a31168 326 break;
stjo2809 2:b74bf9a31168 327
stjo2809 2:b74bf9a31168 328 case 3:
stjo2809 2:b74bf9a31168 329 _writeopcode = 0x46;
stjo2809 2:b74bf9a31168 330 _readopcode = 0x47;
stjo2809 2:b74bf9a31168 331 break;
stjo2809 2:b74bf9a31168 332
stjo2809 2:b74bf9a31168 333 case 4:
stjo2809 2:b74bf9a31168 334 _writeopcode = 0x48;
stjo2809 2:b74bf9a31168 335 _readopcode = 0x49;
stjo2809 2:b74bf9a31168 336 break;
stjo2809 2:b74bf9a31168 337
stjo2809 2:b74bf9a31168 338 case 5:
stjo2809 2:b74bf9a31168 339 _writeopcode = 0x4A;
stjo2809 2:b74bf9a31168 340 _readopcode = 0x4B;
stjo2809 2:b74bf9a31168 341 break;
stjo2809 2:b74bf9a31168 342
stjo2809 2:b74bf9a31168 343 case 6:
stjo2809 2:b74bf9a31168 344 _writeopcode = 0x4C;
stjo2809 2:b74bf9a31168 345 _readopcode = 0x4D;
stjo2809 2:b74bf9a31168 346 break;
stjo2809 2:b74bf9a31168 347
stjo2809 2:b74bf9a31168 348 case 7:
stjo2809 2:b74bf9a31168 349 _writeopcode = 0x4E;
stjo2809 2:b74bf9a31168 350 _readopcode = 0x4F;
stjo2809 2:b74bf9a31168 351 break;
stjo2809 2:b74bf9a31168 352 }
stjo2809 2:b74bf9a31168 353 }
stjo2809 2:b74bf9a31168 354
stjo2809 2:b74bf9a31168 355 char MCP23S17::_read(char address)
stjo2809 2:b74bf9a31168 356 {
stjo2809 2:b74bf9a31168 357 _nCs = 0;
stjo2809 2:b74bf9a31168 358 _spi.write(_readopcode);
stjo2809 2:b74bf9a31168 359 _spi.write(address);
stjo2809 2:b74bf9a31168 360 char response = _spi.write(0xFF); // 0xFF data to get response
stjo2809 2:b74bf9a31168 361 _nCs = 1;
stjo2809 2:b74bf9a31168 362 return response;
stjo2809 2:b74bf9a31168 363 }
stjo2809 2:b74bf9a31168 364
stjo2809 2:b74bf9a31168 365 void MCP23S17::_write(char address, char data)
stjo2809 2:b74bf9a31168 366 {
stjo2809 2:b74bf9a31168 367 _nCs = 0;
stjo2809 2:b74bf9a31168 368 _spi.write(_writeopcode);
stjo2809 2:b74bf9a31168 369 _spi.write(address);
stjo2809 2:b74bf9a31168 370 _spi.write(data);
stjo2809 2:b74bf9a31168 371 _nCs = 1;
stjo2809 2:b74bf9a31168 372 }
stjo2809 2:b74bf9a31168 373