Committer:
donatien
Date:
Thu May 31 16:10:44 2012 +0000
Revision:
0:5c1bd3cd668d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:5c1bd3cd668d 1 /**
donatien 0:5c1bd3cd668d 2 * @author Aaron Berk
donatien 0:5c1bd3cd668d 3 *
donatien 0:5c1bd3cd668d 4 * @section LICENSE
donatien 0:5c1bd3cd668d 5 *
donatien 0:5c1bd3cd668d 6 * Copyright (c) 2010 ARM Limited
donatien 0:5c1bd3cd668d 7 *
donatien 0:5c1bd3cd668d 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
donatien 0:5c1bd3cd668d 9 * of this software and associated documentation files (the "Software"), to deal
donatien 0:5c1bd3cd668d 10 * in the Software without restriction, including without limitation the rights
donatien 0:5c1bd3cd668d 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
donatien 0:5c1bd3cd668d 12 * copies of the Software, and to permit persons to whom the Software is
donatien 0:5c1bd3cd668d 13 * furnished to do so, subject to the following conditions:
donatien 0:5c1bd3cd668d 14 *
donatien 0:5c1bd3cd668d 15 * The above copyright notice and this permission notice shall be included in
donatien 0:5c1bd3cd668d 16 * all copies or substantial portions of the Software.
donatien 0:5c1bd3cd668d 17 *
donatien 0:5c1bd3cd668d 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
donatien 0:5c1bd3cd668d 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
donatien 0:5c1bd3cd668d 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
donatien 0:5c1bd3cd668d 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
donatien 0:5c1bd3cd668d 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 0:5c1bd3cd668d 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
donatien 0:5c1bd3cd668d 24 * THE SOFTWARE.
donatien 0:5c1bd3cd668d 25 *
donatien 0:5c1bd3cd668d 26 * @section DESCRIPTION
donatien 0:5c1bd3cd668d 27 *
donatien 0:5c1bd3cd668d 28 * ADXL345, triple axis, digital interface, accelerometer.
donatien 0:5c1bd3cd668d 29 *
donatien 0:5c1bd3cd668d 30 * Datasheet:
donatien 0:5c1bd3cd668d 31 *
donatien 0:5c1bd3cd668d 32 * http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
donatien 0:5c1bd3cd668d 33 */
donatien 0:5c1bd3cd668d 34
donatien 0:5c1bd3cd668d 35 /**
donatien 0:5c1bd3cd668d 36 * Includes
donatien 0:5c1bd3cd668d 37 */
donatien 0:5c1bd3cd668d 38 #include "ADXL345.h"
donatien 0:5c1bd3cd668d 39
donatien 0:5c1bd3cd668d 40 ADXL345::ADXL345(PinName mosi,
donatien 0:5c1bd3cd668d 41 PinName miso,
donatien 0:5c1bd3cd668d 42 PinName sck,
donatien 0:5c1bd3cd668d 43 PinName cs) : spi_(mosi, miso, sck), nCS_(cs) {
donatien 0:5c1bd3cd668d 44
donatien 0:5c1bd3cd668d 45 //2MHz, allowing us to use the fastest data rates.
donatien 0:5c1bd3cd668d 46 spi_.frequency(2000000);
donatien 0:5c1bd3cd668d 47 spi_.format(8,3);
donatien 0:5c1bd3cd668d 48
donatien 0:5c1bd3cd668d 49 nCS_ = 1;
donatien 0:5c1bd3cd668d 50
donatien 0:5c1bd3cd668d 51 wait_us(500);
donatien 0:5c1bd3cd668d 52
donatien 0:5c1bd3cd668d 53 }
donatien 0:5c1bd3cd668d 54
donatien 0:5c1bd3cd668d 55 int ADXL345::getDevId(void) {
donatien 0:5c1bd3cd668d 56
donatien 0:5c1bd3cd668d 57 return oneByteRead(ADXL345_DEVID_REG);
donatien 0:5c1bd3cd668d 58
donatien 0:5c1bd3cd668d 59 }
donatien 0:5c1bd3cd668d 60
donatien 0:5c1bd3cd668d 61 int ADXL345::getTapThreshold(void) {
donatien 0:5c1bd3cd668d 62
donatien 0:5c1bd3cd668d 63 return oneByteRead(ADXL345_THRESH_TAP_REG);
donatien 0:5c1bd3cd668d 64
donatien 0:5c1bd3cd668d 65 }
donatien 0:5c1bd3cd668d 66
donatien 0:5c1bd3cd668d 67 void ADXL345::setTapThreshold(int threshold) {
donatien 0:5c1bd3cd668d 68
donatien 0:5c1bd3cd668d 69 oneByteWrite(ADXL345_THRESH_TAP_REG, threshold);
donatien 0:5c1bd3cd668d 70
donatien 0:5c1bd3cd668d 71 }
donatien 0:5c1bd3cd668d 72
donatien 0:5c1bd3cd668d 73 int ADXL345::getOffset(int axis) {
donatien 0:5c1bd3cd668d 74
donatien 0:5c1bd3cd668d 75 int address = 0;
donatien 0:5c1bd3cd668d 76
donatien 0:5c1bd3cd668d 77 if (axis == ADXL345_X) {
donatien 0:5c1bd3cd668d 78 address = ADXL345_OFSX_REG;
donatien 0:5c1bd3cd668d 79 } else if (axis == ADXL345_Y) {
donatien 0:5c1bd3cd668d 80 address = ADXL345_OFSY_REG;
donatien 0:5c1bd3cd668d 81 } else if (axis == ADXL345_Z) {
donatien 0:5c1bd3cd668d 82 address = ADXL345_OFSZ_REG;
donatien 0:5c1bd3cd668d 83 }
donatien 0:5c1bd3cd668d 84
donatien 0:5c1bd3cd668d 85 return oneByteRead(address);
donatien 0:5c1bd3cd668d 86
donatien 0:5c1bd3cd668d 87 }
donatien 0:5c1bd3cd668d 88
donatien 0:5c1bd3cd668d 89 void ADXL345::setOffset(int axis, char offset) {
donatien 0:5c1bd3cd668d 90
donatien 0:5c1bd3cd668d 91 int address = 0;
donatien 0:5c1bd3cd668d 92
donatien 0:5c1bd3cd668d 93 if (axis == ADXL345_X) {
donatien 0:5c1bd3cd668d 94 address = ADXL345_OFSX_REG;
donatien 0:5c1bd3cd668d 95 } else if (axis == ADXL345_Y) {
donatien 0:5c1bd3cd668d 96 address = ADXL345_OFSY_REG;
donatien 0:5c1bd3cd668d 97 } else if (axis == ADXL345_Z) {
donatien 0:5c1bd3cd668d 98 address = ADXL345_OFSZ_REG;
donatien 0:5c1bd3cd668d 99 }
donatien 0:5c1bd3cd668d 100
donatien 0:5c1bd3cd668d 101 return oneByteWrite(address, offset);
donatien 0:5c1bd3cd668d 102
donatien 0:5c1bd3cd668d 103 }
donatien 0:5c1bd3cd668d 104
donatien 0:5c1bd3cd668d 105 int ADXL345::getTapDuration(void) {
donatien 0:5c1bd3cd668d 106
donatien 0:5c1bd3cd668d 107 return oneByteRead(ADXL345_DUR_REG)*625;
donatien 0:5c1bd3cd668d 108
donatien 0:5c1bd3cd668d 109 }
donatien 0:5c1bd3cd668d 110
donatien 0:5c1bd3cd668d 111 void ADXL345::setTapDuration(int duration_us) {
donatien 0:5c1bd3cd668d 112
donatien 0:5c1bd3cd668d 113 int tapDuration = duration_us / 625;
donatien 0:5c1bd3cd668d 114
donatien 0:5c1bd3cd668d 115 oneByteWrite(ADXL345_DUR_REG, tapDuration);
donatien 0:5c1bd3cd668d 116
donatien 0:5c1bd3cd668d 117 }
donatien 0:5c1bd3cd668d 118
donatien 0:5c1bd3cd668d 119 float ADXL345::getTapLatency(void) {
donatien 0:5c1bd3cd668d 120
donatien 0:5c1bd3cd668d 121 return oneByteRead(ADXL345_LATENT_REG)*1.25;
donatien 0:5c1bd3cd668d 122
donatien 0:5c1bd3cd668d 123 }
donatien 0:5c1bd3cd668d 124
donatien 0:5c1bd3cd668d 125 void ADXL345::setTapLatency(int latency_ms) {
donatien 0:5c1bd3cd668d 126
donatien 0:5c1bd3cd668d 127 int tapLatency = latency_ms / 1.25;
donatien 0:5c1bd3cd668d 128
donatien 0:5c1bd3cd668d 129 oneByteWrite(ADXL345_LATENT_REG, tapLatency);
donatien 0:5c1bd3cd668d 130
donatien 0:5c1bd3cd668d 131 }
donatien 0:5c1bd3cd668d 132
donatien 0:5c1bd3cd668d 133 float ADXL345::getWindowTime(void) {
donatien 0:5c1bd3cd668d 134
donatien 0:5c1bd3cd668d 135 return oneByteRead(ADXL345_WINDOW_REG)*1.25;
donatien 0:5c1bd3cd668d 136
donatien 0:5c1bd3cd668d 137 }
donatien 0:5c1bd3cd668d 138
donatien 0:5c1bd3cd668d 139 void ADXL345::setWindowTime(int window_ms) {
donatien 0:5c1bd3cd668d 140
donatien 0:5c1bd3cd668d 141 int windowTime = window_ms / 1.25;
donatien 0:5c1bd3cd668d 142
donatien 0:5c1bd3cd668d 143 oneByteWrite(ADXL345_WINDOW_REG, windowTime);
donatien 0:5c1bd3cd668d 144
donatien 0:5c1bd3cd668d 145 }
donatien 0:5c1bd3cd668d 146
donatien 0:5c1bd3cd668d 147 int ADXL345::getActivityThreshold(void) {
donatien 0:5c1bd3cd668d 148
donatien 0:5c1bd3cd668d 149 return oneByteRead(ADXL345_THRESH_ACT_REG);
donatien 0:5c1bd3cd668d 150
donatien 0:5c1bd3cd668d 151 }
donatien 0:5c1bd3cd668d 152
donatien 0:5c1bd3cd668d 153 void ADXL345::setActivityThreshold(int threshold) {
donatien 0:5c1bd3cd668d 154
donatien 0:5c1bd3cd668d 155 oneByteWrite(ADXL345_THRESH_ACT_REG, threshold);
donatien 0:5c1bd3cd668d 156
donatien 0:5c1bd3cd668d 157 }
donatien 0:5c1bd3cd668d 158
donatien 0:5c1bd3cd668d 159 int ADXL345::getInactivityThreshold(void) {
donatien 0:5c1bd3cd668d 160
donatien 0:5c1bd3cd668d 161 return oneByteRead(ADXL345_THRESH_INACT_REG);
donatien 0:5c1bd3cd668d 162
donatien 0:5c1bd3cd668d 163 }
donatien 0:5c1bd3cd668d 164
donatien 0:5c1bd3cd668d 165 void ADXL345::setInactivityThreshold(int threshold) {
donatien 0:5c1bd3cd668d 166
donatien 0:5c1bd3cd668d 167 return oneByteWrite(ADXL345_THRESH_INACT_REG, threshold);
donatien 0:5c1bd3cd668d 168
donatien 0:5c1bd3cd668d 169 }
donatien 0:5c1bd3cd668d 170
donatien 0:5c1bd3cd668d 171 int ADXL345::getTimeInactivity(void) {
donatien 0:5c1bd3cd668d 172
donatien 0:5c1bd3cd668d 173 return oneByteRead(ADXL345_TIME_INACT_REG);
donatien 0:5c1bd3cd668d 174
donatien 0:5c1bd3cd668d 175 }
donatien 0:5c1bd3cd668d 176
donatien 0:5c1bd3cd668d 177 void ADXL345::setTimeInactivity(int timeInactivity) {
donatien 0:5c1bd3cd668d 178
donatien 0:5c1bd3cd668d 179 oneByteWrite(ADXL345_TIME_INACT_REG, timeInactivity);
donatien 0:5c1bd3cd668d 180
donatien 0:5c1bd3cd668d 181 }
donatien 0:5c1bd3cd668d 182
donatien 0:5c1bd3cd668d 183 int ADXL345::getActivityInactivityControl(void) {
donatien 0:5c1bd3cd668d 184
donatien 0:5c1bd3cd668d 185 return oneByteRead(ADXL345_ACT_INACT_CTL_REG);
donatien 0:5c1bd3cd668d 186
donatien 0:5c1bd3cd668d 187 }
donatien 0:5c1bd3cd668d 188
donatien 0:5c1bd3cd668d 189 void ADXL345::setActivityInactivityControl(int settings) {
donatien 0:5c1bd3cd668d 190
donatien 0:5c1bd3cd668d 191 oneByteWrite(ADXL345_ACT_INACT_CTL_REG, settings);
donatien 0:5c1bd3cd668d 192
donatien 0:5c1bd3cd668d 193 }
donatien 0:5c1bd3cd668d 194
donatien 0:5c1bd3cd668d 195 int ADXL345::getFreefallThreshold(void) {
donatien 0:5c1bd3cd668d 196
donatien 0:5c1bd3cd668d 197 return oneByteRead(ADXL345_THRESH_FF_REG);
donatien 0:5c1bd3cd668d 198
donatien 0:5c1bd3cd668d 199 }
donatien 0:5c1bd3cd668d 200
donatien 0:5c1bd3cd668d 201 void ADXL345::setFreefallThreshold(int threshold) {
donatien 0:5c1bd3cd668d 202
donatien 0:5c1bd3cd668d 203 oneByteWrite(ADXL345_THRESH_FF_REG, threshold);
donatien 0:5c1bd3cd668d 204
donatien 0:5c1bd3cd668d 205 }
donatien 0:5c1bd3cd668d 206
donatien 0:5c1bd3cd668d 207 int ADXL345::getFreefallTime(void) {
donatien 0:5c1bd3cd668d 208
donatien 0:5c1bd3cd668d 209 return oneByteRead(ADXL345_TIME_FF_REG)*5;
donatien 0:5c1bd3cd668d 210
donatien 0:5c1bd3cd668d 211 }
donatien 0:5c1bd3cd668d 212
donatien 0:5c1bd3cd668d 213 void ADXL345::setFreefallTime(int freefallTime_ms) {
donatien 0:5c1bd3cd668d 214
donatien 0:5c1bd3cd668d 215 int freefallTime = freefallTime_ms / 5;
donatien 0:5c1bd3cd668d 216
donatien 0:5c1bd3cd668d 217 oneByteWrite(ADXL345_TIME_FF_REG, freefallTime);
donatien 0:5c1bd3cd668d 218
donatien 0:5c1bd3cd668d 219 }
donatien 0:5c1bd3cd668d 220
donatien 0:5c1bd3cd668d 221 int ADXL345::getTapAxisControl(void) {
donatien 0:5c1bd3cd668d 222
donatien 0:5c1bd3cd668d 223 return oneByteRead(ADXL345_TAP_AXES_REG);
donatien 0:5c1bd3cd668d 224
donatien 0:5c1bd3cd668d 225 }
donatien 0:5c1bd3cd668d 226
donatien 0:5c1bd3cd668d 227 void ADXL345::setTapAxisControl(int settings) {
donatien 0:5c1bd3cd668d 228
donatien 0:5c1bd3cd668d 229 oneByteWrite(ADXL345_TAP_AXES_REG, settings);
donatien 0:5c1bd3cd668d 230
donatien 0:5c1bd3cd668d 231 }
donatien 0:5c1bd3cd668d 232
donatien 0:5c1bd3cd668d 233 int ADXL345::getTapSource(void) {
donatien 0:5c1bd3cd668d 234
donatien 0:5c1bd3cd668d 235 return oneByteRead(ADXL345_ACT_TAP_STATUS_REG);
donatien 0:5c1bd3cd668d 236
donatien 0:5c1bd3cd668d 237 }
donatien 0:5c1bd3cd668d 238
donatien 0:5c1bd3cd668d 239 void ADXL345::setPowerMode(char mode) {
donatien 0:5c1bd3cd668d 240
donatien 0:5c1bd3cd668d 241 //Get the current register contents, so we don't clobber the rate value.
donatien 0:5c1bd3cd668d 242 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
donatien 0:5c1bd3cd668d 243
donatien 0:5c1bd3cd668d 244 registerContents = (mode << 4) | registerContents;
donatien 0:5c1bd3cd668d 245
donatien 0:5c1bd3cd668d 246 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
donatien 0:5c1bd3cd668d 247
donatien 0:5c1bd3cd668d 248 }
donatien 0:5c1bd3cd668d 249
donatien 0:5c1bd3cd668d 250 int ADXL345::getPowerControl(void) {
donatien 0:5c1bd3cd668d 251
donatien 0:5c1bd3cd668d 252 return oneByteRead(ADXL345_POWER_CTL_REG);
donatien 0:5c1bd3cd668d 253
donatien 0:5c1bd3cd668d 254 }
donatien 0:5c1bd3cd668d 255
donatien 0:5c1bd3cd668d 256 void ADXL345::setPowerControl(int settings) {
donatien 0:5c1bd3cd668d 257
donatien 0:5c1bd3cd668d 258 oneByteWrite(ADXL345_POWER_CTL_REG, settings);
donatien 0:5c1bd3cd668d 259
donatien 0:5c1bd3cd668d 260 }
donatien 0:5c1bd3cd668d 261
donatien 0:5c1bd3cd668d 262 int ADXL345::getInterruptEnableControl(void) {
donatien 0:5c1bd3cd668d 263
donatien 0:5c1bd3cd668d 264 return oneByteRead(ADXL345_INT_ENABLE_REG);
donatien 0:5c1bd3cd668d 265
donatien 0:5c1bd3cd668d 266 }
donatien 0:5c1bd3cd668d 267
donatien 0:5c1bd3cd668d 268 void ADXL345::setInterruptEnableControl(int settings) {
donatien 0:5c1bd3cd668d 269
donatien 0:5c1bd3cd668d 270 oneByteWrite(ADXL345_INT_ENABLE_REG, settings);
donatien 0:5c1bd3cd668d 271
donatien 0:5c1bd3cd668d 272 }
donatien 0:5c1bd3cd668d 273
donatien 0:5c1bd3cd668d 274 int ADXL345::getInterruptMappingControl(void) {
donatien 0:5c1bd3cd668d 275
donatien 0:5c1bd3cd668d 276 return oneByteRead(ADXL345_INT_MAP_REG);
donatien 0:5c1bd3cd668d 277
donatien 0:5c1bd3cd668d 278 }
donatien 0:5c1bd3cd668d 279
donatien 0:5c1bd3cd668d 280 void ADXL345::setInterruptMappingControl(int settings) {
donatien 0:5c1bd3cd668d 281
donatien 0:5c1bd3cd668d 282 oneByteWrite(ADXL345_INT_MAP_REG, settings);
donatien 0:5c1bd3cd668d 283
donatien 0:5c1bd3cd668d 284 }
donatien 0:5c1bd3cd668d 285
donatien 0:5c1bd3cd668d 286 int ADXL345::getInterruptSource(void){
donatien 0:5c1bd3cd668d 287
donatien 0:5c1bd3cd668d 288 return oneByteRead(ADXL345_INT_SOURCE_REG);
donatien 0:5c1bd3cd668d 289
donatien 0:5c1bd3cd668d 290 }
donatien 0:5c1bd3cd668d 291
donatien 0:5c1bd3cd668d 292 int ADXL345::getDataFormatControl(void){
donatien 0:5c1bd3cd668d 293
donatien 0:5c1bd3cd668d 294 return oneByteRead(ADXL345_DATA_FORMAT_REG);
donatien 0:5c1bd3cd668d 295
donatien 0:5c1bd3cd668d 296 }
donatien 0:5c1bd3cd668d 297
donatien 0:5c1bd3cd668d 298 void ADXL345::setDataFormatControl(int settings){
donatien 0:5c1bd3cd668d 299
donatien 0:5c1bd3cd668d 300 oneByteWrite(ADXL345_DATA_FORMAT_REG, settings);
donatien 0:5c1bd3cd668d 301
donatien 0:5c1bd3cd668d 302 }
donatien 0:5c1bd3cd668d 303
donatien 0:5c1bd3cd668d 304 void ADXL345::setDataRate(int rate) {
donatien 0:5c1bd3cd668d 305
donatien 0:5c1bd3cd668d 306 //Get the current register contents, so we don't clobber the power bit.
donatien 0:5c1bd3cd668d 307 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
donatien 0:5c1bd3cd668d 308
donatien 0:5c1bd3cd668d 309 registerContents &= 0x10;
donatien 0:5c1bd3cd668d 310 registerContents |= rate;
donatien 0:5c1bd3cd668d 311
donatien 0:5c1bd3cd668d 312 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
donatien 0:5c1bd3cd668d 313
donatien 0:5c1bd3cd668d 314 }
donatien 0:5c1bd3cd668d 315
donatien 0:5c1bd3cd668d 316 void ADXL345::getOutput(int* readings){
donatien 0:5c1bd3cd668d 317
donatien 0:5c1bd3cd668d 318 char buffer[6];
donatien 0:5c1bd3cd668d 319
donatien 0:5c1bd3cd668d 320 multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
donatien 0:5c1bd3cd668d 321
donatien 0:5c1bd3cd668d 322 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
donatien 0:5c1bd3cd668d 323 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
donatien 0:5c1bd3cd668d 324 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
donatien 0:5c1bd3cd668d 325
donatien 0:5c1bd3cd668d 326 }
donatien 0:5c1bd3cd668d 327
donatien 0:5c1bd3cd668d 328 int ADXL345::getFifoControl(void){
donatien 0:5c1bd3cd668d 329
donatien 0:5c1bd3cd668d 330 return oneByteRead(ADXL345_FIFO_CTL);
donatien 0:5c1bd3cd668d 331
donatien 0:5c1bd3cd668d 332 }
donatien 0:5c1bd3cd668d 333
donatien 0:5c1bd3cd668d 334 void ADXL345::setFifoControl(int settings){
donatien 0:5c1bd3cd668d 335
donatien 0:5c1bd3cd668d 336 oneByteWrite(ADXL345_FIFO_STATUS, settings);
donatien 0:5c1bd3cd668d 337
donatien 0:5c1bd3cd668d 338 }
donatien 0:5c1bd3cd668d 339
donatien 0:5c1bd3cd668d 340 int ADXL345::getFifoStatus(void){
donatien 0:5c1bd3cd668d 341
donatien 0:5c1bd3cd668d 342 return oneByteRead(ADXL345_FIFO_STATUS);
donatien 0:5c1bd3cd668d 343
donatien 0:5c1bd3cd668d 344 }
donatien 0:5c1bd3cd668d 345
donatien 0:5c1bd3cd668d 346 int ADXL345::oneByteRead(int address) {
donatien 0:5c1bd3cd668d 347
donatien 0:5c1bd3cd668d 348 int tx = (ADXL345_SPI_READ | (address & 0x3F));
donatien 0:5c1bd3cd668d 349 int rx = 0;
donatien 0:5c1bd3cd668d 350
donatien 0:5c1bd3cd668d 351 nCS_ = 0;
donatien 0:5c1bd3cd668d 352 //Send address to read from.
donatien 0:5c1bd3cd668d 353 spi_.write(tx);
donatien 0:5c1bd3cd668d 354 //Read back contents of address.
donatien 0:5c1bd3cd668d 355 rx = spi_.write(0x00);
donatien 0:5c1bd3cd668d 356 nCS_ = 1;
donatien 0:5c1bd3cd668d 357
donatien 0:5c1bd3cd668d 358 return rx;
donatien 0:5c1bd3cd668d 359
donatien 0:5c1bd3cd668d 360 }
donatien 0:5c1bd3cd668d 361
donatien 0:5c1bd3cd668d 362 void ADXL345::oneByteWrite(int address, char data) {
donatien 0:5c1bd3cd668d 363
donatien 0:5c1bd3cd668d 364 int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
donatien 0:5c1bd3cd668d 365
donatien 0:5c1bd3cd668d 366 nCS_ = 0;
donatien 0:5c1bd3cd668d 367 //Send address to write to.
donatien 0:5c1bd3cd668d 368 spi_.write(tx);
donatien 0:5c1bd3cd668d 369 //Send data to be written.
donatien 0:5c1bd3cd668d 370 spi_.write(data);
donatien 0:5c1bd3cd668d 371 nCS_ = 1;
donatien 0:5c1bd3cd668d 372
donatien 0:5c1bd3cd668d 373 }
donatien 0:5c1bd3cd668d 374
donatien 0:5c1bd3cd668d 375 void ADXL345::multiByteRead(int startAddress, char* buffer, int size) {
donatien 0:5c1bd3cd668d 376
donatien 0:5c1bd3cd668d 377 int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
donatien 0:5c1bd3cd668d 378
donatien 0:5c1bd3cd668d 379 nCS_ = 0;
donatien 0:5c1bd3cd668d 380 //Send address to start reading from.
donatien 0:5c1bd3cd668d 381 spi_.write(tx);
donatien 0:5c1bd3cd668d 382
donatien 0:5c1bd3cd668d 383 for (int i = 0; i < size; i++) {
donatien 0:5c1bd3cd668d 384 buffer[i] = spi_.write(0x00);
donatien 0:5c1bd3cd668d 385 }
donatien 0:5c1bd3cd668d 386
donatien 0:5c1bd3cd668d 387 nCS_ = 1;
donatien 0:5c1bd3cd668d 388
donatien 0:5c1bd3cd668d 389 }
donatien 0:5c1bd3cd668d 390
donatien 0:5c1bd3cd668d 391 void ADXL345::multiByteWrite(int startAddress, char* buffer, int size) {
donatien 0:5c1bd3cd668d 392
donatien 0:5c1bd3cd668d 393 int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
donatien 0:5c1bd3cd668d 394
donatien 0:5c1bd3cd668d 395 nCS_ = 0;
donatien 0:5c1bd3cd668d 396 //Send address to start reading from.
donatien 0:5c1bd3cd668d 397 spi_.write(tx);
donatien 0:5c1bd3cd668d 398
donatien 0:5c1bd3cd668d 399 for (int i = 0; i < size; i++) {
donatien 0:5c1bd3cd668d 400 buffer[i] = spi_.write(0x00);
donatien 0:5c1bd3cd668d 401 }
donatien 0:5c1bd3cd668d 402
donatien 0:5c1bd3cd668d 403 nCS_ = 1;
donatien 0:5c1bd3cd668d 404
donatien 0:5c1bd3cd668d 405 }