AD7798 ADC driver

Dependents:   CN0396 CN0397

Committer:
adisuciu
Date:
Mon Nov 07 15:45:27 2016 +0000
Revision:
0:fb6fe6fa2835
Initial revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adisuciu 0:fb6fe6fa2835 1 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 2 * @file AD7798.c
adisuciu 0:fb6fe6fa2835 3 * @brief Implementation of AD7798 Driver.
adisuciu 0:fb6fe6fa2835 4 * @author
adisuciu 0:fb6fe6fa2835 5 ********************************************************************************
adisuciu 0:fb6fe6fa2835 6 * Copyright 2012(c) Analog Devices, Inc.
adisuciu 0:fb6fe6fa2835 7 *
adisuciu 0:fb6fe6fa2835 8 * All rights reserved.
adisuciu 0:fb6fe6fa2835 9 *
adisuciu 0:fb6fe6fa2835 10 * Redistribution and use in source and binary forms, with or without
adisuciu 0:fb6fe6fa2835 11 * modification, are permitted provided that the following conditions are met:
adisuciu 0:fb6fe6fa2835 12 * - Redistributions of source code must retain the above copyright
adisuciu 0:fb6fe6fa2835 13 * notice, this list of conditions and the following disclaimer.
adisuciu 0:fb6fe6fa2835 14 * - Redistributions in binary form must reproduce the above copyright
adisuciu 0:fb6fe6fa2835 15 * notice, this list of conditions and the following disclaimer in
adisuciu 0:fb6fe6fa2835 16 * the documentation and/or other materials provided with the
adisuciu 0:fb6fe6fa2835 17 * distribution.
adisuciu 0:fb6fe6fa2835 18 * - Neither the name of Analog Devices, Inc. nor the names of its
adisuciu 0:fb6fe6fa2835 19 * contributors may be used to endorse or promote products derived
adisuciu 0:fb6fe6fa2835 20 * from this software without specific prior written permission.
adisuciu 0:fb6fe6fa2835 21 * - The use of this software may or may not infringe the patent rights
adisuciu 0:fb6fe6fa2835 22 * of one or more patent holders. This license does not release you
adisuciu 0:fb6fe6fa2835 23 * from the requirement that you obtain separate licenses from these
adisuciu 0:fb6fe6fa2835 24 * patent holders to use this software.
adisuciu 0:fb6fe6fa2835 25 * - Use of the software either in source or binary form, must be run
adisuciu 0:fb6fe6fa2835 26 * on or directly connected to an Analog Devices Inc. component.
adisuciu 0:fb6fe6fa2835 27 *
adisuciu 0:fb6fe6fa2835 28 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
adisuciu 0:fb6fe6fa2835 29 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
adisuciu 0:fb6fe6fa2835 30 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
adisuciu 0:fb6fe6fa2835 31 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
adisuciu 0:fb6fe6fa2835 32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
adisuciu 0:fb6fe6fa2835 33 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
adisuciu 0:fb6fe6fa2835 34 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
adisuciu 0:fb6fe6fa2835 35 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
adisuciu 0:fb6fe6fa2835 36 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
adisuciu 0:fb6fe6fa2835 37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
adisuciu 0:fb6fe6fa2835 38 *
adisuciu 0:fb6fe6fa2835 39 ********************************************************************************
adisuciu 0:fb6fe6fa2835 40 * SVN Revision: 577
adisuciu 0:fb6fe6fa2835 41 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 42
adisuciu 0:fb6fe6fa2835 43 /******************************************************************************/
adisuciu 0:fb6fe6fa2835 44 /* Include Files */
adisuciu 0:fb6fe6fa2835 45 /******************************************************************************/
adisuciu 0:fb6fe6fa2835 46 #include "AD7798.h" // AD7798 definitions.
adisuciu 0:fb6fe6fa2835 47 #include <stdio.h>
adisuciu 0:fb6fe6fa2835 48
adisuciu 0:fb6fe6fa2835 49
adisuciu 0:fb6fe6fa2835 50 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 51 * @brief Initializes the AD7798 and checks if the device is present.
adisuciu 0:fb6fe6fa2835 52 *
adisuciu 0:fb6fe6fa2835 53 * @param None.
adisuciu 0:fb6fe6fa2835 54 *
adisuciu 0:fb6fe6fa2835 55 * @return status - Result of the initialization procedure.
adisuciu 0:fb6fe6fa2835 56 * Example: 1 - if initialization was successful (ID is 0x0B).
adisuciu 0:fb6fe6fa2835 57 * 0 - if initialization was unsuccessful.
adisuciu 0:fb6fe6fa2835 58 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 59 AD7798::AD7798( PinName CS, PinName MOSI, PinName MISO, PinName SCK):
adisuciu 0:fb6fe6fa2835 60 /*miso(MISO),*/ ad7798(MOSI, MISO, SCK), cs(CS)
adisuciu 0:fb6fe6fa2835 61 {
adisuciu 0:fb6fe6fa2835 62 cs = true; // cs is active low
adisuciu 0:fb6fe6fa2835 63 ad7798.format(8, _SPI_MODE);
adisuciu 0:fb6fe6fa2835 64 }
adisuciu 0:fb6fe6fa2835 65 uint8_t AD7798::init(void)
adisuciu 0:fb6fe6fa2835 66 {
adisuciu 0:fb6fe6fa2835 67 unsigned char status = 0x1;
adisuciu 0:fb6fe6fa2835 68
adisuciu 0:fb6fe6fa2835 69 if ((get_register_value (AD7798_REG_ID, 1) & 0x0F) != AD7798_ID) {
adisuciu 0:fb6fe6fa2835 70 status = 0x0;
adisuciu 0:fb6fe6fa2835 71 }
adisuciu 0:fb6fe6fa2835 72
adisuciu 0:fb6fe6fa2835 73 return(status);
adisuciu 0:fb6fe6fa2835 74 }
adisuciu 0:fb6fe6fa2835 75
adisuciu 0:fb6fe6fa2835 76 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 77 * @brief Sends 32 consecutive 1's on SPI in order to reset the part.
adisuciu 0:fb6fe6fa2835 78 *
adisuciu 0:fb6fe6fa2835 79 * @param None.
adisuciu 0:fb6fe6fa2835 80 *
adisuciu 0:fb6fe6fa2835 81 * @return None.
adisuciu 0:fb6fe6fa2835 82 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 83 void AD7798::frequency(int hz)
adisuciu 0:fb6fe6fa2835 84 {
adisuciu 0:fb6fe6fa2835 85 ad7798.frequency(hz);
adisuciu 0:fb6fe6fa2835 86 }
adisuciu 0:fb6fe6fa2835 87 void AD7798::reset(void)
adisuciu 0:fb6fe6fa2835 88 {
adisuciu 0:fb6fe6fa2835 89 unsigned char dataToSend[4] = {0xFF, 0xFF, 0xFF, 0xFF};
adisuciu 0:fb6fe6fa2835 90
adisuciu 0:fb6fe6fa2835 91 spi_write(dataToSend, 4);
adisuciu 0:fb6fe6fa2835 92
adisuciu 0:fb6fe6fa2835 93 wait_ms(500);
adisuciu 0:fb6fe6fa2835 94
adisuciu 0:fb6fe6fa2835 95 }
adisuciu 0:fb6fe6fa2835 96 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 97 * @brief Reads the value of the selected register
adisuciu 0:fb6fe6fa2835 98 *
adisuciu 0:fb6fe6fa2835 99 * @param regAddress - The address of the register to read.
adisuciu 0:fb6fe6fa2835 100 * @param size - The size of the register to read.
adisuciu 0:fb6fe6fa2835 101 *
adisuciu 0:fb6fe6fa2835 102 * @return data - The value of the selected register register.
adisuciu 0:fb6fe6fa2835 103 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 104 uint16_t AD7798::get_register_value(uint8_t regAddress, uint8_t size, bool toggle_cs)
adisuciu 0:fb6fe6fa2835 105 {
adisuciu 0:fb6fe6fa2835 106 unsigned char data[size];
adisuciu 0:fb6fe6fa2835 107 uint16_t receivedData = 0x00;
adisuciu 0:fb6fe6fa2835 108 unsigned char byte;
adisuciu 0:fb6fe6fa2835 109
adisuciu 0:fb6fe6fa2835 110 data[0] = AD7798_COMM_READ | AD7798_COMM_ADDR(regAddress);
adisuciu 0:fb6fe6fa2835 111
adisuciu 0:fb6fe6fa2835 112 spi_read(data, size, toggle_cs);
adisuciu 0:fb6fe6fa2835 113
adisuciu 0:fb6fe6fa2835 114 receivedData = data[0];
adisuciu 0:fb6fe6fa2835 115
adisuciu 0:fb6fe6fa2835 116 if(size > 1) {
adisuciu 0:fb6fe6fa2835 117
adisuciu 0:fb6fe6fa2835 118 for(byte = 1; byte < size; byte++) {
adisuciu 0:fb6fe6fa2835 119 receivedData = (receivedData << (byte * 8) | data[byte]);
adisuciu 0:fb6fe6fa2835 120 }
adisuciu 0:fb6fe6fa2835 121 }
adisuciu 0:fb6fe6fa2835 122 return receivedData;
adisuciu 0:fb6fe6fa2835 123 }
adisuciu 0:fb6fe6fa2835 124 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 125 * @brief Writes the value to the register
adisuciu 0:fb6fe6fa2835 126 *
adisuciu 0:fb6fe6fa2835 127 * @param - regAddress - The address of the register to write to.
adisuciu 0:fb6fe6fa2835 128 * @param - regValue - The value to write to the register.
adisuciu 0:fb6fe6fa2835 129 * @param - size - The size of the register to write.
adisuciu 0:fb6fe6fa2835 130 *
adisuciu 0:fb6fe6fa2835 131 * @return None.
adisuciu 0:fb6fe6fa2835 132 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 133 void AD7798::set_register_value(uint8_t regAddress, uint16_t regValue,
adisuciu 0:fb6fe6fa2835 134 uint8_t size, bool toggle_cs)
adisuciu 0:fb6fe6fa2835 135 {
adisuciu 0:fb6fe6fa2835 136 uint8_t data[size + 1];
adisuciu 0:fb6fe6fa2835 137 uint8_t byte;
adisuciu 0:fb6fe6fa2835 138 uint16_t mask;
adisuciu 0:fb6fe6fa2835 139
adisuciu 0:fb6fe6fa2835 140 data[0] = AD7798_COMM_WRITE | AD7798_COMM_ADDR(regAddress);
adisuciu 0:fb6fe6fa2835 141
adisuciu 0:fb6fe6fa2835 142 if(size == 1) {
adisuciu 0:fb6fe6fa2835 143
adisuciu 0:fb6fe6fa2835 144 mask = 0x00FF;
adisuciu 0:fb6fe6fa2835 145
adisuciu 0:fb6fe6fa2835 146 } else {
adisuciu 0:fb6fe6fa2835 147
adisuciu 0:fb6fe6fa2835 148 mask = 0xFF00;
adisuciu 0:fb6fe6fa2835 149 }
adisuciu 0:fb6fe6fa2835 150
adisuciu 0:fb6fe6fa2835 151 for(byte = 1; byte <= size; byte++) {
adisuciu 0:fb6fe6fa2835 152 data[byte] = (uint8_t)((regValue & mask) >> ((size - byte) * 8));
adisuciu 0:fb6fe6fa2835 153 mask = mask >> (byte * 8);
adisuciu 0:fb6fe6fa2835 154 }
adisuciu 0:fb6fe6fa2835 155
adisuciu 0:fb6fe6fa2835 156 spi_write(data, (1 + size), toggle_cs);
adisuciu 0:fb6fe6fa2835 157
adisuciu 0:fb6fe6fa2835 158
adisuciu 0:fb6fe6fa2835 159 }
adisuciu 0:fb6fe6fa2835 160 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 161 * @brief Reads /RDY bit of status reg.
adisuciu 0:fb6fe6fa2835 162 *
adisuciu 0:fb6fe6fa2835 163 * @param None.
adisuciu 0:fb6fe6fa2835 164 *
adisuciu 0:fb6fe6fa2835 165 * @return rdy - 0 if RDY is 1.
adisuciu 0:fb6fe6fa2835 166 * - 1 if RDY is 0.
adisuciu 0:fb6fe6fa2835 167 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 168 uint8_t AD7798::ready(void)
adisuciu 0:fb6fe6fa2835 169 {
adisuciu 0:fb6fe6fa2835 170
adisuciu 0:fb6fe6fa2835 171 while((get_register_value( AD7798_REG_STAT, 1) & 0x80) != 0x80);
adisuciu 0:fb6fe6fa2835 172
adisuciu 0:fb6fe6fa2835 173 return(1);
adisuciu 0:fb6fe6fa2835 174 }
adisuciu 0:fb6fe6fa2835 175
adisuciu 0:fb6fe6fa2835 176 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 177 * @brief Sets the operating mode of AD7798.
adisuciu 0:fb6fe6fa2835 178 *
adisuciu 0:fb6fe6fa2835 179 * @param mode - Mode of operation.
adisuciu 0:fb6fe6fa2835 180 *
adisuciu 0:fb6fe6fa2835 181 * @return None.
adisuciu 0:fb6fe6fa2835 182 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 183 void AD7798::set_mode(uint8_t mode)
adisuciu 0:fb6fe6fa2835 184 {
adisuciu 0:fb6fe6fa2835 185 unsigned long command;
adisuciu 0:fb6fe6fa2835 186 command = get_register_value(AD7798_REG_MODE, 2);
adisuciu 0:fb6fe6fa2835 187 command &= ~AD7798_MODE_SEL(0xFF);
adisuciu 0:fb6fe6fa2835 188 command |= AD7798_MODE_SEL(mode);
adisuciu 0:fb6fe6fa2835 189 set_register_value(
adisuciu 0:fb6fe6fa2835 190 AD7798_REG_MODE,
adisuciu 0:fb6fe6fa2835 191 command,
adisuciu 0:fb6fe6fa2835 192 2
adisuciu 0:fb6fe6fa2835 193 );
adisuciu 0:fb6fe6fa2835 194 }
adisuciu 0:fb6fe6fa2835 195 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 196 * @brief Selects the channel of AD7798.
adisuciu 0:fb6fe6fa2835 197 *
adisuciu 0:fb6fe6fa2835 198 * @param channel - ADC channel selection.
adisuciu 0:fb6fe6fa2835 199 *
adisuciu 0:fb6fe6fa2835 200 * @return None.
adisuciu 0:fb6fe6fa2835 201 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 202 void AD7798::set_channel(uint8_t channel)
adisuciu 0:fb6fe6fa2835 203 {
adisuciu 0:fb6fe6fa2835 204 unsigned long command;
adisuciu 0:fb6fe6fa2835 205 command = get_register_value(AD7798_REG_CONF, 2);
adisuciu 0:fb6fe6fa2835 206 command &= ~AD7798_CONF_CHAN(0xFF);
adisuciu 0:fb6fe6fa2835 207 command |= AD7798_CONF_CHAN(channel);
adisuciu 0:fb6fe6fa2835 208 set_register_value(
adisuciu 0:fb6fe6fa2835 209 AD7798_REG_CONF,
adisuciu 0:fb6fe6fa2835 210 command,
adisuciu 0:fb6fe6fa2835 211 2
adisuciu 0:fb6fe6fa2835 212 );
adisuciu 0:fb6fe6fa2835 213 }
adisuciu 0:fb6fe6fa2835 214
adisuciu 0:fb6fe6fa2835 215 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 216 * @brief Sets the gain of the In-Amp.
adisuciu 0:fb6fe6fa2835 217 *
adisuciu 0:fb6fe6fa2835 218 * @param gain - Gain.
adisuciu 0:fb6fe6fa2835 219 *
adisuciu 0:fb6fe6fa2835 220 * @return None.
adisuciu 0:fb6fe6fa2835 221 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 222 void AD7798::set_gain(uint16_t gain)
adisuciu 0:fb6fe6fa2835 223 {
adisuciu 0:fb6fe6fa2835 224 uint16_t command;
adisuciu 0:fb6fe6fa2835 225 command = get_register_value(AD7798_REG_CONF, 2);
adisuciu 0:fb6fe6fa2835 226 command &= ~AD7798_CONF_GAIN(0xFF);
adisuciu 0:fb6fe6fa2835 227 command |= AD7798_CONF_GAIN(gain);
adisuciu 0:fb6fe6fa2835 228 set_register_value(
adisuciu 0:fb6fe6fa2835 229 AD7798_REG_CONF,
adisuciu 0:fb6fe6fa2835 230 command,
adisuciu 0:fb6fe6fa2835 231 2
adisuciu 0:fb6fe6fa2835 232 );
adisuciu 0:fb6fe6fa2835 233 }
adisuciu 0:fb6fe6fa2835 234
adisuciu 0:fb6fe6fa2835 235 void AD7798::set_filter(uint8_t filter)
adisuciu 0:fb6fe6fa2835 236 {
adisuciu 0:fb6fe6fa2835 237 unsigned long command;
adisuciu 0:fb6fe6fa2835 238 command = get_register_value(AD7798_REG_MODE, 2);
adisuciu 0:fb6fe6fa2835 239 command &= ~AD7798_MODE_RATE(0x0F);
adisuciu 0:fb6fe6fa2835 240 command |= AD7798_MODE_RATE(filter);
adisuciu 0:fb6fe6fa2835 241 set_register_value(
adisuciu 0:fb6fe6fa2835 242 AD7798_REG_MODE,
adisuciu 0:fb6fe6fa2835 243 command,
adisuciu 0:fb6fe6fa2835 244 2
adisuciu 0:fb6fe6fa2835 245 );
adisuciu 0:fb6fe6fa2835 246 }
adisuciu 0:fb6fe6fa2835 247 /***************************************************************************//**
adisuciu 0:fb6fe6fa2835 248 * @brief Enables or disables the reference detect function.
adisuciu 0:fb6fe6fa2835 249 *
adisuciu 0:fb6fe6fa2835 250 * @param state - State of the reference detect function.
adisuciu 0:fb6fe6fa2835 251 * Example: 0 - Reference detect disabled.
adisuciu 0:fb6fe6fa2835 252 * 1 - Reference detect enabled.
adisuciu 0:fb6fe6fa2835 253 *
adisuciu 0:fb6fe6fa2835 254 * @return None.
adisuciu 0:fb6fe6fa2835 255 *******************************************************************************/
adisuciu 0:fb6fe6fa2835 256 void AD7798::set_reference(uint8_t state)
adisuciu 0:fb6fe6fa2835 257 {
adisuciu 0:fb6fe6fa2835 258 unsigned long command = 0;
adisuciu 0:fb6fe6fa2835 259 command = get_register_value(AD7798_REG_CONF, 2);
adisuciu 0:fb6fe6fa2835 260 command &= ~AD7798_CONF_REFDET(1);
adisuciu 0:fb6fe6fa2835 261 command |= AD7798_CONF_REFDET(state);
adisuciu 0:fb6fe6fa2835 262 set_register_value(AD7798_REG_CONF,
adisuciu 0:fb6fe6fa2835 263 command,
adisuciu 0:fb6fe6fa2835 264 2);
adisuciu 0:fb6fe6fa2835 265 }
adisuciu 0:fb6fe6fa2835 266
adisuciu 0:fb6fe6fa2835 267 void AD7798::set_coding_mode(uint8_t mode)
adisuciu 0:fb6fe6fa2835 268 {
adisuciu 0:fb6fe6fa2835 269 uint16_t command;
adisuciu 0:fb6fe6fa2835 270
adisuciu 0:fb6fe6fa2835 271 command = get_register_value(AD7798_REG_CONF, 2);
adisuciu 0:fb6fe6fa2835 272
adisuciu 0:fb6fe6fa2835 273 if(mode == AD7798_BIPOLAR) {
adisuciu 0:fb6fe6fa2835 274
adisuciu 0:fb6fe6fa2835 275 command &= ~AD7798_CONF_UNIPOLAR;
adisuciu 0:fb6fe6fa2835 276
adisuciu 0:fb6fe6fa2835 277 } else if(mode == AD7798_UNIPOLAR) {
adisuciu 0:fb6fe6fa2835 278
adisuciu 0:fb6fe6fa2835 279 command |= AD7798_CONF_UNIPOLAR;
adisuciu 0:fb6fe6fa2835 280 }
adisuciu 0:fb6fe6fa2835 281 set_register_value(
adisuciu 0:fb6fe6fa2835 282 AD7798_REG_CONF,
adisuciu 0:fb6fe6fa2835 283 command,
adisuciu 0:fb6fe6fa2835 284 2
adisuciu 0:fb6fe6fa2835 285 );
adisuciu 0:fb6fe6fa2835 286 }
adisuciu 0:fb6fe6fa2835 287
adisuciu 0:fb6fe6fa2835 288 void AD7798::set_burnout_current(uint8_t select)
adisuciu 0:fb6fe6fa2835 289 {
adisuciu 0:fb6fe6fa2835 290 uint16_t command;
adisuciu 0:fb6fe6fa2835 291
adisuciu 0:fb6fe6fa2835 292 command = get_register_value(AD7798_REG_CONF, 2);
adisuciu 0:fb6fe6fa2835 293
adisuciu 0:fb6fe6fa2835 294 if(select == AD7798_DISABLE)
adisuciu 0:fb6fe6fa2835 295 command &= ~AD7798_CONF_BO_EN;
adisuciu 0:fb6fe6fa2835 296 else if(select == AD7798_ENABLE)
adisuciu 0:fb6fe6fa2835 297 command |= AD7798_CONF_BO_EN;
adisuciu 0:fb6fe6fa2835 298
adisuciu 0:fb6fe6fa2835 299 set_register_value(
adisuciu 0:fb6fe6fa2835 300 AD7798_REG_CONF,
adisuciu 0:fb6fe6fa2835 301 command,
adisuciu 0:fb6fe6fa2835 302 2
adisuciu 0:fb6fe6fa2835 303 );
adisuciu 0:fb6fe6fa2835 304 }
adisuciu 0:fb6fe6fa2835 305
adisuciu 0:fb6fe6fa2835 306 uint8_t AD7798::spi_read(uint8_t *data, uint8_t bytes_number, bool toggle_cs)
adisuciu 0:fb6fe6fa2835 307 {
adisuciu 0:fb6fe6fa2835 308 cs = false & toggle_cs;
adisuciu 0:fb6fe6fa2835 309 data[0] = ad7798.write(data[0]);
adisuciu 0:fb6fe6fa2835 310 for(uint8_t byte = 1; byte <= bytes_number; byte++) {
adisuciu 0:fb6fe6fa2835 311 data[byte - 1] = ad7798.write(data[byte]);
adisuciu 0:fb6fe6fa2835 312 }
adisuciu 0:fb6fe6fa2835 313 cs = true & toggle_cs;
adisuciu 0:fb6fe6fa2835 314 return bytes_number;
adisuciu 0:fb6fe6fa2835 315 }
adisuciu 0:fb6fe6fa2835 316 uint8_t AD7798::spi_write(uint8_t *data, uint8_t bytes_number, bool toggle_cs)
adisuciu 0:fb6fe6fa2835 317 {
adisuciu 0:fb6fe6fa2835 318 cs = false & toggle_cs;
adisuciu 0:fb6fe6fa2835 319 for(uint8_t byte = 0; byte < bytes_number; byte++) {
adisuciu 0:fb6fe6fa2835 320 ad7798.write(data[byte]);
adisuciu 0:fb6fe6fa2835 321 }
adisuciu 0:fb6fe6fa2835 322 cs = true & toggle_cs;
adisuciu 0:fb6fe6fa2835 323 return bytes_number;
adisuciu 0:fb6fe6fa2835 324 }
adisuciu 0:fb6fe6fa2835 325
adisuciu 0:fb6fe6fa2835 326 void AD7798::read_data(uint8_t adcChannel, uint16_t *adcData)
adisuciu 0:fb6fe6fa2835 327 {
adisuciu 0:fb6fe6fa2835 328
adisuciu 0:fb6fe6fa2835 329 uint8_t channel;
adisuciu 0:fb6fe6fa2835 330
adisuciu 0:fb6fe6fa2835 331 channel = 0x80 | adcChannel;
adisuciu 0:fb6fe6fa2835 332
adisuciu 0:fb6fe6fa2835 333 cs = 0;
adisuciu 0:fb6fe6fa2835 334
adisuciu 0:fb6fe6fa2835 335 set_register_value(AD7798_REG_MODE, 0x200A, 2);//, false);
adisuciu 0:fb6fe6fa2835 336 uint16_t regVal = 0;
adisuciu 0:fb6fe6fa2835 337 while( (regVal & channel) != channel) {
adisuciu 0:fb6fe6fa2835 338 regVal = get_register_value( AD7798_REG_STAT, 1);//, false);
adisuciu 0:fb6fe6fa2835 339 }
adisuciu 0:fb6fe6fa2835 340
adisuciu 0:fb6fe6fa2835 341 //timer_sleep(200);
adisuciu 0:fb6fe6fa2835 342 wait_ms(200); // ???
adisuciu 0:fb6fe6fa2835 343
adisuciu 0:fb6fe6fa2835 344 *adcData = get_register_value(AD7798_REG_DATA, 2);//, false);
adisuciu 0:fb6fe6fa2835 345
adisuciu 0:fb6fe6fa2835 346 cs = 1;
adisuciu 0:fb6fe6fa2835 347
adisuciu 0:fb6fe6fa2835 348
adisuciu 0:fb6fe6fa2835 349
adisuciu 0:fb6fe6fa2835 350 }