A collection of Analog Devices drivers for the mbed platform

For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all

Committer:
Adrian Suciu
Date:
Tue May 17 14:21:17 2016 +0300
Revision:
19:fb92949e59c9
Child:
20:9790e53d6e26
Added ADXL362 driver & reference project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Adrian Suciu 19:fb92949e59c9 1 #include <stdint.h>
Adrian Suciu 19:fb92949e59c9 2 #include "mbed.h"
Adrian Suciu 19:fb92949e59c9 3 #include "ADXL362.h"
Adrian Suciu 19:fb92949e59c9 4
Adrian Suciu 19:fb92949e59c9 5 ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
Adrian Suciu 19:fb92949e59c9 6 adxl362(MOSI, MISO, SCK), cs(CS), int1(NULL), int2(NULL), int1_poll(NC), int2_poll(
Adrian Suciu 19:fb92949e59c9 7 NC)
Adrian Suciu 19:fb92949e59c9 8 {
Adrian Suciu 19:fb92949e59c9 9 cs = true; // cs is active low
Adrian Suciu 19:fb92949e59c9 10 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 11 temp_stored_in_fifo = false;
Adrian Suciu 19:fb92949e59c9 12 int1_act_low = true;
Adrian Suciu 19:fb92949e59c9 13 int2_act_low = true;
Adrian Suciu 19:fb92949e59c9 14 }
Adrian Suciu 19:fb92949e59c9 15
Adrian Suciu 19:fb92949e59c9 16 void ADXL362::frequency(int hz)
Adrian Suciu 19:fb92949e59c9 17 {
Adrian Suciu 19:fb92949e59c9 18 adxl362.frequency(hz);
Adrian Suciu 19:fb92949e59c9 19 }
Adrian Suciu 19:fb92949e59c9 20
Adrian Suciu 19:fb92949e59c9 21 void ADXL362::reset()
Adrian Suciu 19:fb92949e59c9 22 {
Adrian Suciu 19:fb92949e59c9 23 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 24 cs = false;
Adrian Suciu 19:fb92949e59c9 25 // Writing Code 0x52 (representing the letter, R, in ASCII or unicode) to this register immediately resets the ADXL362.
Adrian Suciu 19:fb92949e59c9 26 write_reg(SOFT_RESET, 0x52);
Adrian Suciu 19:fb92949e59c9 27 cs = true;
Adrian Suciu 19:fb92949e59c9 28 // A latency of approximately 0.5 ms is required after soft reset.
Adrian Suciu 19:fb92949e59c9 29 }
Adrian Suciu 19:fb92949e59c9 30
Adrian Suciu 19:fb92949e59c9 31 void ADXL362::write_reg(ADXL362_register_t reg, uint8_t data)
Adrian Suciu 19:fb92949e59c9 32 {
Adrian Suciu 19:fb92949e59c9 33 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 34 cs = false;
Adrian Suciu 19:fb92949e59c9 35 adxl362.write(WRITE_REG_CMD);
Adrian Suciu 19:fb92949e59c9 36 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 19:fb92949e59c9 37 adxl362.write(static_cast<uint8_t>(data));
Adrian Suciu 19:fb92949e59c9 38 cs = true;
Adrian Suciu 19:fb92949e59c9 39 }
Adrian Suciu 19:fb92949e59c9 40
Adrian Suciu 19:fb92949e59c9 41 uint8_t ADXL362::read_reg(ADXL362_register_t reg)
Adrian Suciu 19:fb92949e59c9 42 {
Adrian Suciu 19:fb92949e59c9 43 uint8_t ret_val;
Adrian Suciu 19:fb92949e59c9 44 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 45 cs = false;
Adrian Suciu 19:fb92949e59c9 46 adxl362.write(READ_REG_CMD);
Adrian Suciu 19:fb92949e59c9 47 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 19:fb92949e59c9 48 ret_val = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 49 cs = true;
Adrian Suciu 19:fb92949e59c9 50 return ret_val;
Adrian Suciu 19:fb92949e59c9 51 }
Adrian Suciu 19:fb92949e59c9 52
Adrian Suciu 19:fb92949e59c9 53 void ADXL362::write_reg_u16(ADXL362_register_t reg, uint16_t data)
Adrian Suciu 19:fb92949e59c9 54 {
Adrian Suciu 19:fb92949e59c9 55 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 56
Adrian Suciu 19:fb92949e59c9 57 cs = false;
Adrian Suciu 19:fb92949e59c9 58 adxl362.write(WRITE_REG_CMD);
Adrian Suciu 19:fb92949e59c9 59 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 19:fb92949e59c9 60 adxl362.write(static_cast<uint8_t>(data & 0xff));
Adrian Suciu 19:fb92949e59c9 61 adxl362.write(static_cast<uint8_t>((data & 0xff00) >> 8));
Adrian Suciu 19:fb92949e59c9 62
Adrian Suciu 19:fb92949e59c9 63 cs = true;
Adrian Suciu 19:fb92949e59c9 64 }
Adrian Suciu 19:fb92949e59c9 65 uint16_t ADXL362::read_reg_u16(ADXL362_register_t reg)
Adrian Suciu 19:fb92949e59c9 66 {
Adrian Suciu 19:fb92949e59c9 67 uint16_t ret_val = 0;
Adrian Suciu 19:fb92949e59c9 68 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 69
Adrian Suciu 19:fb92949e59c9 70 cs = false;
Adrian Suciu 19:fb92949e59c9 71 adxl362.write(READ_REG_CMD);
Adrian Suciu 19:fb92949e59c9 72 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 19:fb92949e59c9 73 ret_val = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 74 ret_val = ret_val | (adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 75 cs = true;
Adrian Suciu 19:fb92949e59c9 76
Adrian Suciu 19:fb92949e59c9 77 return ret_val;
Adrian Suciu 19:fb92949e59c9 78 }
Adrian Suciu 19:fb92949e59c9 79
Adrian Suciu 19:fb92949e59c9 80 uint64_t ADXL362::scan()
Adrian Suciu 19:fb92949e59c9 81 {
Adrian Suciu 19:fb92949e59c9 82 uint64_t ret_val = 0;
Adrian Suciu 19:fb92949e59c9 83 uint16_t x, y, z, t = 0;
Adrian Suciu 19:fb92949e59c9 84
Adrian Suciu 19:fb92949e59c9 85 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 86 cs = false;
Adrian Suciu 19:fb92949e59c9 87 adxl362.write(READ_REG_CMD);
Adrian Suciu 19:fb92949e59c9 88 adxl362.write(static_cast<uint8_t>(XDATA_L));
Adrian Suciu 19:fb92949e59c9 89
Adrian Suciu 19:fb92949e59c9 90 x = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 91 x = x | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 92 y = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 93 y = y | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 94 z = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 95 z = z | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 96 t = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 97 t = t | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 98 // format xxyyzztt
Adrian Suciu 19:fb92949e59c9 99 ret_val = static_cast<uint64_t>(x) << 48;
Adrian Suciu 19:fb92949e59c9 100 ret_val |= static_cast<uint64_t>(y) << 32;
Adrian Suciu 19:fb92949e59c9 101 ret_val |= static_cast<uint64_t>(z) << 16;
Adrian Suciu 19:fb92949e59c9 102 ret_val |= static_cast<uint64_t>(t);
Adrian Suciu 19:fb92949e59c9 103 cs = true;
Adrian Suciu 19:fb92949e59c9 104 return ret_val;
Adrian Suciu 19:fb92949e59c9 105 }
Adrian Suciu 19:fb92949e59c9 106
Adrian Suciu 19:fb92949e59c9 107 uint8_t ADXL362::scanx_u8()
Adrian Suciu 19:fb92949e59c9 108 {
Adrian Suciu 19:fb92949e59c9 109 return read_reg(XDATA);
Adrian Suciu 19:fb92949e59c9 110 }
Adrian Suciu 19:fb92949e59c9 111 uint16_t ADXL362::scanx()
Adrian Suciu 19:fb92949e59c9 112 {
Adrian Suciu 19:fb92949e59c9 113 return read_reg_u16(XDATA_L);
Adrian Suciu 19:fb92949e59c9 114 }
Adrian Suciu 19:fb92949e59c9 115 uint8_t ADXL362::scany_u8()
Adrian Suciu 19:fb92949e59c9 116 {
Adrian Suciu 19:fb92949e59c9 117 return read_reg(YDATA);
Adrian Suciu 19:fb92949e59c9 118 }
Adrian Suciu 19:fb92949e59c9 119
Adrian Suciu 19:fb92949e59c9 120 uint16_t ADXL362::scany()
Adrian Suciu 19:fb92949e59c9 121 {
Adrian Suciu 19:fb92949e59c9 122 return read_reg_u16(YDATA_L);
Adrian Suciu 19:fb92949e59c9 123 }
Adrian Suciu 19:fb92949e59c9 124 uint8_t ADXL362::scanz_u8()
Adrian Suciu 19:fb92949e59c9 125 {
Adrian Suciu 19:fb92949e59c9 126 return read_reg(ZDATA);
Adrian Suciu 19:fb92949e59c9 127 }
Adrian Suciu 19:fb92949e59c9 128
Adrian Suciu 19:fb92949e59c9 129 uint16_t ADXL362::scanz()
Adrian Suciu 19:fb92949e59c9 130 {
Adrian Suciu 19:fb92949e59c9 131 return read_reg_u16(ZDATA_L);
Adrian Suciu 19:fb92949e59c9 132 }
Adrian Suciu 19:fb92949e59c9 133 uint16_t ADXL362::scant()
Adrian Suciu 19:fb92949e59c9 134 {
Adrian Suciu 19:fb92949e59c9 135 return read_reg_u16(TEMP_L);
Adrian Suciu 19:fb92949e59c9 136 }
Adrian Suciu 19:fb92949e59c9 137
Adrian Suciu 19:fb92949e59c9 138 void ADXL362::set_mode(ADXL362_modes_t mode)
Adrian Suciu 19:fb92949e59c9 139 {
Adrian Suciu 19:fb92949e59c9 140 uint8_t reg_val;
Adrian Suciu 19:fb92949e59c9 141 reg_val = read_reg(POWER_CTL);
Adrian Suciu 19:fb92949e59c9 142 reg_val = reg_val | static_cast<uint8_t>(mode);
Adrian Suciu 19:fb92949e59c9 143 write_reg(POWER_CTL, reg_val);
Adrian Suciu 19:fb92949e59c9 144 }
Adrian Suciu 19:fb92949e59c9 145
Adrian Suciu 19:fb92949e59c9 146 void ADXL362::set_activity_threshold(uint16_t threshold)
Adrian Suciu 19:fb92949e59c9 147 {
Adrian Suciu 19:fb92949e59c9 148 write_reg_u16(THRESH_ACT_L, threshold);
Adrian Suciu 19:fb92949e59c9 149 }
Adrian Suciu 19:fb92949e59c9 150 void ADXL362::set_activity_time(uint8_t time)
Adrian Suciu 19:fb92949e59c9 151 {
Adrian Suciu 19:fb92949e59c9 152 write_reg(TIME_ACT, time);
Adrian Suciu 19:fb92949e59c9 153 }
Adrian Suciu 19:fb92949e59c9 154 void ADXL362::set_inactivity_threshold(uint16_t threshold)
Adrian Suciu 19:fb92949e59c9 155 {
Adrian Suciu 19:fb92949e59c9 156 write_reg_u16(THRESH_INACT_L, threshold);
Adrian Suciu 19:fb92949e59c9 157 }
Adrian Suciu 19:fb92949e59c9 158 void ADXL362::set_inactivity_time(uint16_t time)
Adrian Suciu 19:fb92949e59c9 159 {
Adrian Suciu 19:fb92949e59c9 160 write_reg_u16(TIME_INACT_L, time);
Adrian Suciu 19:fb92949e59c9 161 }
Adrian Suciu 19:fb92949e59c9 162
Adrian Suciu 19:fb92949e59c9 163 void ADXL362::set_polling_interrupt1_pin(PinName in, uint8_t data,
Adrian Suciu 19:fb92949e59c9 164 PinMode pull)
Adrian Suciu 19:fb92949e59c9 165 {
Adrian Suciu 19:fb92949e59c9 166 if ((data & 0x7F) != 0) {
Adrian Suciu 19:fb92949e59c9 167 write_reg(INTMAP1, data);
Adrian Suciu 19:fb92949e59c9 168 int1_poll = DigitalIn(in);
Adrian Suciu 19:fb92949e59c9 169 int1_poll.mode(pull);
Adrian Suciu 19:fb92949e59c9 170 if (data & 0x80) {
Adrian Suciu 19:fb92949e59c9 171 int1_act_low = true;
Adrian Suciu 19:fb92949e59c9 172 } else {
Adrian Suciu 19:fb92949e59c9 173 int1_act_low = false;
Adrian Suciu 19:fb92949e59c9 174 }
Adrian Suciu 19:fb92949e59c9 175 }
Adrian Suciu 19:fb92949e59c9 176 }
Adrian Suciu 19:fb92949e59c9 177
Adrian Suciu 19:fb92949e59c9 178 void ADXL362::set_polling_interrupt2_pin(PinName in, uint8_t data,
Adrian Suciu 19:fb92949e59c9 179 PinMode pull)
Adrian Suciu 19:fb92949e59c9 180 {
Adrian Suciu 19:fb92949e59c9 181 if ((data & 0x7F) != 0) {
Adrian Suciu 19:fb92949e59c9 182 write_reg(INTMAP2, data);
Adrian Suciu 19:fb92949e59c9 183 int2_poll = DigitalIn(in);
Adrian Suciu 19:fb92949e59c9 184 int2_poll.mode(pull);
Adrian Suciu 19:fb92949e59c9 185 if (data & 0x80) {
Adrian Suciu 19:fb92949e59c9 186 int2_act_low = true;
Adrian Suciu 19:fb92949e59c9 187 } else {
Adrian Suciu 19:fb92949e59c9 188 int2_act_low = false;
Adrian Suciu 19:fb92949e59c9 189 }
Adrian Suciu 19:fb92949e59c9 190 }
Adrian Suciu 19:fb92949e59c9 191 }
Adrian Suciu 19:fb92949e59c9 192
Adrian Suciu 19:fb92949e59c9 193 bool ADXL362::get_int1()
Adrian Suciu 19:fb92949e59c9 194 {
Adrian Suciu 19:fb92949e59c9 195 return (int1_poll.read() != int1_act_low); // boolean XOR
Adrian Suciu 19:fb92949e59c9 196 }
Adrian Suciu 19:fb92949e59c9 197
Adrian Suciu 19:fb92949e59c9 198 bool ADXL362::get_int2()
Adrian Suciu 19:fb92949e59c9 199 {
Adrian Suciu 19:fb92949e59c9 200 return (int1_poll.read() != int1_act_low); // boolean XOR
Adrian Suciu 19:fb92949e59c9 201 }
Adrian Suciu 19:fb92949e59c9 202
Adrian Suciu 19:fb92949e59c9 203 void ADXL362::set_interrupt1_pin(PinName in, uint8_t data,
Adrian Suciu 19:fb92949e59c9 204 void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
Adrian Suciu 19:fb92949e59c9 205 {
Adrian Suciu 19:fb92949e59c9 206 if ((data & 0x7F) != 0) {
Adrian Suciu 19:fb92949e59c9 207 write_reg(INTMAP1, data);
Adrian Suciu 19:fb92949e59c9 208 //int1 = InterruptIn(in);
Adrian Suciu 19:fb92949e59c9 209 delete int1;
Adrian Suciu 19:fb92949e59c9 210 int1 = new InterruptIn(in);
Adrian Suciu 19:fb92949e59c9 211 int1->mode(pull);
Adrian Suciu 19:fb92949e59c9 212 if(callback_falling != NULL) int1->fall(callback_falling);
Adrian Suciu 19:fb92949e59c9 213 if(callback_rising != NULL) int1->rise(callback_rising);
Adrian Suciu 19:fb92949e59c9 214 if (data & 0x80) {
Adrian Suciu 19:fb92949e59c9 215 int1_act_low = true;
Adrian Suciu 19:fb92949e59c9 216 } else {
Adrian Suciu 19:fb92949e59c9 217 int1_act_low = false;
Adrian Suciu 19:fb92949e59c9 218 }
Adrian Suciu 19:fb92949e59c9 219 }
Adrian Suciu 19:fb92949e59c9 220 }
Adrian Suciu 19:fb92949e59c9 221 void ADXL362::set_interrupt2_pin(PinName in, uint8_t data,
Adrian Suciu 19:fb92949e59c9 222 void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
Adrian Suciu 19:fb92949e59c9 223 {
Adrian Suciu 19:fb92949e59c9 224 if ((data & 0x7F) != 0) {
Adrian Suciu 19:fb92949e59c9 225 write_reg(INTMAP2, data);
Adrian Suciu 19:fb92949e59c9 226 delete int2;
Adrian Suciu 19:fb92949e59c9 227 int2 = new InterruptIn(in);
Adrian Suciu 19:fb92949e59c9 228 int2->mode(pull);
Adrian Suciu 19:fb92949e59c9 229 if(callback_falling != NULL) int2->fall(callback_falling);
Adrian Suciu 19:fb92949e59c9 230 if(callback_rising != NULL) int2->rise(callback_rising);
Adrian Suciu 19:fb92949e59c9 231 if (data & 0x80) {
Adrian Suciu 19:fb92949e59c9 232 int2_act_low = true;
Adrian Suciu 19:fb92949e59c9 233 } else {
Adrian Suciu 19:fb92949e59c9 234 int2_act_low = false;
Adrian Suciu 19:fb92949e59c9 235 }
Adrian Suciu 19:fb92949e59c9 236 }
Adrian Suciu 19:fb92949e59c9 237 }
Adrian Suciu 19:fb92949e59c9 238
Adrian Suciu 19:fb92949e59c9 239 void ADXL362::enable_interrupt1()
Adrian Suciu 19:fb92949e59c9 240 {
Adrian Suciu 19:fb92949e59c9 241 int1->enable_irq();
Adrian Suciu 19:fb92949e59c9 242 }
Adrian Suciu 19:fb92949e59c9 243
Adrian Suciu 19:fb92949e59c9 244 void ADXL362::enable_interrupt2()
Adrian Suciu 19:fb92949e59c9 245 {
Adrian Suciu 19:fb92949e59c9 246 int2->enable_irq();
Adrian Suciu 19:fb92949e59c9 247 }
Adrian Suciu 19:fb92949e59c9 248
Adrian Suciu 19:fb92949e59c9 249 void ADXL362::disable_interrupt1()
Adrian Suciu 19:fb92949e59c9 250 {
Adrian Suciu 19:fb92949e59c9 251 int1->disable_irq();
Adrian Suciu 19:fb92949e59c9 252 }
Adrian Suciu 19:fb92949e59c9 253
Adrian Suciu 19:fb92949e59c9 254 void ADXL362::disable_interrupt2()
Adrian Suciu 19:fb92949e59c9 255 {
Adrian Suciu 19:fb92949e59c9 256 int2->disable_irq();
Adrian Suciu 19:fb92949e59c9 257 }
Adrian Suciu 19:fb92949e59c9 258
Adrian Suciu 19:fb92949e59c9 259 void ADXL362::set_act_inact_ctl_reg(uint8_t data)
Adrian Suciu 19:fb92949e59c9 260 {
Adrian Suciu 19:fb92949e59c9 261 write_reg(ACT_INACT_CTL, data);
Adrian Suciu 19:fb92949e59c9 262 }
Adrian Suciu 19:fb92949e59c9 263
Adrian Suciu 19:fb92949e59c9 264 void ADXL362::set_power_ctl_reg(uint8_t data)
Adrian Suciu 19:fb92949e59c9 265 {
Adrian Suciu 19:fb92949e59c9 266 write_reg(POWER_CTL, data);
Adrian Suciu 19:fb92949e59c9 267 }
Adrian Suciu 19:fb92949e59c9 268
Adrian Suciu 19:fb92949e59c9 269 void ADXL362::set_filter_ctl_reg(uint8_t data)
Adrian Suciu 19:fb92949e59c9 270 {
Adrian Suciu 19:fb92949e59c9 271 write_reg(FILTER_CTL, data);
Adrian Suciu 19:fb92949e59c9 272 }
Adrian Suciu 19:fb92949e59c9 273
Adrian Suciu 19:fb92949e59c9 274 uint8_t ADXL362::read_status()
Adrian Suciu 19:fb92949e59c9 275 {
Adrian Suciu 19:fb92949e59c9 276 return read_reg(STATUS);
Adrian Suciu 19:fb92949e59c9 277 }
Adrian Suciu 19:fb92949e59c9 278
Adrian Suciu 19:fb92949e59c9 279 uint16_t ADXL362::fifo_read_nr_of_entries()
Adrian Suciu 19:fb92949e59c9 280 {
Adrian Suciu 19:fb92949e59c9 281 return read_reg_u16(FIFO_ENTRIES_L);
Adrian Suciu 19:fb92949e59c9 282 }
Adrian Suciu 19:fb92949e59c9 283
Adrian Suciu 19:fb92949e59c9 284 void ADXL362::fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries)
Adrian Suciu 19:fb92949e59c9 285 {
Adrian Suciu 19:fb92949e59c9 286 uint8_t fifo_ctl = static_cast<uint8_t>(mode);
Adrian Suciu 19:fb92949e59c9 287 temp_stored_in_fifo = store_temp;
Adrian Suciu 19:fb92949e59c9 288
Adrian Suciu 19:fb92949e59c9 289 fifo_ctl = fifo_ctl | (static_cast<uint8_t>(temp_stored_in_fifo) << 2);
Adrian Suciu 19:fb92949e59c9 290
Adrian Suciu 19:fb92949e59c9 291 if (nr_of_entries > 0xff) {
Adrian Suciu 19:fb92949e59c9 292 fifo_ctl = fifo_ctl | static_cast<uint8_t>(AH);
Adrian Suciu 19:fb92949e59c9 293 }
Adrian Suciu 19:fb92949e59c9 294 write_reg(FIFO_CONTROL, fifo_ctl);
Adrian Suciu 19:fb92949e59c9 295 write_reg(FIFO_SAMPLES, static_cast<uint8_t>(nr_of_entries & 0xff));
Adrian Suciu 19:fb92949e59c9 296
Adrian Suciu 19:fb92949e59c9 297 }
Adrian Suciu 19:fb92949e59c9 298
Adrian Suciu 19:fb92949e59c9 299 uint16_t ADXL362::fifo_read_u16()
Adrian Suciu 19:fb92949e59c9 300 {
Adrian Suciu 19:fb92949e59c9 301 uint16_t ret_val = 0;
Adrian Suciu 19:fb92949e59c9 302 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 303
Adrian Suciu 19:fb92949e59c9 304 cs = false;
Adrian Suciu 19:fb92949e59c9 305 adxl362.write(READ_FIFO_CMD);
Adrian Suciu 19:fb92949e59c9 306 ret_val = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 307 ret_val = (ret_val) | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 308 cs = true;
Adrian Suciu 19:fb92949e59c9 309
Adrian Suciu 19:fb92949e59c9 310 return ret_val;
Adrian Suciu 19:fb92949e59c9 311 }
Adrian Suciu 19:fb92949e59c9 312
Adrian Suciu 19:fb92949e59c9 313 uint64_t ADXL362::fifo_scan()
Adrian Suciu 19:fb92949e59c9 314 {
Adrian Suciu 19:fb92949e59c9 315
Adrian Suciu 19:fb92949e59c9 316 uint64_t ret_val = 0;
Adrian Suciu 19:fb92949e59c9 317 uint16_t x = 0, y = 0, z = 0, dummy, t = 0, sample_type;
Adrian Suciu 19:fb92949e59c9 318
Adrian Suciu 19:fb92949e59c9 319 adxl362.format(8, _SPI_MODE);
Adrian Suciu 19:fb92949e59c9 320 cs = false;
Adrian Suciu 19:fb92949e59c9 321 adxl362.write(READ_FIFO_CMD);
Adrian Suciu 19:fb92949e59c9 322 uint8_t samples = (temp_stored_in_fifo) ? 4 : 3;
Adrian Suciu 19:fb92949e59c9 323 for(uint8_t i = 0; i < samples; i++) {
Adrian Suciu 19:fb92949e59c9 324 dummy = adxl362.write(DUMMY_BYTE);
Adrian Suciu 19:fb92949e59c9 325 dummy = dummy | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
Adrian Suciu 19:fb92949e59c9 326 sample_type = (dummy & 0xc000) >> 14;
Adrian Suciu 19:fb92949e59c9 327 dummy = dummy & 0x3fff;
Adrian Suciu 19:fb92949e59c9 328 switch(sample_type) {
Adrian Suciu 19:fb92949e59c9 329 case 0: // x
Adrian Suciu 19:fb92949e59c9 330 x = dummy;
Adrian Suciu 19:fb92949e59c9 331 break;
Adrian Suciu 19:fb92949e59c9 332 case 1: // y
Adrian Suciu 19:fb92949e59c9 333 y = dummy;
Adrian Suciu 19:fb92949e59c9 334 break;
Adrian Suciu 19:fb92949e59c9 335 case 2: // z
Adrian Suciu 19:fb92949e59c9 336 z = dummy;
Adrian Suciu 19:fb92949e59c9 337 break;
Adrian Suciu 19:fb92949e59c9 338 case 3: // temp
Adrian Suciu 19:fb92949e59c9 339 t = dummy;
Adrian Suciu 19:fb92949e59c9 340 break;
Adrian Suciu 19:fb92949e59c9 341 }
Adrian Suciu 19:fb92949e59c9 342
Adrian Suciu 19:fb92949e59c9 343 }
Adrian Suciu 19:fb92949e59c9 344
Adrian Suciu 19:fb92949e59c9 345 // format xxyyzztt
Adrian Suciu 19:fb92949e59c9 346 ret_val = static_cast<uint64_t> (x) << 48;
Adrian Suciu 19:fb92949e59c9 347 ret_val |= static_cast<uint64_t>(y) << 32;
Adrian Suciu 19:fb92949e59c9 348 ret_val |= static_cast<uint64_t>(z) << 16;
Adrian Suciu 19:fb92949e59c9 349 ret_val |= static_cast<uint64_t>(t);
Adrian Suciu 19:fb92949e59c9 350 cs = true;
Adrian Suciu 19:fb92949e59c9 351 return ret_val;
Adrian Suciu 19:fb92949e59c9 352 }