Librairie adaptée au laboratoire 2

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Committer:
YROY2004
Date:
Fri Feb 02 10:43:07 2018 +0000
Revision:
59:32055c2ddac6
Parent:
58:1e9a3a46f814
Programme qui fait du I2C et de l'interface usager

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 57:fa4c622b04a7 1 /**
Davidroid 57:fa4c622b04a7 2 ******************************************************************************
Davidroid 57:fa4c622b04a7 3 * @file STMPE1600.h
Davidroid 57:fa4c622b04a7 4 * @author AST / EST
Davidroid 57:fa4c622b04a7 5 * @version V0.0.1
Davidroid 57:fa4c622b04a7 6 * @date 14-April-2015
Davidroid 57:fa4c622b04a7 7 * @brief Header file for component stmpe1600
Davidroid 57:fa4c622b04a7 8 ******************************************************************************
Davidroid 57:fa4c622b04a7 9 * @attention
Davidroid 57:fa4c622b04a7 10 *
Davidroid 57:fa4c622b04a7 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Davidroid 57:fa4c622b04a7 12 *
Davidroid 57:fa4c622b04a7 13 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 57:fa4c622b04a7 14 * are permitted provided that the following conditions are met:
Davidroid 57:fa4c622b04a7 15 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 57:fa4c622b04a7 16 * this list of conditions and the following disclaimer.
Davidroid 57:fa4c622b04a7 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 57:fa4c622b04a7 18 * this list of conditions and the following disclaimer in the documentation
Davidroid 57:fa4c622b04a7 19 * and/or other materials provided with the distribution.
Davidroid 57:fa4c622b04a7 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 57:fa4c622b04a7 21 * may be used to endorse or promote products derived from this software
Davidroid 57:fa4c622b04a7 22 * without specific prior written permission.
Davidroid 57:fa4c622b04a7 23 *
Davidroid 57:fa4c622b04a7 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 57:fa4c622b04a7 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 57:fa4c622b04a7 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 57:fa4c622b04a7 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 57:fa4c622b04a7 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 57:fa4c622b04a7 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 57:fa4c622b04a7 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 57:fa4c622b04a7 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 57:fa4c622b04a7 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 57:fa4c622b04a7 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 57:fa4c622b04a7 34 *
Davidroid 57:fa4c622b04a7 35 ******************************************************************************
Davidroid 57:fa4c622b04a7 36 */
Davidroid 57:fa4c622b04a7 37 #ifndef __STMPE1600_CLASS
Davidroid 57:fa4c622b04a7 38 #define __STMPE1600_CLASS
Davidroid 57:fa4c622b04a7 39 /* Includes ------------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 40 #include "DevI2C.h"
Davidroid 57:fa4c622b04a7 41
Davidroid 57:fa4c622b04a7 42 #define STMPE1600_DEF_DEVICE_ADDRESS (uint8_t)0x42*2
Davidroid 57:fa4c622b04a7 43 #define STMPE1600_DEF_DIGIOUT_LVL 1
Davidroid 57:fa4c622b04a7 44
Davidroid 57:fa4c622b04a7 45 /** STMPE1600 registr map **/
Davidroid 57:fa4c622b04a7 46 #define ChipID_0_7 (uint8_t)0x00
Davidroid 57:fa4c622b04a7 47 #define ChipID_8_15 (uint8_t)0x01
Davidroid 57:fa4c622b04a7 48 #define VersionId (uint8_t)0x02
Davidroid 57:fa4c622b04a7 49 #define SYS_CTRL (uint8_t)0x03
Davidroid 57:fa4c622b04a7 50 #define IEGPIOR_0_7 (uint8_t)0x08
Davidroid 57:fa4c622b04a7 51 #define IEGPIOR_8_15 (uint8_t)0x09
Davidroid 57:fa4c622b04a7 52 #define ISGPIOR_0_7 (uint8_t)0x0A
Davidroid 57:fa4c622b04a7 53 #define ISGPIOR_8_15 (uint8_t)0x0B
Davidroid 57:fa4c622b04a7 54 #define GPMR_0_7 (uint8_t)0x10
Davidroid 57:fa4c622b04a7 55 #define GPMR_8_15 (uint8_t)0x11
Davidroid 57:fa4c622b04a7 56 #define GPSR_0_7 (uint8_t)0x12
Davidroid 57:fa4c622b04a7 57 #define GPSR_8_15 (uint8_t)0x13
Davidroid 57:fa4c622b04a7 58 #define GPDR_0_7 (uint8_t)0x14
Davidroid 57:fa4c622b04a7 59 #define GPDR_8_15 (uint8_t)0x15
Davidroid 57:fa4c622b04a7 60 #define GPIR_0_7 (uint8_t)0x16
Davidroid 57:fa4c622b04a7 61 #define GPIR_8_15 (uint8_t)0x17
Davidroid 57:fa4c622b04a7 62
Davidroid 57:fa4c622b04a7 63 #define SOFT_RESET (uint8_t)0x80
Davidroid 57:fa4c622b04a7 64
Davidroid 57:fa4c622b04a7 65 typedef enum {
Davidroid 57:fa4c622b04a7 66 // GPIO Expander pin names
Davidroid 57:fa4c622b04a7 67 GPIO_0=0,
Davidroid 57:fa4c622b04a7 68 GPIO_1,
Davidroid 57:fa4c622b04a7 69 GPIO_2,
Davidroid 57:fa4c622b04a7 70 GPIO_3,
Davidroid 57:fa4c622b04a7 71 GPIO_4,
Davidroid 57:fa4c622b04a7 72 GPIO_5,
Davidroid 57:fa4c622b04a7 73 GPIO_6,
Davidroid 57:fa4c622b04a7 74 GPIO_7,
Davidroid 57:fa4c622b04a7 75 GPIO_8,
Davidroid 57:fa4c622b04a7 76 GPIO_9,
Davidroid 57:fa4c622b04a7 77 GPIO_10,
Davidroid 57:fa4c622b04a7 78 GPIO_11,
Davidroid 57:fa4c622b04a7 79 GPIO_12,
Davidroid 57:fa4c622b04a7 80 GPIO_13,
Davidroid 57:fa4c622b04a7 81 GPIO_14,
Davidroid 57:fa4c622b04a7 82 GPIO_15,
Davidroid 57:fa4c622b04a7 83 NOT_CON
Davidroid 57:fa4c622b04a7 84 } exp_gpio_pin_name;
Davidroid 57:fa4c622b04a7 85
Davidroid 57:fa4c622b04a7 86 typedef enum {
Davidroid 57:fa4c622b04a7 87 INPUT = 0,
Davidroid 57:fa4c622b04a7 88 OUTPUT,
Davidroid 57:fa4c622b04a7 89 NOT_CONNECTED
Davidroid 57:fa4c622b04a7 90 } exp_gpio_pin_direction;
Davidroid 57:fa4c622b04a7 91
Davidroid 57:fa4c622b04a7 92
Davidroid 57:fa4c622b04a7 93 /* Classes -------------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 94
Davidroid 57:fa4c622b04a7 95 /**
Davidroid 57:fa4c622b04a7 96 * Class representing a single stmpe1600 GPIO expander output pin
Davidroid 57:fa4c622b04a7 97 */
Davidroid 57:fa4c622b04a7 98 class STMPE1600DigiOut {
Davidroid 57:fa4c622b04a7 99 public:
Davidroid 57:fa4c622b04a7 100 /** Constructor
Davidroid 57:fa4c622b04a7 101 * @param[in] &i2c device I2C to be used for communication
Davidroid 57:fa4c622b04a7 102 * @param[in] outpinname the desired out pin name to be created
Davidroid 57:fa4c622b04a7 103 * @param[in] DevAddr the stmpe1600 I2C device addres (deft STMPE1600_DEF_DEVICE_ADDRESS)
Davidroid 57:fa4c622b04a7 104 * @param[in] lvl the default ot pin level
Davidroid 57:fa4c622b04a7 105 */
Davidroid 57:fa4c622b04a7 106 STMPE1600DigiOut (DevI2C &i2c, exp_gpio_pin_name outpinname, uint8_t DevAddr=STMPE1600_DEF_DEVICE_ADDRESS, bool lvl=STMPE1600_DEF_DIGIOUT_LVL):
nikapov 58:1e9a3a46f814 107 _dev_i2c(&i2c),
Davidroid 57:fa4c622b04a7 108 _expdevaddr(DevAddr),
Davidroid 57:fa4c622b04a7 109 _exppinname(outpinname)
Davidroid 57:fa4c622b04a7 110 {
Davidroid 57:fa4c622b04a7 111 uint8_t data[2];
Davidroid 57:fa4c622b04a7 112 if (_exppinname == NOT_CON) {
Davidroid 57:fa4c622b04a7 113 return;
Davidroid 57:fa4c622b04a7 114 }
Davidroid 57:fa4c622b04a7 115 /* set the _exppinname as output */
nikapov 58:1e9a3a46f814 116 _dev_i2c->i2c_read(data, _expdevaddr, GPDR_0_7, 1);
nikapov 58:1e9a3a46f814 117 _dev_i2c->i2c_read(&data[1], _expdevaddr, GPDR_8_15, 1);
Davidroid 57:fa4c622b04a7 118 *(uint16_t*)data = *(uint16_t*)data | (1<<(uint16_t)_exppinname); // set gpio as out
nikapov 58:1e9a3a46f814 119 _dev_i2c->i2c_write(data, _expdevaddr, GPDR_0_7, 1);
nikapov 58:1e9a3a46f814 120 _dev_i2c->i2c_write(&data[1], _expdevaddr, GPDR_8_15, 1);
Davidroid 57:fa4c622b04a7 121 write (lvl);
Davidroid 57:fa4c622b04a7 122 }
Davidroid 57:fa4c622b04a7 123
Davidroid 57:fa4c622b04a7 124 /**
Davidroid 57:fa4c622b04a7 125 * @brief Write on the out pin
Davidroid 57:fa4c622b04a7 126 * @param[in] lvl level to write
Davidroid 57:fa4c622b04a7 127 * @return 0 on Success
Davidroid 57:fa4c622b04a7 128 */
Davidroid 57:fa4c622b04a7 129 void write (int lvl)
Davidroid 57:fa4c622b04a7 130 {
Davidroid 57:fa4c622b04a7 131 uint8_t data[2];
Davidroid 57:fa4c622b04a7 132 if (_exppinname == NOT_CON) return;
Davidroid 57:fa4c622b04a7 133 /* set the _exppinname state to lvl */
nikapov 58:1e9a3a46f814 134 _dev_i2c->i2c_read(data, _expdevaddr, GPSR_0_7, 2);
Davidroid 57:fa4c622b04a7 135 *(uint16_t*)data = *(uint16_t*)data & (uint16_t)(~(1<<(uint16_t)_exppinname)); // set pin mask
Davidroid 57:fa4c622b04a7 136 if (lvl) *(uint16_t*)data = *(uint16_t*)data | (uint16_t)(1<<(uint16_t)_exppinname);
nikapov 58:1e9a3a46f814 137 _dev_i2c->i2c_write(data, _expdevaddr, GPSR_0_7, 2);
Davidroid 57:fa4c622b04a7 138 }
Davidroid 57:fa4c622b04a7 139
Davidroid 57:fa4c622b04a7 140 /**
Davidroid 57:fa4c622b04a7 141 * @brief Overload assignement operator
Davidroid 57:fa4c622b04a7 142 */
Davidroid 57:fa4c622b04a7 143 STMPE1600DigiOut& operator=(int lvl)
Davidroid 57:fa4c622b04a7 144 {
Davidroid 57:fa4c622b04a7 145 write (lvl);
Davidroid 57:fa4c622b04a7 146 return *this;
Davidroid 57:fa4c622b04a7 147 }
Davidroid 57:fa4c622b04a7 148
Davidroid 57:fa4c622b04a7 149 private:
nikapov 58:1e9a3a46f814 150 DevI2C *_dev_i2c;
Davidroid 57:fa4c622b04a7 151 uint8_t _expdevaddr;
Davidroid 57:fa4c622b04a7 152 exp_gpio_pin_name _exppinname;
Davidroid 57:fa4c622b04a7 153 };
Davidroid 57:fa4c622b04a7 154
Davidroid 57:fa4c622b04a7 155 /* Classes -------------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 156 /** Class representing a single stmpe1600 GPIO expander input pin
Davidroid 57:fa4c622b04a7 157 */
Davidroid 57:fa4c622b04a7 158 class STMPE1600DigiIn
Davidroid 57:fa4c622b04a7 159 {
Davidroid 57:fa4c622b04a7 160 public:
Davidroid 57:fa4c622b04a7 161 /** Constructor
Davidroid 57:fa4c622b04a7 162 * @param[in] &i2c device I2C to be used for communication
Davidroid 57:fa4c622b04a7 163 * @param[in] inpinname the desired input pin name to be created
Davidroid 57:fa4c622b04a7 164 * @param[in] DevAddr the stmpe1600 I2C device addres (deft STMPE1600_DEF_DEVICE_ADDRESS)
Davidroid 57:fa4c622b04a7 165 */
nikapov 58:1e9a3a46f814 166 STMPE1600DigiIn (DevI2C &i2c, exp_gpio_pin_name inpinname, uint8_t DevAddr=STMPE1600_DEF_DEVICE_ADDRESS): _dev_i2c(&i2c), _expdevaddr(DevAddr), _exppinname(inpinname)
Davidroid 57:fa4c622b04a7 167 {
Davidroid 57:fa4c622b04a7 168 uint8_t data[2];
Davidroid 57:fa4c622b04a7 169 if (_exppinname == NOT_CON) return;
Davidroid 57:fa4c622b04a7 170 /* set the _exppinname as input pin direction */
nikapov 58:1e9a3a46f814 171 _dev_i2c->i2c_read(data, _expdevaddr, GPDR_0_7, 2);
Davidroid 57:fa4c622b04a7 172 *(uint16_t*)data = *(uint16_t*)data & (uint16_t)(~(1<<(uint16_t) _exppinname)); // set gpio as in
nikapov 58:1e9a3a46f814 173 _dev_i2c->i2c_write(data, _expdevaddr, GPDR_0_7, 2);
Davidroid 57:fa4c622b04a7 174 }
Davidroid 57:fa4c622b04a7 175
Davidroid 57:fa4c622b04a7 176 /**
Davidroid 57:fa4c622b04a7 177 * @brief Read the input pin
Davidroid 57:fa4c622b04a7 178 * @return The pin logical state 0 or 1
Davidroid 57:fa4c622b04a7 179 */
Davidroid 57:fa4c622b04a7 180 bool read () {
Davidroid 57:fa4c622b04a7 181 uint8_t data[2];
Davidroid 57:fa4c622b04a7 182 if (_exppinname == NOT_CON) {
Davidroid 57:fa4c622b04a7 183 return 0;
Davidroid 57:fa4c622b04a7 184 }
Davidroid 57:fa4c622b04a7 185
Davidroid 57:fa4c622b04a7 186 /* read the _exppinname */
nikapov 58:1e9a3a46f814 187 _dev_i2c->i2c_read(data, _expdevaddr, GPMR_0_7, 2);
Davidroid 57:fa4c622b04a7 188 *(uint16_t*)data = *(uint16_t*)data & (uint16_t)(1<<(uint16_t)_exppinname); // mask the in gpio
Davidroid 57:fa4c622b04a7 189
Davidroid 57:fa4c622b04a7 190 if (data[0] || data[1]) {
Davidroid 57:fa4c622b04a7 191 return 1;
Davidroid 57:fa4c622b04a7 192 }
Davidroid 57:fa4c622b04a7 193 return 0;
Davidroid 57:fa4c622b04a7 194 }
Davidroid 57:fa4c622b04a7 195
Davidroid 57:fa4c622b04a7 196 operator int() {
Davidroid 57:fa4c622b04a7 197 return read();
Davidroid 57:fa4c622b04a7 198 }
Davidroid 57:fa4c622b04a7 199
Davidroid 57:fa4c622b04a7 200 private:
nikapov 58:1e9a3a46f814 201 DevI2C *_dev_i2c;
Davidroid 57:fa4c622b04a7 202 uint8_t _expdevaddr;
Davidroid 57:fa4c622b04a7 203 exp_gpio_pin_name _exppinname;
Davidroid 57:fa4c622b04a7 204 };
Davidroid 57:fa4c622b04a7 205
Davidroid 57:fa4c622b04a7 206
Davidroid 57:fa4c622b04a7 207 /* Classes -------------------------------------------------------------------*/
Davidroid 57:fa4c622b04a7 208
Davidroid 57:fa4c622b04a7 209 /**
Davidroid 57:fa4c622b04a7 210 * Class representing a whole stmpe1600 component (16 gpio)
Davidroid 57:fa4c622b04a7 211 */
Davidroid 57:fa4c622b04a7 212 class STMPE1600 {
Davidroid 57:fa4c622b04a7 213 public:
Davidroid 57:fa4c622b04a7 214 /** Constructor
Davidroid 57:fa4c622b04a7 215 * @param[in] &i2c device I2C to be used for communication
Davidroid 57:fa4c622b04a7 216 * @param[in] DevAddr the stmpe1600 I2C device addres (deft STMPE1600_DEF_DEVICE_ADDRESS)
Davidroid 57:fa4c622b04a7 217 */
nikapov 58:1e9a3a46f814 218 STMPE1600 (DevI2C &i2c, uint8_t DevAddr=STMPE1600_DEF_DEVICE_ADDRESS ) : _dev_i2c(&i2c)
Davidroid 57:fa4c622b04a7 219 {
nikapov 58:1e9a3a46f814 220 _dev_i2c = &i2c;
Davidroid 57:fa4c622b04a7 221 _expdevaddr = DevAddr;
Davidroid 57:fa4c622b04a7 222 write_sys_ctrl (SOFT_RESET);
Davidroid 57:fa4c622b04a7 223
Davidroid 57:fa4c622b04a7 224 _gpdro_15 = (uint16_t)0; // gpio dir all IN
Davidroid 57:fa4c622b04a7 225 write_16_bit_reg (GPDR_0_7, &_gpdro_15);
Davidroid 57:fa4c622b04a7 226 _gpsro_15 = (uint16_t)0x0ffff; // gpio status all 1
Davidroid 57:fa4c622b04a7 227 write_16_bit_reg (GPSR_0_7, &_gpsro_15);
Davidroid 57:fa4c622b04a7 228 }
Davidroid 57:fa4c622b04a7 229
Davidroid 57:fa4c622b04a7 230 /**
Davidroid 57:fa4c622b04a7 231 * @brief Write the SYS_CTRL register
Davidroid 57:fa4c622b04a7 232 * @param[in] Data to be written (bit fields)
Davidroid 57:fa4c622b04a7 233 */
Davidroid 57:fa4c622b04a7 234 void write_sys_ctrl (uint8_t data) // data = SOFT_RESET reset the device
Davidroid 57:fa4c622b04a7 235 {
nikapov 58:1e9a3a46f814 236 _dev_i2c->i2c_write((uint8_t*)SYS_CTRL, _expdevaddr, data, 1);
Davidroid 57:fa4c622b04a7 237 }
Davidroid 57:fa4c622b04a7 238
Davidroid 57:fa4c622b04a7 239 /**
Davidroid 57:fa4c622b04a7 240 * @brief Set the out pin
Davidroid 57:fa4c622b04a7 241 * @param[in] The pin name
Davidroid 57:fa4c622b04a7 242 * @return 0 on Success
Davidroid 57:fa4c622b04a7 243 */
Davidroid 57:fa4c622b04a7 244 bool set_gpio (exp_gpio_pin_name pin_name)
Davidroid 57:fa4c622b04a7 245 {
Davidroid 57:fa4c622b04a7 246 if (pin_name == NOT_CON) return true;
Davidroid 57:fa4c622b04a7 247 _gpsro_15 = _gpsro_15 | ((uint16_t)0x0001<<pin_name);
Davidroid 57:fa4c622b04a7 248 write_16_bit_reg (GPSR_0_7 , &_gpsro_15);
Davidroid 57:fa4c622b04a7 249 return false;
Davidroid 57:fa4c622b04a7 250 }
Davidroid 57:fa4c622b04a7 251
Davidroid 57:fa4c622b04a7 252 /**
Davidroid 57:fa4c622b04a7 253 * @brief Clear the out pin
Davidroid 57:fa4c622b04a7 254 * @param[in] The pin name
Davidroid 57:fa4c622b04a7 255 * @return 0 on Success
Davidroid 57:fa4c622b04a7 256 */
Davidroid 57:fa4c622b04a7 257 bool clr_gpio (exp_gpio_pin_name pin_name)
Davidroid 57:fa4c622b04a7 258 {
Davidroid 57:fa4c622b04a7 259 if (pin_name == NOT_CON) return true;
Davidroid 57:fa4c622b04a7 260 _gpsro_15 = _gpsro_15 & (~((uint16_t)0x0001<<pin_name));
Davidroid 57:fa4c622b04a7 261 write_16_bit_reg (GPSR_0_7 , &_gpsro_15);
Davidroid 57:fa4c622b04a7 262 return false;
Davidroid 57:fa4c622b04a7 263 }
Davidroid 57:fa4c622b04a7 264
Davidroid 57:fa4c622b04a7 265 /**
Davidroid 57:fa4c622b04a7 266 * @brief Read the input pin
Davidroid 57:fa4c622b04a7 267 * @param[in] The pin name
Davidroid 57:fa4c622b04a7 268 * @return The logical pin level
Davidroid 57:fa4c622b04a7 269 */
Davidroid 57:fa4c622b04a7 270 bool rd_gpio (exp_gpio_pin_name pin_name)
Davidroid 57:fa4c622b04a7 271 {
Davidroid 57:fa4c622b04a7 272 uint16_t gpmr0_15;
Davidroid 57:fa4c622b04a7 273 if (pin_name == NOT_CON) return true;
Davidroid 57:fa4c622b04a7 274 read_16_bit_reg (GPMR_0_7, &gpmr0_15);
Davidroid 57:fa4c622b04a7 275 gpmr0_15 = gpmr0_15 & ((uint16_t)0x0001<<pin_name);
Davidroid 57:fa4c622b04a7 276 if (gpmr0_15) {
Davidroid 57:fa4c622b04a7 277 return true;
Davidroid 57:fa4c622b04a7 278 }
Davidroid 57:fa4c622b04a7 279 return false;
Davidroid 57:fa4c622b04a7 280 }
Davidroid 57:fa4c622b04a7 281
Davidroid 57:fa4c622b04a7 282 /**
Davidroid 57:fa4c622b04a7 283 * @brief Set the pin direction
Davidroid 57:fa4c622b04a7 284 * @param[in] The pin name
Davidroid 57:fa4c622b04a7 285 * @param[in] The pin direction
Davidroid 57:fa4c622b04a7 286 * @return 0 on success
Davidroid 57:fa4c622b04a7 287 */
Davidroid 57:fa4c622b04a7 288 bool set_gpio_dir (exp_gpio_pin_name pin_name, exp_gpio_pin_direction pin_dir)
Davidroid 57:fa4c622b04a7 289 {
Davidroid 57:fa4c622b04a7 290 if (pin_name == NOT_CON || pin_dir == NOT_CONNECTED) {
Davidroid 57:fa4c622b04a7 291 return true;
Davidroid 57:fa4c622b04a7 292 }
Davidroid 57:fa4c622b04a7 293 _gpdro_15 = _gpdro_15 & (~((uint16_t)0x0001<<pin_name)); // clear the Pin
Davidroid 57:fa4c622b04a7 294 _gpdro_15 = _gpdro_15 | ((uint16_t)pin_dir<<pin_name);
Davidroid 57:fa4c622b04a7 295 write_16_bit_reg (GPDR_0_7 , &_gpdro_15);
Davidroid 57:fa4c622b04a7 296 return false;
Davidroid 57:fa4c622b04a7 297 }
Davidroid 57:fa4c622b04a7 298
Davidroid 57:fa4c622b04a7 299 /**
Davidroid 57:fa4c622b04a7 300 * @brief Read a 16 bits register
Davidroid 57:fa4c622b04a7 301 * @param[in] The register address
Davidroid 57:fa4c622b04a7 302 * @param[in] The pointer to the read data
Davidroid 57:fa4c622b04a7 303 */
Davidroid 57:fa4c622b04a7 304 void read_16_bit_reg (uint8_t reg_16_addr, uint16_t *reg_16_data)
Davidroid 57:fa4c622b04a7 305 {
nikapov 58:1e9a3a46f814 306 _dev_i2c->i2c_read((uint8_t*)reg_16_data, _expdevaddr, reg_16_addr, 2);
Davidroid 57:fa4c622b04a7 307 }
Davidroid 57:fa4c622b04a7 308
Davidroid 57:fa4c622b04a7 309 /**
Davidroid 57:fa4c622b04a7 310 * @brief Write a 16 bits register
Davidroid 57:fa4c622b04a7 311 * @param[in] The register address
Davidroid 57:fa4c622b04a7 312 * @param[in] The pointer to the data to be written
Davidroid 57:fa4c622b04a7 313 */
Davidroid 57:fa4c622b04a7 314 void write_16_bit_reg (uint8_t reg_16_addr, uint16_t *reg_16_data)
Davidroid 57:fa4c622b04a7 315 {
nikapov 58:1e9a3a46f814 316 _dev_i2c->i2c_write((uint8_t*)reg_16_data, _expdevaddr, reg_16_addr, 2);
Davidroid 57:fa4c622b04a7 317 }
Davidroid 57:fa4c622b04a7 318
Davidroid 57:fa4c622b04a7 319 private:
nikapov 58:1e9a3a46f814 320 DevI2C *_dev_i2c;
Davidroid 57:fa4c622b04a7 321 uint16_t _gpdro_15; // local copy of bit direction reg
Davidroid 57:fa4c622b04a7 322 uint16_t _gpsro_15; // local copy of bit status reg
Davidroid 57:fa4c622b04a7 323 uint8_t _expdevaddr; // expander device i2c addr
Davidroid 57:fa4c622b04a7 324 };
Davidroid 57:fa4c622b04a7 325
Davidroid 57:fa4c622b04a7 326 #endif // __STMPE1600_CLASS