xrocusOS_ADXL355 version
Dependencies: mbed SDFileSystem
driver/Adxl355Drv.cpp@20:2f2687580ecb, 2019-07-05 (annotated)
- Committer:
- APS_Lab
- Date:
- Fri Jul 05 02:09:06 2019 +0000
- Revision:
- 20:2f2687580ecb
- Parent:
- driver/Adxl372Drv.cpp@15:35f01ee28b44
Ver0.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Inscape_ao | 14:89665bcef3f0 | 1 | #include "mbed.h" |
APS_Lab | 20:2f2687580ecb | 2 | #include "Adxl355Drv.h" |
Inscape_ao | 14:89665bcef3f0 | 3 | |
Inscape_ao | 14:89665bcef3f0 | 4 | /* --- Definitions --- */ |
Inscape_ao | 14:89665bcef3f0 | 5 | #define MAX_SEND_SIZE (128) |
Inscape_ao | 14:89665bcef3f0 | 6 | |
Inscape_ao | 14:89665bcef3f0 | 7 | /* AXIS */ |
Inscape_ao | 14:89665bcef3f0 | 8 | #define AXIS_X (0) |
Inscape_ao | 14:89665bcef3f0 | 9 | #define AXIS_Y (1) |
Inscape_ao | 14:89665bcef3f0 | 10 | #define AXIS_Z (2) |
Inscape_ao | 14:89665bcef3f0 | 11 | #define NUM_OF_AXIS (3) |
Inscape_ao | 14:89665bcef3f0 | 12 | |
Inscape_ao | 14:89665bcef3f0 | 13 | /* REGISTERS */ |
APS_Lab | 20:2f2687580ecb | 14 | #define ADXL355_REG_DEVID_AD (0x00) |
APS_Lab | 20:2f2687580ecb | 15 | #define ADXL355_REG_DEVID_MST (0x01) |
APS_Lab | 20:2f2687580ecb | 16 | #define ADXL355_REG_PARTID (0x02) |
APS_Lab | 20:2f2687580ecb | 17 | #define ADXL355_REG_REVID (0x03) |
Inscape_ao | 14:89665bcef3f0 | 18 | |
APS_Lab | 20:2f2687580ecb | 19 | #define ADXL355_REG_XDATA_H (0x08) |
APS_Lab | 20:2f2687580ecb | 20 | #define ADXL355_REG_XDATA_L (0x09) |
APS_Lab | 20:2f2687580ecb | 21 | #define ADXL355_REG_YDATA_H (0x0A) |
APS_Lab | 20:2f2687580ecb | 22 | #define ADXL355_REG_YDATA_L (0x0B) |
APS_Lab | 20:2f2687580ecb | 23 | #define ADXL355_REG_ZDATA_H (0x0C) |
APS_Lab | 20:2f2687580ecb | 24 | #define ADXL355_REG_ZDATA_L (0x0D) |
Inscape_ao | 14:89665bcef3f0 | 25 | |
Inscape_ao | 14:89665bcef3f0 | 26 | |
APS_Lab | 20:2f2687580ecb | 27 | #define ADXL355_REG_FIFO_CTL (0x3A) |
APS_Lab | 20:2f2687580ecb | 28 | #define ADXL355_REG_MESURE (0x3E) |
APS_Lab | 20:2f2687580ecb | 29 | #define ADXL355_REG_POWER_CTL (0x3F) |
Inscape_ao | 14:89665bcef3f0 | 30 | |
Inscape_ao | 14:89665bcef3f0 | 31 | /* --- Static Variables --- */ |
Inscape_ao | 14:89665bcef3f0 | 32 | static int dummyreg = 0; |
Inscape_ao | 14:89665bcef3f0 | 33 | static int devSpiId = 0; |
Inscape_ao | 14:89665bcef3f0 | 34 | static int senseUid = 0; |
Inscape_ao | 14:89665bcef3f0 | 35 | static float a[3] = {0.0}; |
Inscape_ao | 14:89665bcef3f0 | 36 | |
Inscape_ao | 14:89665bcef3f0 | 37 | static Ticker mesureTick; |
Inscape_ao | 14:89665bcef3f0 | 38 | |
Inscape_ao | 14:89665bcef3f0 | 39 | /* --- Prototypes --- */ |
Inscape_ao | 14:89665bcef3f0 | 40 | static void tickHanlderForSensorRead(void); |
Inscape_ao | 14:89665bcef3f0 | 41 | |
Inscape_ao | 14:89665bcef3f0 | 42 | /* DeviceDriverBody*/ |
APS_Lab | 20:2f2687580ecb | 43 | static void initConnectionToAdxl355(void); |
APS_Lab | 20:2f2687580ecb | 44 | static void updateDeviceInfoAdxl355(void); |
APS_Lab | 20:2f2687580ecb | 45 | static void startMesumentAdxl355(void); |
APS_Lab | 20:2f2687580ecb | 46 | static void stopMesumentAdxl355(void); |
APS_Lab | 20:2f2687580ecb | 47 | static int readAccelAdxl355(int selAxis); |
APS_Lab | 20:2f2687580ecb | 48 | static void spiWriteAdxl355(int reg, int val); |
APS_Lab | 20:2f2687580ecb | 49 | static int spiReadAdxl355(int reg); |
APS_Lab | 20:2f2687580ecb | 50 | static int spiReadDualAdxl355(int reg); |
Inscape_ao | 14:89665bcef3f0 | 51 | |
Inscape_ao | 14:89665bcef3f0 | 52 | extern Serial pc; |
Inscape_ao | 14:89665bcef3f0 | 53 | |
Inscape_ao | 14:89665bcef3f0 | 54 | static SPI myspi(SPI_MOSI, SPI_MISO, SPI_SCK); /* D13, D12, D11 */ |
Inscape_ao | 14:89665bcef3f0 | 55 | static DigitalOut mycs(SPI_CS); /* D10 */ |
Inscape_ao | 14:89665bcef3f0 | 56 | static DigitalIn int1(D7); /* D7/D6 */ |
Inscape_ao | 14:89665bcef3f0 | 57 | static DigitalIn int2(D5); /* D5/D4 */ |
Inscape_ao | 14:89665bcef3f0 | 58 | |
Inscape_ao | 14:89665bcef3f0 | 59 | #define SPI_RD (1) |
Inscape_ao | 14:89665bcef3f0 | 60 | #define SPI_WR (0) |
Inscape_ao | 14:89665bcef3f0 | 61 | #define SPI_EMPTY_SEND (0x00) |
Inscape_ao | 14:89665bcef3f0 | 62 | |
Inscape_ao | 14:89665bcef3f0 | 63 | |
Inscape_ao | 14:89665bcef3f0 | 64 | /***************************************************************/ |
Inscape_ao | 14:89665bcef3f0 | 65 | /* Device Driver Interface */ |
Inscape_ao | 14:89665bcef3f0 | 66 | /***************************************************************/ |
Inscape_ao | 14:89665bcef3f0 | 67 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 68 | * in SRS command */ |
APS_Lab | 20:2f2687580ecb | 69 | static bool adxl355_simple_reset(void) |
Inscape_ao | 14:89665bcef3f0 | 70 | { |
Inscape_ao | 14:89665bcef3f0 | 71 | /* TODO */ |
APS_Lab | 20:2f2687580ecb | 72 | dbgprintf("debug:adxl355_simple_reset\n"); |
Inscape_ao | 14:89665bcef3f0 | 73 | mesureTick.detach(); |
Inscape_ao | 14:89665bcef3f0 | 74 | return true; |
Inscape_ao | 14:89665bcef3f0 | 75 | } |
Inscape_ao | 14:89665bcef3f0 | 76 | |
Inscape_ao | 14:89665bcef3f0 | 77 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 78 | * in the first time of mesuments */ |
APS_Lab | 20:2f2687580ecb | 79 | static int adxl355_simple_init(void) |
Inscape_ao | 14:89665bcef3f0 | 80 | { |
Inscape_ao | 14:89665bcef3f0 | 81 | /* TODO */ |
APS_Lab | 20:2f2687580ecb | 82 | dbgprintf("debug:adxl355_simple_init\n"); |
Inscape_ao | 14:89665bcef3f0 | 83 | mesureTick.detach(); |
Inscape_ao | 14:89665bcef3f0 | 84 | |
APS_Lab | 20:2f2687580ecb | 85 | initConnectionToAdxl355(); |
Inscape_ao | 14:89665bcef3f0 | 86 | |
Inscape_ao | 14:89665bcef3f0 | 87 | return 0; |
Inscape_ao | 14:89665bcef3f0 | 88 | } |
Inscape_ao | 14:89665bcef3f0 | 89 | |
Inscape_ao | 14:89665bcef3f0 | 90 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 91 | * in the repling mesurement data to Host (ASAP) */ |
APS_Lab | 20:2f2687580ecb | 92 | static bool adxl355_simple_exec(int deviceID, Serial *pOut, FILE *pSave) |
Inscape_ao | 14:89665bcef3f0 | 93 | { |
Inscape_ao | 14:89665bcef3f0 | 94 | char sendBuf[MAX_SEND_SIZE] = {0}; |
Inscape_ao | 14:89665bcef3f0 | 95 | int sendCharLen; |
Inscape_ao | 14:89665bcef3f0 | 96 | |
APS_Lab | 20:2f2687580ecb | 97 | dbgprintf("debug:adxl355_simple_exec\n"); |
Inscape_ao | 14:89665bcef3f0 | 98 | |
APS_Lab | 20:2f2687580ecb | 99 | updateDeviceInfoAdxl355(); |
Inscape_ao | 14:89665bcef3f0 | 100 | |
APS_Lab | 20:2f2687580ecb | 101 | a[AXIS_X] = ((double)readAccelAdxl355(AXIS_X)) * 9.8 * 0.1; /* only use 8bit/MSB in 12bit */ |
APS_Lab | 20:2f2687580ecb | 102 | a[AXIS_Y] = ((double)readAccelAdxl355(AXIS_Y)) * 9.8 * 0.1; /* only use 8bit/MSB in 12bit */ |
APS_Lab | 20:2f2687580ecb | 103 | a[AXIS_Z] = ((double)readAccelAdxl355(AXIS_Z)) * 9.8 * 0.1; /* only use 8bit/MSB in 12bit */ |
Inscape_ao | 14:89665bcef3f0 | 104 | |
Inscape_ao | 14:89665bcef3f0 | 105 | /* TODO */ |
Inscape_ao | 14:89665bcef3f0 | 106 | uprintf(":%d XDS ", deviceID); |
Inscape_ao | 14:89665bcef3f0 | 107 | uprintf("0029 REG=%04x,AXIS=%d,ID=%08x\n", |
Inscape_ao | 14:89665bcef3f0 | 108 | dummyreg, NUM_OF_AXIS, devSpiId); |
Inscape_ao | 14:89665bcef3f0 | 109 | uprintf(":%d XFD ", deviceID); |
Inscape_ao | 14:89665bcef3f0 | 110 | sprintf(sendBuf, "%4.4f %4.4f %4.4f", a[AXIS_X], a[AXIS_Y], a[AXIS_Z]); |
Inscape_ao | 14:89665bcef3f0 | 111 | sendCharLen = strlen(sendBuf); |
Inscape_ao | 14:89665bcef3f0 | 112 | uprintf("%04d %s\n", sendCharLen, sendBuf); |
Inscape_ao | 14:89665bcef3f0 | 113 | |
Inscape_ao | 14:89665bcef3f0 | 114 | if (pSave != NULL) { |
APS_Lab | 20:2f2687580ecb | 115 | dbgprintf("debug:adxl355_simple_exec [Write SD card]\n"); |
Inscape_ao | 14:89665bcef3f0 | 116 | /* TODO Sd Card save */ |
Inscape_ao | 14:89665bcef3f0 | 117 | fprintf(pSave, "Device:%08d,%d,%f,%f,%f\n", |
Inscape_ao | 14:89665bcef3f0 | 118 | devSpiId, senseUid, a[AXIS_X], a[AXIS_Y], a[AXIS_Z]); |
Inscape_ao | 14:89665bcef3f0 | 119 | } |
Inscape_ao | 14:89665bcef3f0 | 120 | |
Inscape_ao | 14:89665bcef3f0 | 121 | return true; |
Inscape_ao | 14:89665bcef3f0 | 122 | } |
Inscape_ao | 14:89665bcef3f0 | 123 | |
Inscape_ao | 14:89665bcef3f0 | 124 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 125 | * in CRS command */ |
APS_Lab | 20:2f2687580ecb | 126 | static bool adxl355_simple_ready2run(void) |
Inscape_ao | 14:89665bcef3f0 | 127 | { |
Inscape_ao | 14:89665bcef3f0 | 128 | /* TODO */ |
APS_Lab | 20:2f2687580ecb | 129 | dbgprintf("debug:adxl355_simple_ready2run\n"); |
APS_Lab | 20:2f2687580ecb | 130 | updateDeviceInfoAdxl355(); |
APS_Lab | 20:2f2687580ecb | 131 | startMesumentAdxl355(); |
Inscape_ao | 14:89665bcef3f0 | 132 | mesureTick.attach(tickHanlderForSensorRead, 0.5); |
Inscape_ao | 14:89665bcef3f0 | 133 | return true; |
Inscape_ao | 14:89665bcef3f0 | 134 | } |
Inscape_ao | 14:89665bcef3f0 | 135 | |
Inscape_ao | 14:89665bcef3f0 | 136 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 137 | * in End of Mesument */ |
APS_Lab | 20:2f2687580ecb | 138 | static bool adxl355_simple_run2ready(void) |
Inscape_ao | 14:89665bcef3f0 | 139 | { |
Inscape_ao | 14:89665bcef3f0 | 140 | /* TODO */ |
APS_Lab | 20:2f2687580ecb | 141 | dbgprintf("debug:adxl355_simple_ready2run\n"); |
APS_Lab | 20:2f2687580ecb | 142 | stopMesumentAdxl355(); |
Inscape_ao | 14:89665bcef3f0 | 143 | mesureTick.detach(); |
Inscape_ao | 14:89665bcef3f0 | 144 | return true; |
Inscape_ao | 14:89665bcef3f0 | 145 | } |
Inscape_ao | 14:89665bcef3f0 | 146 | |
Inscape_ao | 14:89665bcef3f0 | 147 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 148 | * in CFW after CID */ |
APS_Lab | 20:2f2687580ecb | 149 | static bool adxl355_simple_get_config(int id_pos, int*get) |
Inscape_ao | 14:89665bcef3f0 | 150 | { |
Inscape_ao | 14:89665bcef3f0 | 151 | /* TODO */ |
APS_Lab | 20:2f2687580ecb | 152 | dbgprintf("debug:adxl355_simple_get_config(ID=%x)\n", id_pos); |
Inscape_ao | 14:89665bcef3f0 | 153 | *get = dummyreg; |
Inscape_ao | 14:89665bcef3f0 | 154 | return true; |
Inscape_ao | 14:89665bcef3f0 | 155 | } |
Inscape_ao | 14:89665bcef3f0 | 156 | |
Inscape_ao | 14:89665bcef3f0 | 157 | /** This handler is called |
Inscape_ao | 14:89665bcef3f0 | 158 | * in CFW after CID */ |
APS_Lab | 20:2f2687580ecb | 159 | static bool adxl355_simple_set_config(int id_pos, int set) |
Inscape_ao | 14:89665bcef3f0 | 160 | { |
Inscape_ao | 14:89665bcef3f0 | 161 | /* TODO */ |
APS_Lab | 20:2f2687580ecb | 162 | dbgprintf("debug:adxl355_simple_set_config(ID=%x)\n", id_pos); |
Inscape_ao | 14:89665bcef3f0 | 163 | dummyreg = set; |
Inscape_ao | 14:89665bcef3f0 | 164 | return true; |
Inscape_ao | 14:89665bcef3f0 | 165 | } |
Inscape_ao | 14:89665bcef3f0 | 166 | |
Inscape_ao | 14:89665bcef3f0 | 167 | /****************************************************/ |
Inscape_ao | 14:89665bcef3f0 | 168 | /* for Mesurement */ |
Inscape_ao | 14:89665bcef3f0 | 169 | /****************************************************/ |
Inscape_ao | 14:89665bcef3f0 | 170 | static void tickHanlderForSensorRead(void) |
Inscape_ao | 14:89665bcef3f0 | 171 | { |
Inscape_ao | 14:89665bcef3f0 | 172 | /* TODO */ |
Inscape_ao | 14:89665bcef3f0 | 173 | senseUid++; |
Inscape_ao | 14:89665bcef3f0 | 174 | return; |
Inscape_ao | 14:89665bcef3f0 | 175 | } |
Inscape_ao | 14:89665bcef3f0 | 176 | |
Inscape_ao | 14:89665bcef3f0 | 177 | /***************************************************************/ |
Inscape_ao | 14:89665bcef3f0 | 178 | /* Device Driver Body */ |
Inscape_ao | 14:89665bcef3f0 | 179 | /***************************************************************/ |
APS_Lab | 20:2f2687580ecb | 180 | static void initConnectionToAdxl355(void) |
Inscape_ao | 14:89665bcef3f0 | 181 | { |
APS_Lab | 20:2f2687580ecb | 182 | /** Init SPI for ADXL355 |
Inscape_ao | 14:89665bcef3f0 | 183 | * CPHA = CPOL = 0, 1MHz(max.10MHz)) |
Inscape_ao | 14:89665bcef3f0 | 184 | * CS = inactive |
Inscape_ao | 14:89665bcef3f0 | 185 | */ |
Inscape_ao | 14:89665bcef3f0 | 186 | myspi.format(8,0); |
Inscape_ao | 14:89665bcef3f0 | 187 | myspi.frequency(1000000); |
Inscape_ao | 14:89665bcef3f0 | 188 | mycs = 1; |
Inscape_ao | 14:89665bcef3f0 | 189 | } |
Inscape_ao | 14:89665bcef3f0 | 190 | |
APS_Lab | 20:2f2687580ecb | 191 | static void startMesumentAdxl355(void) |
Inscape_ao | 14:89665bcef3f0 | 192 | { |
APS_Lab | 20:2f2687580ecb | 193 | spiWriteAdxl355(ADXL355_REG_FIFO_CTL, 0); /* all data will be bipassed FIFO. */ |
APS_Lab | 20:2f2687580ecb | 194 | spiWriteAdxl355(ADXL355_REG_POWER_CTL, 1); /* WAKEUP mode */ |
Inscape_ao | 14:89665bcef3f0 | 195 | } |
Inscape_ao | 14:89665bcef3f0 | 196 | |
APS_Lab | 20:2f2687580ecb | 197 | static void stopMesumentAdxl355(void) |
Inscape_ao | 14:89665bcef3f0 | 198 | { |
APS_Lab | 20:2f2687580ecb | 199 | spiWriteAdxl355(ADXL355_REG_FIFO_CTL, 0); /* all data will be bipassed FIFO. */ |
APS_Lab | 20:2f2687580ecb | 200 | spiWriteAdxl355(ADXL355_REG_POWER_CTL, 0); /* STANDBY mode */ |
Inscape_ao | 14:89665bcef3f0 | 201 | } |
Inscape_ao | 14:89665bcef3f0 | 202 | |
APS_Lab | 20:2f2687580ecb | 203 | static int readAccelAdxl355(int selAxis) |
Inscape_ao | 14:89665bcef3f0 | 204 | { |
Inscape_ao | 14:89665bcef3f0 | 205 | int ret; |
Inscape_ao | 14:89665bcef3f0 | 206 | switch(selAxis) { |
Inscape_ao | 14:89665bcef3f0 | 207 | case AXIS_X: |
APS_Lab | 20:2f2687580ecb | 208 | ret = spiReadDualAdxl355(ADXL355_REG_XDATA_H); |
Inscape_ao | 14:89665bcef3f0 | 209 | break; |
Inscape_ao | 14:89665bcef3f0 | 210 | case AXIS_Y: |
APS_Lab | 20:2f2687580ecb | 211 | ret = spiReadDualAdxl355(ADXL355_REG_YDATA_H); |
Inscape_ao | 14:89665bcef3f0 | 212 | break; |
Inscape_ao | 14:89665bcef3f0 | 213 | case AXIS_Z: |
APS_Lab | 20:2f2687580ecb | 214 | ret = spiReadDualAdxl355(ADXL355_REG_ZDATA_H); |
Inscape_ao | 14:89665bcef3f0 | 215 | break; |
Inscape_ao | 14:89665bcef3f0 | 216 | default: |
Inscape_ao | 14:89665bcef3f0 | 217 | ret = 0xFFFFFFFF; |
Inscape_ao | 14:89665bcef3f0 | 218 | } |
Inscape_ao | 14:89665bcef3f0 | 219 | ret = ret >> 4; |
Inscape_ao | 14:89665bcef3f0 | 220 | if ((ret & 0x00000800) != 0) { |
Inscape_ao | 14:89665bcef3f0 | 221 | ret |= 0xFFFFF800; |
Inscape_ao | 14:89665bcef3f0 | 222 | } |
APS_Lab | 20:2f2687580ecb | 223 | dbgprintf("debug:readAccelAdxl355(AXIS=%d)=0x%08x\n", selAxis, ret); |
Inscape_ao | 14:89665bcef3f0 | 224 | return ret; |
Inscape_ao | 14:89665bcef3f0 | 225 | } |
Inscape_ao | 14:89665bcef3f0 | 226 | |
APS_Lab | 20:2f2687580ecb | 227 | static void updateDeviceInfoAdxl355(void) |
Inscape_ao | 14:89665bcef3f0 | 228 | { |
Inscape_ao | 14:89665bcef3f0 | 229 | |
Inscape_ao | 14:89665bcef3f0 | 230 | int devid_ad; |
Inscape_ao | 14:89665bcef3f0 | 231 | int devid_mst; |
Inscape_ao | 14:89665bcef3f0 | 232 | int devid_part; |
Inscape_ao | 14:89665bcef3f0 | 233 | int devid_rev; |
Inscape_ao | 14:89665bcef3f0 | 234 | |
APS_Lab | 20:2f2687580ecb | 235 | devid_ad = spiReadAdxl355(ADXL355_REG_DEVID_AD); |
APS_Lab | 20:2f2687580ecb | 236 | devid_mst = spiReadAdxl355(ADXL355_REG_DEVID_MST); |
APS_Lab | 20:2f2687580ecb | 237 | devid_part = spiReadAdxl355(ADXL355_REG_PARTID); |
APS_Lab | 20:2f2687580ecb | 238 | devid_rev = spiReadAdxl355(ADXL355_REG_REVID); |
Inscape_ao | 14:89665bcef3f0 | 239 | devSpiId = (devid_ad << 0) |
Inscape_ao | 14:89665bcef3f0 | 240 | | (devid_mst << 8) |
Inscape_ao | 14:89665bcef3f0 | 241 | | (devid_part << 16) |
Inscape_ao | 14:89665bcef3f0 | 242 | | (devid_rev << 24); |
Inscape_ao | 14:89665bcef3f0 | 243 | } |
Inscape_ao | 14:89665bcef3f0 | 244 | |
APS_Lab | 20:2f2687580ecb | 245 | static int spiReadAdxl355(int reg) |
Inscape_ao | 14:89665bcef3f0 | 246 | { |
Inscape_ao | 14:89665bcef3f0 | 247 | int val; |
Inscape_ao | 14:89665bcef3f0 | 248 | mycs = 0; |
Inscape_ao | 14:89665bcef3f0 | 249 | myspi.write(reg << 1 | SPI_RD); |
Inscape_ao | 14:89665bcef3f0 | 250 | val = myspi.write(SPI_EMPTY_SEND); |
Inscape_ao | 14:89665bcef3f0 | 251 | mycs = 1; |
APS_Lab | 20:2f2687580ecb | 252 | dbgprintf("debug:spiReadAdxl355(reg=0x%08x)=0x%08x\n", reg, val); |
Inscape_ao | 14:89665bcef3f0 | 253 | return val; |
Inscape_ao | 14:89665bcef3f0 | 254 | } |
Inscape_ao | 14:89665bcef3f0 | 255 | |
APS_Lab | 20:2f2687580ecb | 256 | static int spiReadDualAdxl355(int reg) |
Inscape_ao | 14:89665bcef3f0 | 257 | { |
Inscape_ao | 14:89665bcef3f0 | 258 | int valh, vall, val; |
Inscape_ao | 14:89665bcef3f0 | 259 | mycs = 0; |
Inscape_ao | 14:89665bcef3f0 | 260 | myspi.write(reg << 1 | SPI_RD); |
Inscape_ao | 14:89665bcef3f0 | 261 | valh = myspi.write(SPI_EMPTY_SEND); |
Inscape_ao | 14:89665bcef3f0 | 262 | vall = myspi.write(SPI_EMPTY_SEND); |
Inscape_ao | 14:89665bcef3f0 | 263 | mycs = 1; |
Inscape_ao | 14:89665bcef3f0 | 264 | val = valh << 8 | vall; |
APS_Lab | 20:2f2687580ecb | 265 | dbgprintf("debug:spiReadDualAdxl355(reg=0x%08x)=0x%08x\n", reg, val); |
Inscape_ao | 14:89665bcef3f0 | 266 | return val; |
Inscape_ao | 14:89665bcef3f0 | 267 | } |
Inscape_ao | 14:89665bcef3f0 | 268 | |
APS_Lab | 20:2f2687580ecb | 269 | static void spiWriteAdxl355(int reg, int val) |
Inscape_ao | 14:89665bcef3f0 | 270 | { |
Inscape_ao | 14:89665bcef3f0 | 271 | mycs = 0; |
Inscape_ao | 14:89665bcef3f0 | 272 | myspi.write(reg << 1 | SPI_WR); |
Inscape_ao | 14:89665bcef3f0 | 273 | myspi.write(val); |
Inscape_ao | 14:89665bcef3f0 | 274 | mycs = 1; |
APS_Lab | 20:2f2687580ecb | 275 | dbgprintf("debug:spiWriteAdxl355(reg=0x%08x)=0x%08x\n", reg, val); |
Inscape_ao | 14:89665bcef3f0 | 276 | } |
Inscape_ao | 14:89665bcef3f0 | 277 | |
Inscape_ao | 14:89665bcef3f0 | 278 | /****************************************************/ |
Inscape_ao | 14:89665bcef3f0 | 279 | /* for Registration of Device Driver */ |
Inscape_ao | 14:89665bcef3f0 | 280 | /****************************************************/ |
APS_Lab | 20:2f2687580ecb | 281 | DeviceDriver Adxl355Simple = { |
APS_Lab | 20:2f2687580ecb | 282 | .init = adxl355_simple_init, |
APS_Lab | 20:2f2687580ecb | 283 | .set_config = adxl355_simple_set_config, |
APS_Lab | 20:2f2687580ecb | 284 | .get_config = adxl355_simple_get_config, |
APS_Lab | 20:2f2687580ecb | 285 | .reset = adxl355_simple_reset, |
APS_Lab | 20:2f2687580ecb | 286 | .exec = adxl355_simple_exec, |
APS_Lab | 20:2f2687580ecb | 287 | .ready2run = adxl355_simple_ready2run, |
APS_Lab | 20:2f2687580ecb | 288 | .run2ready = adxl355_simple_run2ready, |
Inscape_ao | 14:89665bcef3f0 | 289 | }; |