Library for MAX7300 GPIO Expander

Dependents:   MAX14871_Shield

Committer:
j3
Date:
Wed Jul 15 15:10:04 2015 +0000
Revision:
0:350a850a7191
Child:
1:e1ee2549a047
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 0:350a850a7191 1 /******************************************************************//**
j3 0:350a850a7191 2 * @file max7300.h
j3 0:350a850a7191 3 *
j3 0:350a850a7191 4 * @author Justin Jordan
j3 0:350a850a7191 5 *
j3 0:350a850a7191 6 * @version 0.0
j3 0:350a850a7191 7 *
j3 0:350a850a7191 8 * Started: 14JUL15
j3 0:350a850a7191 9 *
j3 0:350a850a7191 10 * Updated:
j3 0:350a850a7191 11 *
j3 0:350a850a7191 12 * @brief Header file for Max7300 class
j3 0:350a850a7191 13 *
j3 0:350a850a7191 14 ***********************************************************************
j3 0:350a850a7191 15 * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
j3 0:350a850a7191 16 *
j3 0:350a850a7191 17 * Permission is hereby granted, free of charge, to any person obtaining a
j3 0:350a850a7191 18 * copy of this software and associated documentation files (the "Software"),
j3 0:350a850a7191 19 * to deal in the Software without restriction, including without limitation
j3 0:350a850a7191 20 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 0:350a850a7191 21 * and/or sell copies of the Software, and to permit persons to whom the
j3 0:350a850a7191 22 * Software is furnished to do so, subject to the following conditions:
j3 0:350a850a7191 23 *
j3 0:350a850a7191 24 * The above copyright notice and this permission notice shall be included
j3 0:350a850a7191 25 * in all copies or substantial portions of the Software.
j3 0:350a850a7191 26 *
j3 0:350a850a7191 27 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 0:350a850a7191 28 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 0:350a850a7191 29 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 0:350a850a7191 30 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 0:350a850a7191 31 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 0:350a850a7191 32 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 0:350a850a7191 33 * OTHER DEALINGS IN THE SOFTWARE.
j3 0:350a850a7191 34 *
j3 0:350a850a7191 35 * Except as contained in this notice, the name of Maxim Integrated
j3 0:350a850a7191 36 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 0:350a850a7191 37 * Products, Inc. Branding Policy.
j3 0:350a850a7191 38 *
j3 0:350a850a7191 39 * The mere transfer of this software does not imply any licenses
j3 0:350a850a7191 40 * of trade secrets, proprietary technology, copyrights, patents,
j3 0:350a850a7191 41 * trademarks, maskwork rights, or any other form of intellectual
j3 0:350a850a7191 42 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 0:350a850a7191 43 * ownership rights.
j3 0:350a850a7191 44 **********************************************************************/
j3 0:350a850a7191 45
j3 0:350a850a7191 46
j3 0:350a850a7191 47 #ifndef MAX7300_H
j3 0:350a850a7191 48 #define MAX7300_H
j3 0:350a850a7191 49
j3 0:350a850a7191 50 #include "mbed.h"
j3 0:350a850a7191 51
j3 0:350a850a7191 52
j3 0:350a850a7191 53 class Max7300
j3 0:350a850a7191 54 {
j3 0:350a850a7191 55 public:
j3 0:350a850a7191 56
j3 0:350a850a7191 57 typedef enum
j3 0:350a850a7191 58 {
j3 0:350a850a7191 59 MAX7300_I2C_ADRS0 = 0x40,
j3 0:350a850a7191 60 MAX7300_I2C_ADRS1,
j3 0:350a850a7191 61 MAX7300_I2C_ADRS2,
j3 0:350a850a7191 62 MAX7300_I2C_ADRS3,
j3 0:350a850a7191 63 MAX7300_I2C_ADRS4,
j3 0:350a850a7191 64 MAX7300_I2C_ADRS5,
j3 0:350a850a7191 65 MAX7300_I2C_ADRS6,
j3 0:350a850a7191 66 MAX7300_I2C_ADRS7,
j3 0:350a850a7191 67 MAX7300_I2C_ADRS8,
j3 0:350a850a7191 68 MAX7300_I2C_ADRS9,
j3 0:350a850a7191 69 MAX7300_I2C_ADRS10,
j3 0:350a850a7191 70 MAX7300_I2C_ADRS11,
j3 0:350a850a7191 71 MAX7300_I2C_ADRS12,
j3 0:350a850a7191 72 MAX7300_I2C_ADRS13,
j3 0:350a850a7191 73 MAX7300_I2C_ADRS14,
j3 0:350a850a7191 74 MAX7300_I2C_ADRS15
j3 0:350a850a7191 75 }max7300_i2c_adrs_t;
j3 0:350a850a7191 76
j3 0:350a850a7191 77
j3 0:350a850a7191 78 typedef enum
j3 0:350a850a7191 79 {
j3 0:350a850a7191 80 MAX7300_PORT_OUTPUT = 1,
j3 0:350a850a7191 81 MAX7300_PORT_INPUT,
j3 0:350a850a7191 82 MAX7300_PORT_INPUT_PULLUP
j3 0:350a850a7191 83 }max7300_port_type_t;
j3 0:350a850a7191 84
j3 0:350a850a7191 85
j3 0:350a850a7191 86 typedef enum
j3 0:350a850a7191 87 {
j3 0:350a850a7191 88 MAX7300_PORT_04 = 4,
j3 0:350a850a7191 89 MAX7300_PORT_05,
j3 0:350a850a7191 90 MAX7300_PORT_06,
j3 0:350a850a7191 91 MAX7300_PORT_07,
j3 0:350a850a7191 92 MAX7300_PORT_08,
j3 0:350a850a7191 93 MAX7300_PORT_09,
j3 0:350a850a7191 94 MAX7300_PORT_10,
j3 0:350a850a7191 95 MAX7300_PORT_11,
j3 0:350a850a7191 96 MAX7300_PORT_12,
j3 0:350a850a7191 97 MAX7300_PORT_13,
j3 0:350a850a7191 98 MAX7300_PORT_14,
j3 0:350a850a7191 99 MAX7300_PORT_15,
j3 0:350a850a7191 100 MAX7300_PORT_16,
j3 0:350a850a7191 101 MAX7300_PORT_17,
j3 0:350a850a7191 102 MAX7300_PORT_18,
j3 0:350a850a7191 103 MAX7300_PORT_19,
j3 0:350a850a7191 104 MAX7300_PORT_20,
j3 0:350a850a7191 105 MAX7300_PORT_21,
j3 0:350a850a7191 106 MAX7300_PORT_22,
j3 0:350a850a7191 107 MAX7300_PORT_23,
j3 0:350a850a7191 108 MAX7300_PORT_24,
j3 0:350a850a7191 109 MAX7300_PORT_25,
j3 0:350a850a7191 110 MAX7300_PORT_26,
j3 0:350a850a7191 111 MAX7300_PORT_27,
j3 0:350a850a7191 112 MAX7300_PORT_28,
j3 0:350a850a7191 113 MAX7300_PORT_29,
j3 0:350a850a7191 114 MAX7300_PORT_30,
j3 0:350a850a7191 115 MAX7300_PORT_31
j3 0:350a850a7191 116 }max7300_port_number_t;
j3 0:350a850a7191 117
j3 0:350a850a7191 118
j3 0:350a850a7191 119 typedef enum
j3 0:350a850a7191 120 {
j3 0:350a850a7191 121 MAX7300_NO_OP = 0,
j3 0:350a850a7191 122 MAX7300_CONFIGURATION = 4,
j3 0:350a850a7191 123 MAX7300_MASK = 6,
j3 0:350a850a7191 124 MAX7300_PORT_CONFIG_P07_P04 = 9,
j3 0:350a850a7191 125 MAX7300_PORT_CONFIG_P11_P8,
j3 0:350a850a7191 126 MAX7300_PORT_CONFIG_P15_P12,
j3 0:350a850a7191 127 MAX7300_PORT_CONFIG_P19_P16,
j3 0:350a850a7191 128 MAX7300_PORT_CONFIG_P23_P20,
j3 0:350a850a7191 129 MAX7300_PORT_CONFIG_P27_P24,
j3 0:350a850a7191 130 MAX7300_PORT_CONFIG_P31_P28,
j3 0:350a850a7191 131 MAX7300_PORT_04_DATA = 0x24,
j3 0:350a850a7191 132 MAX7300_PORT_05_DATA,
j3 0:350a850a7191 133 MAX7300_PORT_06_DATA,
j3 0:350a850a7191 134 MAX7300_PORT_07_DATA,
j3 0:350a850a7191 135 MAX7300_PORT_08_DATA,
j3 0:350a850a7191 136 MAX7300_PORT_09_DATA,
j3 0:350a850a7191 137 MAX7300_PORT_10_DATA,
j3 0:350a850a7191 138 MAX7300_PORT_11_DATA,
j3 0:350a850a7191 139 MAX7300_PORT_12_DATA,
j3 0:350a850a7191 140 MAX7300_PORT_13_DATA,
j3 0:350a850a7191 141 MAX7300_PORT_14_DATA,
j3 0:350a850a7191 142 MAX7300_PORT_15_DATA,
j3 0:350a850a7191 143 MAX7300_PORT_16_DATA,
j3 0:350a850a7191 144 MAX7300_PORT_17_DATA,
j3 0:350a850a7191 145 MAX7300_PORT_18_DATA,
j3 0:350a850a7191 146 MAX7300_PORT_19_DATA,
j3 0:350a850a7191 147 MAX7300_PORT_20_DATA,
j3 0:350a850a7191 148 MAX7300_PORT_21_DATA,
j3 0:350a850a7191 149 MAX7300_PORT_22_DATA,
j3 0:350a850a7191 150 MAX7300_PORT_23_DATA,
j3 0:350a850a7191 151 MAX7300_PORT_24_DATA,
j3 0:350a850a7191 152 MAX7300_PORT_25_DATA,
j3 0:350a850a7191 153 MAX7300_PORT_26_DATA,
j3 0:350a850a7191 154 MAX7300_PORT_27_DATA,
j3 0:350a850a7191 155 MAX7300_PORT_28_DATA,
j3 0:350a850a7191 156 MAX7300_PORT_29_DATA,
j3 0:350a850a7191 157 MAX7300_PORT_30_DATA,
j3 0:350a850a7191 158 MAX7300_PORT_31_DATA,
j3 0:350a850a7191 159 MAX7300_8_PORTS_P04_P11_DATA = 0x44,
j3 0:350a850a7191 160 MAX7300_8_PORTS_P12_P19_DATA = 0x4C,
j3 0:350a850a7191 161 MAX7300_8_PORTS_P20_P27_DATA = 0x54,
j3 0:350a850a7191 162 MAX7300_8_PORTS_P24_P31_DATA = 0x58
j3 0:350a850a7191 163 }max7300_registers_t;
j3 0:350a850a7191 164
j3 0:350a850a7191 165
j3 0:350a850a7191 166 /**********************************************************//**
j3 0:350a850a7191 167 * @brief Constructor for Max7300 Class.
j3 0:350a850a7191 168 *
j3 0:350a850a7191 169 * @details Allows user to use existing I2C object
j3 0:350a850a7191 170 *
j3 0:350a850a7191 171 * On Entry:
j3 0:350a850a7191 172 * @param[in] i2c_bus - pointer to existing I2C object
j3 0:350a850a7191 173 * @param[in] i2c_adrs - 7-bit slave address of MAX7300
j3 0:350a850a7191 174 *
j3 0:350a850a7191 175 * On Exit:
j3 0:350a850a7191 176 * @return none
j3 0:350a850a7191 177 **************************************************************/
j3 0:350a850a7191 178 Max7300(I2C *i2c_bus, max7300_i2c_adrs_t i2c_adrs);
j3 0:350a850a7191 179
j3 0:350a850a7191 180
j3 0:350a850a7191 181 /**********************************************************//**
j3 0:350a850a7191 182 * @brief Constructor for Max7300 Class.
j3 0:350a850a7191 183 *
j3 0:350a850a7191 184 * @details Allows user to create a new I2C object if not
j3 0:350a850a7191 185 * already using one
j3 0:350a850a7191 186 *
j3 0:350a850a7191 187 * On Entry:
j3 0:350a850a7191 188 * @param[in] sda - sda pin of I2C bus
j3 0:350a850a7191 189 * @param[in] scl - scl pin of I2C bus
j3 0:350a850a7191 190 * @param[in] i2c_adrs - 7-bit slave address of MAX7300
j3 0:350a850a7191 191 *
j3 0:350a850a7191 192 * On Exit:
j3 0:350a850a7191 193 * @return none
j3 0:350a850a7191 194 **************************************************************/
j3 0:350a850a7191 195 Max7300(PinName sda, PinName scl, max7300_i2c_adrs_t i2c_adrs);
j3 0:350a850a7191 196
j3 0:350a850a7191 197
j3 0:350a850a7191 198 /**********************************************************//**
j3 0:350a850a7191 199 * @brief Default destructor for Max7300 Class.
j3 0:350a850a7191 200 *
j3 0:350a850a7191 201 * @details Destroys I2C object if owner
j3 0:350a850a7191 202 *
j3 0:350a850a7191 203 * On Entry:
j3 0:350a850a7191 204 *
j3 0:350a850a7191 205 * On Exit:
j3 0:350a850a7191 206 * @return none
j3 0:350a850a7191 207 **************************************************************/
j3 0:350a850a7191 208 ~Max7300();
j3 0:350a850a7191 209
j3 0:350a850a7191 210
j3 0:350a850a7191 211 /**********************************************************//**
j3 0:350a850a7191 212 * @brief Enables MAX7300 GPIO Ports
j3 0:350a850a7191 213 *
j3 0:350a850a7191 214 * @details Sets 'S' bit of configuration register
j3 0:350a850a7191 215 *
j3 0:350a850a7191 216 * On Entry:
j3 0:350a850a7191 217 *
j3 0:350a850a7191 218 * On Exit:
j3 0:350a850a7191 219 * @return 0 on success, non-0 on failure
j3 0:350a850a7191 220 **************************************************************/
j3 0:350a850a7191 221 int16_t enable_ports(void);
j3 0:350a850a7191 222
j3 0:350a850a7191 223
j3 0:350a850a7191 224 /**********************************************************//**
j3 0:350a850a7191 225 * @brief Disables MAX7300 GPIO Ports
j3 0:350a850a7191 226 *
j3 0:350a850a7191 227 * @details Clears 'S' bit of configuration register
j3 0:350a850a7191 228 *
j3 0:350a850a7191 229 * On Entry:
j3 0:350a850a7191 230 *
j3 0:350a850a7191 231 * On Exit:
j3 0:350a850a7191 232 * @return 0 on success, non-0 on failure
j3 0:350a850a7191 233 **************************************************************/
j3 0:350a850a7191 234 int16_t disable_ports(void);
j3 0:350a850a7191 235
j3 0:350a850a7191 236
j3 0:350a850a7191 237 /**********************************************************//**
j3 0:350a850a7191 238 * @brief Configures a single MAX7300 GPIO port
j3 0:350a850a7191 239 *
j3 0:350a850a7191 240 * @details Configures MAX7300 GPIO port as either an output,
j3 0:350a850a7191 241 * input, or input with pullup.
j3 0:350a850a7191 242 *
j3 0:350a850a7191 243 * On Entry:
j3 0:350a850a7191 244 * @param[in] port_num - GPIO port to configure
j3 0:350a850a7191 245 * @param[in] port_type - One of the following port types
j3 0:350a850a7191 246 * MAX7300_PORT_OUTPUT
j3 0:350a850a7191 247 * MAX7300_PORT_INPUT
j3 0:350a850a7191 248 * MAX7300_PORT_INPUT_PULLUP
j3 0:350a850a7191 249 *
j3 0:350a850a7191 250 * On Exit:
j3 0:350a850a7191 251 * @return 0 on success, non-0 on failure
j3 0:350a850a7191 252 **************************************************************/
j3 0:350a850a7191 253 int16_t config_port(max7300_port_number_t port_num, max7300_port_type_t port_type);
j3 0:350a850a7191 254
j3 0:350a850a7191 255
j3 0:350a850a7191 256 /**********************************************************//**
j3 0:350a850a7191 257 * @brief Configure 4 MAX7300 GPIO ports
j3 0:350a850a7191 258 *
j3 0:350a850a7191 259 * @details Allows user to configure 4 ports at a time
j3 0:350a850a7191 260 *
j3 0:350a850a7191 261 * On Entry:
j3 0:350a850a7191 262 * @param[in] reg - One of the following 7 registers
j3 0:350a850a7191 263 * MAX7300_PORT_CONFIG_P7_P4,
j3 0:350a850a7191 264 * MAX7300_PORT_CONFIG_P11_P8,
j3 0:350a850a7191 265 * MAX7300_PORT_CONFIG_P15_P12,
j3 0:350a850a7191 266 * MAX7300_PORT_CONFIG_P19_P16,
j3 0:350a850a7191 267 * MAX7300_PORT_CONFIG_P23_P20,
j3 0:350a850a7191 268 * MAX7300_PORT_CONFIG_P27_P24,
j3 0:350a850a7191 269 * MAX7300_PORT_CONFIG_P31_P28
j3 0:350a850a7191 270 *
j3 0:350a850a7191 271 * @param[in] data - Byte with each ports desired type with
j3 0:350a850a7191 272 * the following format - xx|xx|xx|xx
j3 0:350a850a7191 273 *
j3 0:350a850a7191 274 * On Exit:
j3 0:350a850a7191 275 * @return 0 on success, non-0 on failure
j3 0:350a850a7191 276 **************************************************************/
j3 0:350a850a7191 277 int16_t config_ports(max7300_registers_t reg, uint8_t data);
j3 0:350a850a7191 278
j3 0:350a850a7191 279
j3 0:350a850a7191 280 /**********************************************************//**
j3 0:350a850a7191 281 * @brief Read a single MAX7300 GPIO port
j3 0:350a850a7191 282 *
j3 0:350a850a7191 283 * @details
j3 0:350a850a7191 284 *
j3 0:350a850a7191 285 * On Entry:
j3 0:350a850a7191 286 *
j3 0:350a850a7191 287 * On Exit:
j3 0:350a850a7191 288 * @return state of port, or
j3 0:350a850a7191 289 **************************************************************/
j3 0:350a850a7191 290 int16_t read_port(max7300_port_number_t port_num);
j3 0:350a850a7191 291
j3 0:350a850a7191 292
j3 0:350a850a7191 293 /**********************************************************//**
j3 0:350a850a7191 294 * @brief Write a single MAX7300 GPIO port
j3 0:350a850a7191 295 *
j3 0:350a850a7191 296 * @details
j3 0:350a850a7191 297 *
j3 0:350a850a7191 298 * On Entry:
j3 0:350a850a7191 299 *
j3 0:350a850a7191 300 * On Exit:
j3 0:350a850a7191 301 * @return none
j3 0:350a850a7191 302 **************************************************************/
j3 0:350a850a7191 303 int16_t write_port(max7300_port_number_t port_num, uint8_t data);
j3 0:350a850a7191 304
j3 0:350a850a7191 305
j3 0:350a850a7191 306 /**********************************************************//**
j3 0:350a850a7191 307 * @brief Read 8 MAX7300 GPIO ports
j3 0:350a850a7191 308 *
j3 0:350a850a7191 309 * @details
j3 0:350a850a7191 310 *
j3 0:350a850a7191 311 * On Entry:
j3 0:350a850a7191 312 *
j3 0:350a850a7191 313 * On Exit:
j3 0:350a850a7191 314 * @return none
j3 0:350a850a7191 315 **************************************************************/
j3 0:350a850a7191 316 int16_t read_eight_ports(max7300_registers_t reg);
j3 0:350a850a7191 317
j3 0:350a850a7191 318
j3 0:350a850a7191 319 /**********************************************************//**
j3 0:350a850a7191 320 * @brief Write 8 MAX7300 GPIO ports
j3 0:350a850a7191 321 *
j3 0:350a850a7191 322 * @details
j3 0:350a850a7191 323 *
j3 0:350a850a7191 324 * On Entry:
j3 0:350a850a7191 325 *
j3 0:350a850a7191 326 * On Exit:
j3 0:350a850a7191 327 * @return none
j3 0:350a850a7191 328 **************************************************************/
j3 0:350a850a7191 329 int16_t write_eight_ports(max7300_registers_t reg, uint8_t data);
j3 0:350a850a7191 330
j3 0:350a850a7191 331
j3 0:350a850a7191 332 /**********************************************************//**
j3 0:350a850a7191 333 * @brief
j3 0:350a850a7191 334 *
j3 0:350a850a7191 335 * @details
j3 0:350a850a7191 336 *
j3 0:350a850a7191 337 * On Entry:
j3 0:350a850a7191 338 *
j3 0:350a850a7191 339 * On Exit:
j3 0:350a850a7191 340 * @return none
j3 0:350a850a7191 341 **************************************************************/
j3 0:350a850a7191 342
j3 0:350a850a7191 343 private:
j3 0:350a850a7191 344
j3 0:350a850a7191 345 I2C *_p_i2c;
j3 0:350a850a7191 346 bool _i2c_owner;
j3 0:350a850a7191 347 uint8_t _w_adrs;
j3 0:350a850a7191 348 uint8_t _r_adrs;
j3 0:350a850a7191 349 };
j3 0:350a850a7191 350 #endif /* MAX7300_H*/