Class Module for MMA845x I2C Accelerometer.

Dependents:   mDotEVBM2X MTDOT-EVBDemo-DRH MTDOT-BOX-EVB-Factory-Firmware-LIB-108 MTDOT-UDKDemo_Senet ... more

Fork of MMA845x by Sam Grove

Committer:
Mike Fiore
Date:
Mon Dec 21 10:49:15 2015 -0600
Revision:
3:7c2fbf79f607
Parent:
2:70df6adad015
Child:
4:4ff1650da84c
protect serial transactions by disabling interrupts

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:9d1e3a344e4f 1 /**
sam_grove 0:9d1e3a344e4f 2 * @file MMA845x.cpp
falingtrea 1:41af2b3eefb5 3 * @brief Device driver - MMA845X 3-axis accelerometer IC W/RTOS support
falingtrea 1:41af2b3eefb5 4 * @author Tim Barr
sam_grove 0:9d1e3a344e4f 5 * @version 1.0
sam_grove 0:9d1e3a344e4f 6 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8451Q.pdf
sam_grove 0:9d1e3a344e4f 7 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8452Q.pdf
sam_grove 0:9d1e3a344e4f 8 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8453Q.pdf
sam_grove 0:9d1e3a344e4f 9 *
falingtrea 1:41af2b3eefb5 10 * Copyright (c) 2015
sam_grove 0:9d1e3a344e4f 11 *
sam_grove 0:9d1e3a344e4f 12 * Licensed under the Apache License, Version 2.0 (the "License");
sam_grove 0:9d1e3a344e4f 13 * you may not use this file except in compliance with the License.
sam_grove 0:9d1e3a344e4f 14 * You may obtain a copy of the License at
sam_grove 0:9d1e3a344e4f 15 *
sam_grove 0:9d1e3a344e4f 16 * http://www.apache.org/licenses/LICENSE-2.0
sam_grove 0:9d1e3a344e4f 17 *
sam_grove 0:9d1e3a344e4f 18 * Unless required by applicable law or agreed to in writing, software
sam_grove 0:9d1e3a344e4f 19 * distributed under the License is distributed on an "AS IS" BASIS,
sam_grove 0:9d1e3a344e4f 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sam_grove 0:9d1e3a344e4f 21 * See the License for the specific language governing permissions and
sam_grove 0:9d1e3a344e4f 22 * limitations under the License.
falingtrea 1:41af2b3eefb5 23 *
falingtrea 1:41af2b3eefb5 24 * 5/5/2015 Forked from https://developer.mbed.org/users/sam_grove/code/MMA845x/
falingtrea 1:41af2b3eefb5 25 *
falingtrea 1:41af2b3eefb5 26 * 6/20/2015 TAB Added setup functions and polling data capability. Also added RTOS calls
falingtrea 1:41af2b3eefb5 27 * TODO Still need to add interrupt support for other Accelerometer mode support
sam_grove 0:9d1e3a344e4f 28 */
mfiore 2:70df6adad015 29
sam_grove 0:9d1e3a344e4f 30 #include "MMA845x.h"
falingtrea 1:41af2b3eefb5 31 #include "mbed_debug.h"
falingtrea 1:41af2b3eefb5 32 #include "rtos.h"
mfiore 2:70df6adad015 33
falingtrea 1:41af2b3eefb5 34 MMA845x::MMA845x(I2C &i2c, SA0 const i2c_addr, InterruptIn* int1, InterruptIn* int2)
sam_grove 0:9d1e3a344e4f 35 {
sam_grove 0:9d1e3a344e4f 36 _i2c = &i2c;
falingtrea 1:41af2b3eefb5 37 _int1 = int1;
falingtrea 1:41af2b3eefb5 38 _int2 = int2;
mfiore 2:70df6adad015 39
falingtrea 1:41af2b3eefb5 40 _i2c_addr = (0x1c | i2c_addr) << 1;
mfiore 2:70df6adad015 41
sam_grove 0:9d1e3a344e4f 42 MMA845x::init();
sam_grove 0:9d1e3a344e4f 43
sam_grove 0:9d1e3a344e4f 44 return;
sam_grove 0:9d1e3a344e4f 45 }
sam_grove 0:9d1e3a344e4f 46
falingtrea 1:41af2b3eefb5 47 uint8_t MMA845x::init(void)
sam_grove 0:9d1e3a344e4f 48 {
falingtrea 1:41af2b3eefb5 49 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 50 uint8_t i = 0;
falingtrea 1:41af2b3eefb5 51 char reg_val[1];
mfiore 2:70df6adad015 52
Mike Fiore 3:7c2fbf79f607 53 __disable_irq();
falingtrea 1:41af2b3eefb5 54 _i2c->frequency(100000);
Mike Fiore 3:7c2fbf79f607 55 __enable_irq();
falingtrea 1:41af2b3eefb5 56 _who_am_i = 0x00;
mfiore 2:70df6adad015 57
falingtrea 1:41af2b3eefb5 58 // Reset all registers to POR values
falingtrea 1:41af2b3eefb5 59 result = MMA845x::writeRegister(CTRL_REG2, 0xFF); //REG 0x2B
mfiore 2:70df6adad015 60 if (result == 0) {
falingtrea 1:41af2b3eefb5 61
mfiore 2:70df6adad015 62 do {
mfiore 2:70df6adad015 63 // wait for the reset bit to clear. readRegister may error out so we re-try 10 times
mfiore 2:70df6adad015 64 osDelay(200);
mfiore 2:70df6adad015 65 reg_val[0] = 0x40;
mfiore 2:70df6adad015 66 result = MMA845x::readRegister(CTRL_REG2,1,reg_val);
mfiore 2:70df6adad015 67 reg_val[0] = reg_val[0] & 0x40;
mfiore 2:70df6adad015 68 i++;
mfiore 2:70df6adad015 69 } while(((reg_val[0] != 0)||( result != 0)) && (i<=10));
falingtrea 1:41af2b3eefb5 70 }
falingtrea 1:41af2b3eefb5 71
mfiore 2:70df6adad015 72 if (result == 0) {
falingtrea 1:41af2b3eefb5 73 result = MMA845x::readRegister(WHO_AM_I,1,reg_val);
falingtrea 1:41af2b3eefb5 74 }
falingtrea 1:41af2b3eefb5 75
mfiore 2:70df6adad015 76 switch (reg_val[0]) {
mfiore 2:70df6adad015 77 case MMA8451:
mfiore 2:70df6adad015 78 case MMA8452:
mfiore 2:70df6adad015 79 case MMA8453:
mfiore 2:70df6adad015 80 _who_am_i= reg_val[0];
mfiore 2:70df6adad015 81 if ((_int1 == NULL) && (_int2 == NULL))
mfiore 2:70df6adad015 82 _polling_mode = true;
mfiore 2:70df6adad015 83 else _polling_mode = false;
mfiore 2:70df6adad015 84 break;
mfiore 2:70df6adad015 85 default:
mfiore 2:70df6adad015 86 debug ("Device not supported by this library!\n\r");
mfiore 2:70df6adad015 87 result = 1;
falingtrea 1:41af2b3eefb5 88 }
falingtrea 1:41af2b3eefb5 89
mfiore 2:70df6adad015 90 if(result != 0) {
falingtrea 1:41af2b3eefb5 91 debug("MMA845x:init failed\n\r");
falingtrea 1:41af2b3eefb5 92 }
mfiore 2:70df6adad015 93
falingtrea 1:41af2b3eefb5 94
mfiore 2:70df6adad015 95 return result;
falingtrea 1:41af2b3eefb5 96 }
falingtrea 1:41af2b3eefb5 97
falingtrea 1:41af2b3eefb5 98 uint8_t MMA845x::setCommonParameters(RANGE range, RESOLUTION resolution, LOW_NOISE lo_noise,
mfiore 2:70df6adad015 99 DATA_RATE data_rate, OVERSAMPLE_MODE os_mode, HPF_MODE hpf_mode) const
falingtrea 1:41af2b3eefb5 100 {
falingtrea 1:41af2b3eefb5 101 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 102 char datain[1];
falingtrea 1:41af2b3eefb5 103 uint8_t dataout = 0;
falingtrea 1:41af2b3eefb5 104
falingtrea 1:41af2b3eefb5 105 result |= MMA845x::readRegister(SYSMOD,1,datain); // Make sure MMA845x is in Stand-By mode
mfiore 2:70df6adad015 106 if ((datain[0] & 0x03) != 0 ) {
mfiore 2:70df6adad015 107 debug ("MMA845x not in STAND BY mode\n\f");
falingtrea 1:41af2b3eefb5 108 debug("MMA845x:setCommonParameters failed\n\r");
falingtrea 1:41af2b3eefb5 109 result = 1;
falingtrea 1:41af2b3eefb5 110 return result;
falingtrea 1:41af2b3eefb5 111 }
falingtrea 1:41af2b3eefb5 112
falingtrea 1:41af2b3eefb5 113 result |= MMA845x::readRegister(CTRL_REG1, 1, datain);
falingtrea 1:41af2b3eefb5 114 dataout = (datain[0] & 0xB1) | resolution | lo_noise | data_rate;
falingtrea 1:41af2b3eefb5 115 result |= MMA845x::writeRegister(CTRL_REG1, dataout); // Set resolution, Low Noise mode, and data rate
falingtrea 1:41af2b3eefb5 116
falingtrea 1:41af2b3eefb5 117 result |= MMA845x::readRegister(CTRL_REG2,1, datain);
falingtrea 1:41af2b3eefb5 118 dataout = (datain[0] & 0xFB) | os_mode;
falingtrea 1:41af2b3eefb5 119 result |= MMA845x::writeRegister(CTRL_REG2, dataout); // Set Oversample mode
falingtrea 1:41af2b3eefb5 120
falingtrea 1:41af2b3eefb5 121 result |= MMA845x::readRegister(XYZ_DATA_CFG,1, datain);
falingtrea 1:41af2b3eefb5 122 dataout = range | hpf_mode;
falingtrea 1:41af2b3eefb5 123 result |= MMA845x::writeRegister(XYZ_DATA_CFG, dataout); //Set HPF mode and range
falingtrea 1:41af2b3eefb5 124
falingtrea 1:41af2b3eefb5 125 // result |= MMA845x::readRegister(HP_FILTER_CUTOFF,1, datain);
falingtrea 1:41af2b3eefb5 126 // result |= MMA845x::writeRegister(HP_FILTER_CUTOFF, dataout); //REG 0xF HPF settings
falingtrea 1:41af2b3eefb5 127
mfiore 2:70df6adad015 128 if(result != 0) {
falingtrea 1:41af2b3eefb5 129 debug("MMA845x:setParameters failed\n\r");
falingtrea 1:41af2b3eefb5 130 }
mfiore 2:70df6adad015 131
mfiore 2:70df6adad015 132 return result;
mfiore 2:70df6adad015 133
falingtrea 1:41af2b3eefb5 134 }
falingtrea 1:41af2b3eefb5 135
falingtrea 1:41af2b3eefb5 136 uint8_t MMA845x::enableMotionDetect(void) const
falingtrea 1:41af2b3eefb5 137 {
falingtrea 1:41af2b3eefb5 138 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 139 return result;
mfiore 2:70df6adad015 140 }
mfiore 2:70df6adad015 141
falingtrea 1:41af2b3eefb5 142 uint8_t MMA845x::enablePulseDetect(void) const
falingtrea 1:41af2b3eefb5 143 {
falingtrea 1:41af2b3eefb5 144 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 145 return result;
mfiore 2:70df6adad015 146 }
falingtrea 1:41af2b3eefb5 147
falingtrea 1:41af2b3eefb5 148 uint8_t MMA845x::enableOrientationDetect(void) const
falingtrea 1:41af2b3eefb5 149 {
falingtrea 1:41af2b3eefb5 150 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 151
mfiore 2:70df6adad015 152 if(_who_am_i != MMA8451) {
falingtrea 1:41af2b3eefb5 153 debug("%s %d: Feature not compatible with the connected device.\n", __FILE__, __LINE__);
falingtrea 1:41af2b3eefb5 154 result = 1;
falingtrea 1:41af2b3eefb5 155 }
mfiore 2:70df6adad015 156
falingtrea 1:41af2b3eefb5 157 return result;
falingtrea 1:41af2b3eefb5 158 }
falingtrea 1:41af2b3eefb5 159
falingtrea 1:41af2b3eefb5 160 uint8_t MMA845x::enableTransientDetect(void) const
falingtrea 1:41af2b3eefb5 161 {
falingtrea 1:41af2b3eefb5 162 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 163 return result;
mfiore 2:70df6adad015 164 }
mfiore 2:70df6adad015 165
falingtrea 1:41af2b3eefb5 166 uint8_t MMA845x::enableAutoSleep(void) const
falingtrea 1:41af2b3eefb5 167 {
falingtrea 1:41af2b3eefb5 168 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 169 return result;
mfiore 2:70df6adad015 170 }
falingtrea 1:41af2b3eefb5 171
falingtrea 1:41af2b3eefb5 172 uint8_t MMA845x::enableFIFO(void) const
falingtrea 1:41af2b3eefb5 173 {
falingtrea 1:41af2b3eefb5 174 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 175
mfiore 2:70df6adad015 176 if(_who_am_i != MMA8451) {
falingtrea 1:41af2b3eefb5 177 debug("%s %d: Feature not compatible with the connected device.\n", __FILE__, __LINE__);
falingtrea 1:41af2b3eefb5 178 result = 1;
falingtrea 1:41af2b3eefb5 179 }
mfiore 2:70df6adad015 180
falingtrea 1:41af2b3eefb5 181 return result;
sam_grove 0:9d1e3a344e4f 182 }
sam_grove 0:9d1e3a344e4f 183
falingtrea 1:41af2b3eefb5 184 uint8_t MMA845x::activeMode(void) const
falingtrea 1:41af2b3eefb5 185 {
falingtrea 1:41af2b3eefb5 186 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 187 char datain[1];
falingtrea 1:41af2b3eefb5 188 uint8_t dataout;
falingtrea 1:41af2b3eefb5 189
falingtrea 1:41af2b3eefb5 190 result |= MMA845x::readRegister(CTRL_REG1,1, datain);
falingtrea 1:41af2b3eefb5 191 dataout = (datain[0] & 0xFE) | 0x01 ;
falingtrea 1:41af2b3eefb5 192 result |= MMA845x::writeRegister(CTRL_REG1, dataout); // Set to active mode
falingtrea 1:41af2b3eefb5 193
falingtrea 1:41af2b3eefb5 194 return result;
mfiore 2:70df6adad015 195 }
falingtrea 1:41af2b3eefb5 196 uint8_t MMA845x::standbyMode(void) const
falingtrea 1:41af2b3eefb5 197 {
falingtrea 1:41af2b3eefb5 198 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 199 char datain[1];
falingtrea 1:41af2b3eefb5 200 uint8_t dataout;
falingtrea 1:41af2b3eefb5 201
falingtrea 1:41af2b3eefb5 202 result |= MMA845x::readRegister(CTRL_REG1,1, datain);
falingtrea 1:41af2b3eefb5 203 dataout = (datain[0] & 0xFE);
falingtrea 1:41af2b3eefb5 204 result |= MMA845x::writeRegister(CTRL_REG1, dataout); // Set to standby mode
falingtrea 1:41af2b3eefb5 205
falingtrea 1:41af2b3eefb5 206 return result;
mfiore 2:70df6adad015 207 }
falingtrea 1:41af2b3eefb5 208
falingtrea 1:41af2b3eefb5 209 uint8_t MMA845x::getStatus(void) const
sam_grove 0:9d1e3a344e4f 210 {
falingtrea 1:41af2b3eefb5 211 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 212 char datain[1];
falingtrea 1:41af2b3eefb5 213 uint8_t dataout;
falingtrea 1:41af2b3eefb5 214
falingtrea 1:41af2b3eefb5 215 result = MMA845x::readRegister(STATUS,1, datain);
falingtrea 1:41af2b3eefb5 216
falingtrea 1:41af2b3eefb5 217 if (result != 0)
mfiore 2:70df6adad015 218 dataout = result;
falingtrea 1:41af2b3eefb5 219 else
mfiore 2:70df6adad015 220 dataout = datain[0];
falingtrea 1:41af2b3eefb5 221
falingtrea 1:41af2b3eefb5 222 return dataout;
mfiore 2:70df6adad015 223 }
falingtrea 1:41af2b3eefb5 224
falingtrea 1:41af2b3eefb5 225 int16_t MMA845x::getX(void)
falingtrea 1:41af2b3eefb5 226 {
falingtrea 1:41af2b3eefb5 227 char datain[2];
falingtrea 1:41af2b3eefb5 228
mfiore 2:70df6adad015 229 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 230 MMA845x::readRegister(OUT_X_MSB,2, datain);
falingtrea 1:41af2b3eefb5 231 _data._x = ((datain[0] << 8) | datain[1]); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 232 _data._x /= 4; /* need to shift first to preserve sign then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 233 }
mfiore 2:70df6adad015 234 return _data._x;
falingtrea 1:41af2b3eefb5 235
sam_grove 0:9d1e3a344e4f 236 }
mfiore 2:70df6adad015 237
falingtrea 1:41af2b3eefb5 238 int16_t MMA845x::getY(void)
sam_grove 0:9d1e3a344e4f 239 {
falingtrea 1:41af2b3eefb5 240 char datain[2];
falingtrea 1:41af2b3eefb5 241
mfiore 2:70df6adad015 242 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 243 MMA845x::readRegister(OUT_Y_MSB,2, datain);
falingtrea 1:41af2b3eefb5 244 _data._y = ((datain[0] << 8) | datain[1]); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 245 _data._y /= 4; /* need to shift first to preserve sign then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 246 }
mfiore 2:70df6adad015 247 return _data._y;
sam_grove 0:9d1e3a344e4f 248 }
sam_grove 0:9d1e3a344e4f 249
falingtrea 1:41af2b3eefb5 250 int16_t MMA845x::getZ(void)
sam_grove 0:9d1e3a344e4f 251 {
falingtrea 1:41af2b3eefb5 252 char datain[2];
falingtrea 1:41af2b3eefb5 253
mfiore 2:70df6adad015 254 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 255 MMA845x::readRegister(OUT_Z_MSB,2, datain);
falingtrea 1:41af2b3eefb5 256 _data._z = ((datain[0] << 8) | datain[1]); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 257 _data._z /= 4; /* need to shift first to preserve sign then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 258 }
falingtrea 1:41af2b3eefb5 259
sam_grove 0:9d1e3a344e4f 260 return _data._z;
sam_grove 0:9d1e3a344e4f 261 }
mfiore 2:70df6adad015 262
falingtrea 1:41af2b3eefb5 263 MMA845x_DATA MMA845x::getXYZ(void)
sam_grove 0:9d1e3a344e4f 264 {
falingtrea 1:41af2b3eefb5 265 char datain[6];
falingtrea 1:41af2b3eefb5 266
mfiore 2:70df6adad015 267 if (_polling_mode) {
falingtrea 1:41af2b3eefb5 268 MMA845x::readRegister(OUT_X_MSB,6, datain); /* data is 14 bit signed with 2 LSB = 0 */
falingtrea 1:41af2b3eefb5 269 _data._x = ((datain[0] << 8) | datain[1]); /* need to shift first to preserve sign */
falingtrea 1:41af2b3eefb5 270 _data._x /= 4; /* then /4 to remove LSBs */
falingtrea 1:41af2b3eefb5 271 _data._y = ((datain[2] << 8) | datain[3]);
falingtrea 1:41af2b3eefb5 272 _data._y /= 4;
falingtrea 1:41af2b3eefb5 273 _data._z = ((datain[4] << 8) | datain[5]);
falingtrea 1:41af2b3eefb5 274 _data._z /= 4;
falingtrea 1:41af2b3eefb5 275 }
falingtrea 1:41af2b3eefb5 276
sam_grove 0:9d1e3a344e4f 277 return _data;
sam_grove 0:9d1e3a344e4f 278 }
sam_grove 0:9d1e3a344e4f 279
falingtrea 1:41af2b3eefb5 280 char MMA845x::getWhoAmI(void) const
falingtrea 1:41af2b3eefb5 281 {
falingtrea 1:41af2b3eefb5 282 return _who_am_i;
falingtrea 1:41af2b3eefb5 283 }
falingtrea 1:41af2b3eefb5 284
falingtrea 1:41af2b3eefb5 285 uint8_t MMA845x::writeRegister(uint8_t const reg, uint8_t const data) const
sam_grove 0:9d1e3a344e4f 286 {
sam_grove 0:9d1e3a344e4f 287 char buf[2] = {reg, data};
sam_grove 0:9d1e3a344e4f 288 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 289
falingtrea 1:41af2b3eefb5 290 buf[0] = reg;
falingtrea 1:41af2b3eefb5 291 buf[1] = data;
mfiore 2:70df6adad015 292
Mike Fiore 3:7c2fbf79f607 293 __disable_irq(); // Tickers and other timebase events can jack up the I2C bus for some devices
falingtrea 1:41af2b3eefb5 294 result |= _i2c->write(_i2c_addr, buf, 2);
Mike Fiore 3:7c2fbf79f607 295 __enable_irq(); // Just need to block during the transaction
mfiore 2:70df6adad015 296
mfiore 2:70df6adad015 297 if(result != 0) {
falingtrea 1:41af2b3eefb5 298 debug("MMA845x:writeRegister failed r-%d\n\r",result);
sam_grove 0:9d1e3a344e4f 299 }
mfiore 2:70df6adad015 300
falingtrea 1:41af2b3eefb5 301 return result;
sam_grove 0:9d1e3a344e4f 302 }
sam_grove 0:9d1e3a344e4f 303
falingtrea 1:41af2b3eefb5 304 uint8_t MMA845x::readRegister(uint8_t const reg, uint8_t count, char* data) const
sam_grove 0:9d1e3a344e4f 305 {
falingtrea 1:41af2b3eefb5 306 uint8_t result = 0;
falingtrea 1:41af2b3eefb5 307 char reg_out[1];
mfiore 2:70df6adad015 308
falingtrea 1:41af2b3eefb5 309 reg_out[0] = reg;
Mike Fiore 3:7c2fbf79f607 310 __disable_irq(); // Tickers and other timebase events can jack up the I2C bus for some devices
mfiore 2:70df6adad015 311 result |= _i2c->write(_i2c_addr,reg_out,1,true);
Mike Fiore 3:7c2fbf79f607 312 __enable_irq(); // Just need to block during the transaction
falingtrea 1:41af2b3eefb5 313
mfiore 2:70df6adad015 314 if(result != 0) {
falingtrea 1:41af2b3eefb5 315 debug("MMA845x::readRegister failed write r- %d\n\r", result);
falingtrea 1:41af2b3eefb5 316 return result;
sam_grove 0:9d1e3a344e4f 317 }
mfiore 2:70df6adad015 318
Mike Fiore 3:7c2fbf79f607 319 __disable_irq(); // Tickers and other timebase events can jack up the I2C bus for some devices
mfiore 2:70df6adad015 320 result |= _i2c->read(_i2c_addr,data,count,false);
Mike Fiore 3:7c2fbf79f607 321 __enable_irq(); // Just need to block during the transaction
mfiore 2:70df6adad015 322
mfiore 2:70df6adad015 323 if(result != 0) {
falingtrea 1:41af2b3eefb5 324 debug("MMA845x::readRegister failed read r-%d\n\r",result);
sam_grove 0:9d1e3a344e4f 325 }
mfiore 2:70df6adad015 326
falingtrea 1:41af2b3eefb5 327 return result;
sam_grove 0:9d1e3a344e4f 328 }