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 #ifndef ADXL362_H_
Adrian Suciu 19:fb92949e59c9 2 #define ADXL362_H_
Adrian Suciu 19:fb92949e59c9 3
Adrian Suciu 19:fb92949e59c9 4 #include "mbed.h"
Adrian Suciu 19:fb92949e59c9 5
Adrian Suciu 19:fb92949e59c9 6 class ADXL362
Adrian Suciu 19:fb92949e59c9 7 {
Adrian Suciu 19:fb92949e59c9 8 public:
Adrian Suciu 19:fb92949e59c9 9
Adrian Suciu 19:fb92949e59c9 10 /* Temperature parameters */
Adrian Suciu 19:fb92949e59c9 11 typedef enum {
Adrian Suciu 19:fb92949e59c9 12 DEVID_AD = 0x00,
Adrian Suciu 19:fb92949e59c9 13 DEVID_MST = 0x01,
Adrian Suciu 19:fb92949e59c9 14 PARTID = 0x02,
Adrian Suciu 19:fb92949e59c9 15 REVID = 0x03,
Adrian Suciu 19:fb92949e59c9 16 XDATA = 0x08,
Adrian Suciu 19:fb92949e59c9 17 YDATA = 0x09,
Adrian Suciu 19:fb92949e59c9 18 ZDATA = 0x0A,
Adrian Suciu 19:fb92949e59c9 19 STATUS = 0x0B,
Adrian Suciu 19:fb92949e59c9 20 FIFO_ENTRIES_L = 0x0C,
Adrian Suciu 19:fb92949e59c9 21 FIFO_ENTRIES_H = 0x0D,
Adrian Suciu 19:fb92949e59c9 22 XDATA_L = 0x0E,
Adrian Suciu 19:fb92949e59c9 23 XDATA_H = 0x0F,
Adrian Suciu 19:fb92949e59c9 24 YDATA_L = 0x10,
Adrian Suciu 19:fb92949e59c9 25 YDATA_H = 0x11,
Adrian Suciu 19:fb92949e59c9 26 ZDATA_L = 0x12,
Adrian Suciu 19:fb92949e59c9 27 ZDATA_H = 0x13,
Adrian Suciu 19:fb92949e59c9 28 TEMP_L = 0x14,
Adrian Suciu 19:fb92949e59c9 29 TEMP_H = 0x15,
Adrian Suciu 19:fb92949e59c9 30 // Reserved = 0x16;
Adrian Suciu 19:fb92949e59c9 31 // Reserved = 0x17;
Adrian Suciu 19:fb92949e59c9 32 SOFT_RESET = 0x1F,
Adrian Suciu 19:fb92949e59c9 33 THRESH_ACT_L = 0x20,
Adrian Suciu 19:fb92949e59c9 34 THRESH_ACT_H = 0x21,
Adrian Suciu 19:fb92949e59c9 35 TIME_ACT = 0x22,
Adrian Suciu 19:fb92949e59c9 36 THRESH_INACT_L = 0x23,
Adrian Suciu 19:fb92949e59c9 37 THRESH_INACT_H = 0x24,
Adrian Suciu 19:fb92949e59c9 38 TIME_INACT_L = 0x25,
Adrian Suciu 19:fb92949e59c9 39 TIME_INACT_H = 0x26,
Adrian Suciu 19:fb92949e59c9 40 ACT_INACT_CTL = 0x27,
Adrian Suciu 19:fb92949e59c9 41 FIFO_CONTROL = 0x28,
Adrian Suciu 19:fb92949e59c9 42 FIFO_SAMPLES = 0x29,
Adrian Suciu 19:fb92949e59c9 43 INTMAP1 = 0x2A,
Adrian Suciu 19:fb92949e59c9 44 INTMAP2 = 0x2B,
Adrian Suciu 19:fb92949e59c9 45 FILTER_CTL = 0x2C,
Adrian Suciu 19:fb92949e59c9 46 POWER_CTL = 0x2D,
Adrian Suciu 19:fb92949e59c9 47 SELF_TEST = 0x2E,
Adrian Suciu 19:fb92949e59c9 48 } ADXL362_register_t;
Adrian Suciu 19:fb92949e59c9 49
Adrian Suciu 19:fb92949e59c9 50 typedef enum {
Adrian Suciu 19:fb92949e59c9 51 STANDBY = 0x00,
Adrian Suciu 19:fb92949e59c9 52 MEASUREMENT = 0x02
Adrian Suciu 19:fb92949e59c9 53 } ADXL362_modes_t;
Adrian Suciu 19:fb92949e59c9 54
Adrian Suciu 19:fb92949e59c9 55 typedef enum {
Adrian Suciu 19:fb92949e59c9 56 ERR_USER_REGS = 0x80,
Adrian Suciu 19:fb92949e59c9 57 AWAKE = 0x40,
Adrian Suciu 19:fb92949e59c9 58 INACT = 0x20,
Adrian Suciu 19:fb92949e59c9 59 ACT = 0x10,
Adrian Suciu 19:fb92949e59c9 60 FIFO_OVERRUN = 0x08,
Adrian Suciu 19:fb92949e59c9 61 FIFO_WATERMARK = 0x04,
Adrian Suciu 19:fb92949e59c9 62 FIFO_READY = 0x02,
Adrian Suciu 19:fb92949e59c9 63 DATA_READY = 0x01
Adrian Suciu 19:fb92949e59c9 64 } ADXL362_STATUS_reg_bits_t;
Adrian Suciu 19:fb92949e59c9 65
Adrian Suciu 19:fb92949e59c9 66 typedef enum {
Adrian Suciu 19:fb92949e59c9 67 LINKLOOP1 = 0x20,
Adrian Suciu 19:fb92949e59c9 68 LINKLOOP0 = 0x10,
Adrian Suciu 19:fb92949e59c9 69 DEFAULTMODE = 0x00,
Adrian Suciu 19:fb92949e59c9 70 LINKED_MODE = 0x10,
Adrian Suciu 19:fb92949e59c9 71 LOOP_MODE = 0x30,
Adrian Suciu 19:fb92949e59c9 72 INACT_REF = 0x08,
Adrian Suciu 19:fb92949e59c9 73 INACT_EN = 0x04,
Adrian Suciu 19:fb92949e59c9 74 ACT_REF = 0x02,
Adrian Suciu 19:fb92949e59c9 75 ACT_EN = 0x01
Adrian Suciu 19:fb92949e59c9 76 } ADXL362_ACT_INACT_CTL_reg_bits_t;
Adrian Suciu 19:fb92949e59c9 77
Adrian Suciu 19:fb92949e59c9 78 typedef enum {
Adrian Suciu 19:fb92949e59c9 79 AH = 0x08,
Adrian Suciu 19:fb92949e59c9 80 FIFO_TEMP = 0x04,
Adrian Suciu 19:fb92949e59c9 81 FIFO_MODE1 = 0x02,
Adrian Suciu 19:fb92949e59c9 82 FIFO_MODE = 0x01,
Adrian Suciu 19:fb92949e59c9 83 } ADXL362_FIFO_CONTROL_reg_bits_t;
Adrian Suciu 19:fb92949e59c9 84
Adrian Suciu 19:fb92949e59c9 85 typedef enum {
Adrian Suciu 19:fb92949e59c9 86 FIFO_DISABLED = 0x00,
Adrian Suciu 19:fb92949e59c9 87 FIFO_OLDEST = 0x01,
Adrian Suciu 19:fb92949e59c9 88 FIFO_STREAM = 0x02,
Adrian Suciu 19:fb92949e59c9 89 FIFO_TRIGGERED = 0x03,
Adrian Suciu 19:fb92949e59c9 90 } ADXL362_FIFO_modes_t;
Adrian Suciu 19:fb92949e59c9 91
Adrian Suciu 19:fb92949e59c9 92 typedef enum {
Adrian Suciu 19:fb92949e59c9 93 INT_LOW = 0x80,
Adrian Suciu 19:fb92949e59c9 94 INT_AWAKE = 0x40,
Adrian Suciu 19:fb92949e59c9 95 INT_INACT = 0x20,
Adrian Suciu 19:fb92949e59c9 96 INT_ACT = 0x10,
Adrian Suciu 19:fb92949e59c9 97 INT_FIFO_OVERRUN = 0x08,
Adrian Suciu 19:fb92949e59c9 98 INT_FIFO_WATERMARK = 0x04,
Adrian Suciu 19:fb92949e59c9 99 INT_FIFO_READY = 0x02,
Adrian Suciu 19:fb92949e59c9 100 INT_DATA_READY = 0x01
Adrian Suciu 19:fb92949e59c9 101 } ADXL362_INTMAP_reg_bits_t;
Adrian Suciu 19:fb92949e59c9 102
Adrian Suciu 19:fb92949e59c9 103 typedef enum {
Adrian Suciu 19:fb92949e59c9 104 RANGE1 = 0x80,
Adrian Suciu 19:fb92949e59c9 105 RANGE0 = 0x40,
Adrian Suciu 19:fb92949e59c9 106 RANGE2G = 0x00,
Adrian Suciu 19:fb92949e59c9 107 RANGE4G = 0x40,
Adrian Suciu 19:fb92949e59c9 108 RANGE8G = 0x80,
Adrian Suciu 19:fb92949e59c9 109 HALF_BW = 0x10,
Adrian Suciu 19:fb92949e59c9 110 EXT_SAMPLE = 0x08,
Adrian Suciu 19:fb92949e59c9 111 ODR2 = 0x04,
Adrian Suciu 19:fb92949e59c9 112 ODR1 = 0x02,
Adrian Suciu 19:fb92949e59c9 113 ODR0 = 0x01,
Adrian Suciu 19:fb92949e59c9 114 ODR12HZ = 0x00,
Adrian Suciu 19:fb92949e59c9 115 ODR25HZ = 0x01,
Adrian Suciu 19:fb92949e59c9 116 ODR50Hz = 0x02,
Adrian Suciu 19:fb92949e59c9 117 ODR100HZ = 0x03,
Adrian Suciu 19:fb92949e59c9 118 ODR200Hz = 0x04,
Adrian Suciu 19:fb92949e59c9 119 ODR400HZ = 0x07
Adrian Suciu 19:fb92949e59c9 120 } ADXL362_FILTER_CTL_reg_bits_t;
Adrian Suciu 19:fb92949e59c9 121
Adrian Suciu 19:fb92949e59c9 122 typedef enum {
Adrian Suciu 19:fb92949e59c9 123 EXT_CLK = 0x40,
Adrian Suciu 19:fb92949e59c9 124 LOW_NOISE1 = 0x20,
Adrian Suciu 19:fb92949e59c9 125 LOW_NOISE0 = 0x10,
Adrian Suciu 19:fb92949e59c9 126 NORMAL_OPERATION = 0x00,
Adrian Suciu 19:fb92949e59c9 127 LOW_NOISE = 0x10,
Adrian Suciu 19:fb92949e59c9 128 ULTRALOW_NOISE = 0x20,
Adrian Suciu 19:fb92949e59c9 129 WAKEUP = 0x08,
Adrian Suciu 19:fb92949e59c9 130 AUTOSLEEP = 0x04,
Adrian Suciu 19:fb92949e59c9 131 MEASURE1 = 0x02,
Adrian Suciu 19:fb92949e59c9 132 MEASURE0 = 0x01,
Adrian Suciu 19:fb92949e59c9 133 } ADXL362_POWER_CTL_reg_bits_t;
Adrian Suciu 19:fb92949e59c9 134
Adrian Suciu 19:fb92949e59c9 135 /** SPI configuration & constructor */
Adrian Suciu 19:fb92949e59c9 136 ADXL362(PinName CS = SPI_CS, PinName MOSI = SPI_MOSI, PinName MISO =
Adrian Suciu 19:fb92949e59c9 137 SPI_MISO, PinName SCK = SPI_SCK);
Adrian Suciu 19:fb92949e59c9 138 void frequency(int hz);
Adrian Suciu 19:fb92949e59c9 139
Adrian Suciu 19:fb92949e59c9 140 /** Low level SPI bus comm methods */
Adrian Suciu 19:fb92949e59c9 141 void reset(void);
Adrian Suciu 19:fb92949e59c9 142 void write_reg(ADXL362_register_t reg, uint8_t data);
Adrian Suciu 19:fb92949e59c9 143 uint8_t read_reg(ADXL362_register_t reg);
Adrian Suciu 19:fb92949e59c9 144 uint64_t scan();
Adrian Suciu 19:fb92949e59c9 145
Adrian Suciu 19:fb92949e59c9 146 void set_power_ctl_reg(uint8_t data);
Adrian Suciu 19:fb92949e59c9 147 void set_filter_ctl_reg(uint8_t data);
Adrian Suciu 19:fb92949e59c9 148
Adrian Suciu 19:fb92949e59c9 149 uint8_t scanx_u8();
Adrian Suciu 19:fb92949e59c9 150 uint16_t scanx();
Adrian Suciu 19:fb92949e59c9 151 uint8_t scany_u8();
Adrian Suciu 19:fb92949e59c9 152 uint16_t scany();
Adrian Suciu 19:fb92949e59c9 153 uint8_t scanz_u8();
Adrian Suciu 19:fb92949e59c9 154 uint16_t scanz();
Adrian Suciu 19:fb92949e59c9 155 uint16_t scant();
Adrian Suciu 19:fb92949e59c9 156
Adrian Suciu 19:fb92949e59c9 157 uint8_t read_status();
Adrian Suciu 19:fb92949e59c9 158 void set_mode(ADXL362_modes_t mode);
Adrian Suciu 19:fb92949e59c9 159
Adrian Suciu 19:fb92949e59c9 160 void set_activity_threshold(uint16_t threshold);
Adrian Suciu 19:fb92949e59c9 161 void set_activity_time(uint8_t time);
Adrian Suciu 19:fb92949e59c9 162 void set_inactivity_threshold(uint16_t threshold);
Adrian Suciu 19:fb92949e59c9 163 void set_inactivity_time(uint16_t time);
Adrian Suciu 19:fb92949e59c9 164 void set_act_inact_ctl_reg(uint8_t data);
Adrian Suciu 19:fb92949e59c9 165
Adrian Suciu 19:fb92949e59c9 166 void set_interrupt1_pin(PinName in, uint8_t data, void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull = PullNone);
Adrian Suciu 19:fb92949e59c9 167 void set_interrupt2_pin(PinName in, uint8_t data, void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull = PullNone);
Adrian Suciu 19:fb92949e59c9 168 void enable_interrupt1();
Adrian Suciu 19:fb92949e59c9 169 void enable_interrupt2();
Adrian Suciu 19:fb92949e59c9 170 void disable_interrupt1();
Adrian Suciu 19:fb92949e59c9 171 void disable_interrupt2();
Adrian Suciu 19:fb92949e59c9 172
Adrian Suciu 19:fb92949e59c9 173 void set_polling_interrupt1_pin(PinName in, uint8_t data, PinMode pull = PullNone);
Adrian Suciu 19:fb92949e59c9 174 void set_polling_interrupt2_pin(PinName in, uint8_t data, PinMode pull = PullNone);
Adrian Suciu 19:fb92949e59c9 175
Adrian Suciu 19:fb92949e59c9 176 bool get_int1();
Adrian Suciu 19:fb92949e59c9 177 bool get_int2();
Adrian Suciu 19:fb92949e59c9 178
Adrian Suciu 19:fb92949e59c9 179
Adrian Suciu 19:fb92949e59c9 180 uint16_t fifo_read_nr_of_entries();
Adrian Suciu 19:fb92949e59c9 181 void fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries);
Adrian Suciu 19:fb92949e59c9 182 uint16_t fifo_read_u16();
Adrian Suciu 19:fb92949e59c9 183 uint64_t fifo_scan();
Adrian Suciu 19:fb92949e59c9 184
Adrian Suciu 19:fb92949e59c9 185
Adrian Suciu 19:fb92949e59c9 186
Adrian Suciu 19:fb92949e59c9 187
Adrian Suciu 19:fb92949e59c9 188
Adrian Suciu 19:fb92949e59c9 189 private:
Adrian Suciu 19:fb92949e59c9 190
Adrian Suciu 19:fb92949e59c9 191 SPI adxl362; ///< SPI instance of the AD7791
Adrian Suciu 19:fb92949e59c9 192 DigitalOut cs; ///< DigitalOut instance for the chipselect of the AD7791
Adrian Suciu 19:fb92949e59c9 193 uint16_t read_reg_u16(ADXL362_register_t reg);
Adrian Suciu 19:fb92949e59c9 194 InterruptIn *int1;
Adrian Suciu 19:fb92949e59c9 195 InterruptIn *int2;
Adrian Suciu 19:fb92949e59c9 196 DigitalIn int1_poll;
Adrian Suciu 19:fb92949e59c9 197 DigitalIn int2_poll;
Adrian Suciu 19:fb92949e59c9 198 bool int1_act_low;
Adrian Suciu 19:fb92949e59c9 199 bool int2_act_low;
Adrian Suciu 19:fb92949e59c9 200 bool temp_stored_in_fifo;
Adrian Suciu 19:fb92949e59c9 201
Adrian Suciu 19:fb92949e59c9 202 void write_reg_u16(ADXL362_register_t reg, uint16_t data);
Adrian Suciu 19:fb92949e59c9 203
Adrian Suciu 19:fb92949e59c9 204 const static uint8_t DUMMY_BYTE = 0xAA;
Adrian Suciu 19:fb92949e59c9 205 const static uint8_t WRITE_REG_CMD = 0x0A; // write register
Adrian Suciu 19:fb92949e59c9 206 const static uint8_t READ_REG_CMD = 0x0B; // read register
Adrian Suciu 19:fb92949e59c9 207 const static uint8_t READ_FIFO_CMD = 0x0D; // read FIFO
Adrian Suciu 19:fb92949e59c9 208 const static uint8_t _SPI_MODE = 0;
Adrian Suciu 19:fb92949e59c9 209 };
Adrian Suciu 19:fb92949e59c9 210
Adrian Suciu 19:fb92949e59c9 211 #endif