Program files for Example program for EVAL-AD7768-1

Dependencies:   platform_drivers

Committer:
Kjansen
Date:
Fri Sep 24 15:14:06 2021 +0100
Revision:
1:260e834a8dc1
Adding released source code of ad7768-1
Deleting the redefinition of data_capture_ops

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kjansen 1:260e834a8dc1 1 /***************************************************************************//**
Kjansen 1:260e834a8dc1 2 * @file ad77681.h
Kjansen 1:260e834a8dc1 3 * @brief Header file of the AD7768-1 Driver.
Kjansen 1:260e834a8dc1 4 * @author SPopa (stefan.popa@analog.com)
Kjansen 1:260e834a8dc1 5 ********************************************************************************
Kjansen 1:260e834a8dc1 6 * Copyright 2017(c) Analog Devices, Inc.
Kjansen 1:260e834a8dc1 7 *
Kjansen 1:260e834a8dc1 8 * All rights reserved.
Kjansen 1:260e834a8dc1 9 *
Kjansen 1:260e834a8dc1 10 * Redistribution and use in source and binary forms, with or without
Kjansen 1:260e834a8dc1 11 * modification, are permitted provided that the following conditions are met:
Kjansen 1:260e834a8dc1 12 * - Redistributions of source code must retain the above copyright
Kjansen 1:260e834a8dc1 13 * notice, this list of conditions and the following disclaimer.
Kjansen 1:260e834a8dc1 14 * - Redistributions in binary form must reproduce the above copyright
Kjansen 1:260e834a8dc1 15 * notice, this list of conditions and the following disclaimer in
Kjansen 1:260e834a8dc1 16 * the documentation and/or other materials provided with the
Kjansen 1:260e834a8dc1 17 * distribution.
Kjansen 1:260e834a8dc1 18 * - Neither the name of Analog Devices, Inc. nor the names of its
Kjansen 1:260e834a8dc1 19 * contributors may be used to endorse or promote products derived
Kjansen 1:260e834a8dc1 20 * from this software without specific prior written permission.
Kjansen 1:260e834a8dc1 21 * - The use of this software may or may not infringe the patent rights
Kjansen 1:260e834a8dc1 22 * of one or more patent holders. This license does not release you
Kjansen 1:260e834a8dc1 23 * from the requirement that you obtain separate licenses from these
Kjansen 1:260e834a8dc1 24 * patent holders to use this software.
Kjansen 1:260e834a8dc1 25 * - Use of the software either in source or binary form, must be run
Kjansen 1:260e834a8dc1 26 * on or directly connected to an Analog Devices Inc. component.
Kjansen 1:260e834a8dc1 27 *
Kjansen 1:260e834a8dc1 28 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
Kjansen 1:260e834a8dc1 29 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
Kjansen 1:260e834a8dc1 30 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Kjansen 1:260e834a8dc1 31 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
Kjansen 1:260e834a8dc1 32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Kjansen 1:260e834a8dc1 33 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
Kjansen 1:260e834a8dc1 34 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Kjansen 1:260e834a8dc1 35 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Kjansen 1:260e834a8dc1 36 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Kjansen 1:260e834a8dc1 37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Kjansen 1:260e834a8dc1 38 *******************************************************************************/
Kjansen 1:260e834a8dc1 39
Kjansen 1:260e834a8dc1 40 #ifndef SRC_AD77681_H_
Kjansen 1:260e834a8dc1 41 #define SRC_AD77681_H_
Kjansen 1:260e834a8dc1 42
Kjansen 1:260e834a8dc1 43 //#include "spi_engine.h"
Kjansen 1:260e834a8dc1 44
Kjansen 1:260e834a8dc1 45 #include "spi.h"
Kjansen 1:260e834a8dc1 46 #include <stdbool.h>
Kjansen 1:260e834a8dc1 47
Kjansen 1:260e834a8dc1 48 /******************************************************************************/
Kjansen 1:260e834a8dc1 49 /********************** Macros and Constants Definitions **********************/
Kjansen 1:260e834a8dc1 50 /******************************************************************************/
Kjansen 1:260e834a8dc1 51 #define AD77681_REG_CHIP_TYPE 0x3
Kjansen 1:260e834a8dc1 52 #define AD77681_REG_PROD_ID_L 0x4
Kjansen 1:260e834a8dc1 53 #define AD77681_REG_PROD_ID_H 0x5
Kjansen 1:260e834a8dc1 54 #define AD77681_REG_CHIP_GRADE 0x6
Kjansen 1:260e834a8dc1 55 #define AD77681_REG_SCRATCH_PAD 0x0A
Kjansen 1:260e834a8dc1 56 #define AD77681_REG_VENDOR_L 0x0C
Kjansen 1:260e834a8dc1 57 #define AD77681_REG_VENDOR_H 0x0D
Kjansen 1:260e834a8dc1 58 #define AD77681_REG_INTERFACE_FORMAT 0x14
Kjansen 1:260e834a8dc1 59 #define AD77681_REG_POWER_CLOCK 0x15
Kjansen 1:260e834a8dc1 60 #define AD77681_REG_ANALOG 0x16
Kjansen 1:260e834a8dc1 61 #define AD77681_REG_ANALOG2 0x17
Kjansen 1:260e834a8dc1 62 #define AD77681_REG_CONVERSION 0x18
Kjansen 1:260e834a8dc1 63 #define AD77681_REG_DIGITAL_FILTER 0x19
Kjansen 1:260e834a8dc1 64 #define AD77681_REG_SINC3_DEC_RATE_MSB 0x1A
Kjansen 1:260e834a8dc1 65 #define AD77681_REG_SINC3_DEC_RATE_LSB 0x1B
Kjansen 1:260e834a8dc1 66 #define AD77681_REG_DUTY_CYCLE_RATIO 0x1C
Kjansen 1:260e834a8dc1 67 #define AD77681_REG_SYNC_RESET 0x1D
Kjansen 1:260e834a8dc1 68 #define AD77681_REG_GPIO_CONTROL 0x1E
Kjansen 1:260e834a8dc1 69 #define AD77681_REG_GPIO_WRITE 0x1F
Kjansen 1:260e834a8dc1 70 #define AD77681_REG_GPIO_READ 0x20
Kjansen 1:260e834a8dc1 71 #define AD77681_REG_OFFSET_HI 0x21
Kjansen 1:260e834a8dc1 72 #define AD77681_REG_OFFSET_MID 0x22
Kjansen 1:260e834a8dc1 73 #define AD77681_REG_OFFSET_LO 0x23
Kjansen 1:260e834a8dc1 74 #define AD77681_REG_GAIN_HI 0x24
Kjansen 1:260e834a8dc1 75 #define AD77681_REG_GAIN_MID 0x25
Kjansen 1:260e834a8dc1 76 #define AD77681_REG_GAIN_LO 0x26
Kjansen 1:260e834a8dc1 77 #define AD77681_REG_SPI_DIAG_ENABLE 0x28
Kjansen 1:260e834a8dc1 78 #define AD77681_REG_ADC_DIAG_ENABLE 0x29
Kjansen 1:260e834a8dc1 79 #define AD77681_REG_DIG_DIAG_ENABLE 0x2A
Kjansen 1:260e834a8dc1 80 #define AD77681_REG_ADC_DATA 0x2C
Kjansen 1:260e834a8dc1 81 #define AD77681_REG_MASTER_STATUS 0x2D
Kjansen 1:260e834a8dc1 82 #define AD77681_REG_SPI_DIAG_STATUS 0x2E
Kjansen 1:260e834a8dc1 83 #define AD77681_REG_ADC_DIAG_STATUS 0x2F
Kjansen 1:260e834a8dc1 84 #define AD77681_REG_DIG_DIAG_STATUS 0x30
Kjansen 1:260e834a8dc1 85 #define AD77681_REG_MCLK_COUNTER 0x31
Kjansen 1:260e834a8dc1 86
Kjansen 1:260e834a8dc1 87 /* AD77681_REG_INTERFACE_FORMAT */
Kjansen 1:260e834a8dc1 88 #define AD77681_INTERFACE_CRC_EN_MSK (0x1 << 6)
Kjansen 1:260e834a8dc1 89 #define AD77681_INTERFACE_CRC_EN(x) (((x) & 0x1) << 6)
Kjansen 1:260e834a8dc1 90 #define AD77681_INTERFACE_CRC_TYPE_MSK (0x1 << 5)
Kjansen 1:260e834a8dc1 91 #define AD77681_INTERFACE_CRC_TYPE(x) (((x) & 0x1) << 5)
Kjansen 1:260e834a8dc1 92 #define AD77681_INTERFACE_STATUS_EN_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 93 #define AD77681_INTERFACE_STATUS_EN(x) (((x) & 0x1) << 4)
Kjansen 1:260e834a8dc1 94 #define AD77681_INTERFACE_CONVLEN_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 95 #define AD77681_INTERFACE_CONVLEN(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 96 #define AD77681_INTERFACE_RDY_EN_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 97 #define AD77681_INTERFACE_RDY_EN(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 98 #define AD77681_INTERFACE_CONT_READ_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 99 #define AD77681_INTERFACE_CONT_READ_EN(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 100 #define AD77681_REG_COEFF_CONTROL 0x32
Kjansen 1:260e834a8dc1 101 #define AD77681_REG_COEFF_DATA 0x33
Kjansen 1:260e834a8dc1 102 #define AD77681_REG_ACCESS_KEY 0x34
Kjansen 1:260e834a8dc1 103
Kjansen 1:260e834a8dc1 104 /* AD77681_REG_SCRATCH_PAD*/
Kjansen 1:260e834a8dc1 105 #define AD77681_SCRATCHPAD_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 106 #define AD77681_SCRATCHPAD(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 107
Kjansen 1:260e834a8dc1 108 /* AD77681_REG_POWER_CLOCK */
Kjansen 1:260e834a8dc1 109 #define AD77681_POWER_CLK_PWRMODE_MSK 0x3
Kjansen 1:260e834a8dc1 110 #define AD77681_POWER_CLK_PWRMODE(x) (((x) & 0x3) << 0)
Kjansen 1:260e834a8dc1 111 #define AD77681_POWER_CLK_MOD_OUT_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 112 #define AD77681_POWER_CLK_MOD_OUT(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 113 #define AD77681_POWER_CLK_POWER_DOWN 0x08
Kjansen 1:260e834a8dc1 114 #define AD77681_POWER_CLK_MCLK_DIV_MSK (0x3 << 4)
Kjansen 1:260e834a8dc1 115 #define AD77681_POWER_CLK_MCLK_DIV(x) (((x) & 0x3) << 4)
Kjansen 1:260e834a8dc1 116 #define AD77681_POWER_CLK_CLOCK_SEL_MSK (0x3 << 6)
Kjansen 1:260e834a8dc1 117 #define AD77681_POWER_CLK_CLOCK_SEL(x) (((x) & 0x3) << 6)
Kjansen 1:260e834a8dc1 118
Kjansen 1:260e834a8dc1 119 /* AD77681_CONVERSION_REG */
Kjansen 1:260e834a8dc1 120 #define AD77681_CONVERSION_DIAG_MUX_MSK (0xF << 4)
Kjansen 1:260e834a8dc1 121 #define AD77681_CONVERSION_DIAG_MUX_SEL(x) (((x) & 0xF) << 4)
Kjansen 1:260e834a8dc1 122 #define AD77681_CONVERSION_DIAG_SEL_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 123 #define AD77681_CONVERSION_DIAG_SEL(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 124 #define AD77681_CONVERSION_MODE_MSK (0x7 << 0)
Kjansen 1:260e834a8dc1 125 #define AD77681_CONVERSION_MODE(x) (((x) & 0x7) << 0)
Kjansen 1:260e834a8dc1 126
Kjansen 1:260e834a8dc1 127 /* AD77681_REG_ANALOG */
Kjansen 1:260e834a8dc1 128 #define AD77681_ANALOG_REF_BUF_POS_MSK (0x3 << 6)
Kjansen 1:260e834a8dc1 129 #define AD77681_ANALOG_REF_BUF_POS(x) (((x) & 0x3) << 6)
Kjansen 1:260e834a8dc1 130 #define AD77681_ANALOG_REF_BUF_NEG_MSK (0x3 << 4)
Kjansen 1:260e834a8dc1 131 #define AD77681_ANALOG_REF_BUF_NEG(x) (((x) & 0x3) << 4)
Kjansen 1:260e834a8dc1 132 #define AD77681_ANALOG_AIN_BUF_POS_OFF_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 133 #define AD77681_ANALOG_AIN_BUF_POS_OFF(x) (((x) & 0x1) << 1)
Kjansen 1:260e834a8dc1 134 #define AD77681_ANALOG_AIN_BUF_NEG_OFF_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 135 #define AD77681_ANALOG_AIN_BUF_NEG_OFF(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 136
Kjansen 1:260e834a8dc1 137 /* AD77681_REG_ANALOG2 */
Kjansen 1:260e834a8dc1 138 #define AD77681_ANALOG2_VCM_MSK (0x7 << 0)
Kjansen 1:260e834a8dc1 139 #define AD77681_ANALOG2_VCM(x) (((x) & 0x7) << 0)
Kjansen 1:260e834a8dc1 140
Kjansen 1:260e834a8dc1 141 /* AD77681_REG_DIGITAL_FILTER */
Kjansen 1:260e834a8dc1 142 #define AD77681_DIGI_FILTER_60HZ_REJ_EN_MSK (0x1 << 7)
Kjansen 1:260e834a8dc1 143 #define AD77681_DIGI_FILTER_60HZ_REJ_EN(x) (((x) & 0x1) << 7)
Kjansen 1:260e834a8dc1 144 #define AD77681_DIGI_FILTER_FILTER_MSK (0x7 << 4)
Kjansen 1:260e834a8dc1 145 #define AD77681_DIGI_FILTER_FILTER(x) (((x) & 0x7) << 4)
Kjansen 1:260e834a8dc1 146 #define AD77681_DIGI_FILTER_DEC_RATE_MSK (0x7 << 0)
Kjansen 1:260e834a8dc1 147 #define AD77681_DIGI_FILTER_DEC_RATE(x) (((x) & 0x7) << 0)
Kjansen 1:260e834a8dc1 148
Kjansen 1:260e834a8dc1 149 /* AD77681_REG_SINC3_DEC_RATE_MSB */
Kjansen 1:260e834a8dc1 150 #define AD77681_SINC3_DEC_RATE_MSB_MSK (0x0F << 0)
Kjansen 1:260e834a8dc1 151 #define AD77681_SINC3_DEC_RATE_MSB(x) (((x) & 0x0F) << 0)
Kjansen 1:260e834a8dc1 152
Kjansen 1:260e834a8dc1 153 /* AD77681_REG_SINC3_DEC_RATE_LSB */
Kjansen 1:260e834a8dc1 154 #define AD77681_SINC3_DEC_RATE_LSB_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 155 #define AD77681_SINC3_DEC_RATE_LSB(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 156
Kjansen 1:260e834a8dc1 157 /* AD77681_REG_DUTY_CYCLE_RATIO */
Kjansen 1:260e834a8dc1 158 #define AD77681_DC_RATIO_IDLE_TIME_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 159 #define AD77681_DC_RATIO_IDLE_TIME(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 160
Kjansen 1:260e834a8dc1 161 /* AD77681_REG_SYNC_RESET */
Kjansen 1:260e834a8dc1 162 #define AD77681_SYNC_RST_SPI_STARTB_MSK (0x1 << 7)
Kjansen 1:260e834a8dc1 163 #define AD77681_SYNC_RST_SPI_STARTB(x) (((x) & 0x1) << 7)
Kjansen 1:260e834a8dc1 164 #define AD77681_SYNC_RST_SYNCOUT_EDGE_MSK (0x1 << 6)
Kjansen 1:260e834a8dc1 165 #define AD77681_SYNC_RST_SYNCOUT_EDGE(x) (((x) & 0x1) << 6)
Kjansen 1:260e834a8dc1 166 #define AD77681_SYNC_RST_GPIO_START_EN_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 167 #define AD77681_SYNC_RST_GPIO_START_EN(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 168 #define AD77681_SYNC_RST_SPI_RESET_MSK (0x3 << 0)
Kjansen 1:260e834a8dc1 169 #define AD77681_SYNC_RST_SPI_RESET(x) (((x) & 0x3) << 0)
Kjansen 1:260e834a8dc1 170
Kjansen 1:260e834a8dc1 171 /* AD77681_REG_GPIO_CONTROL */
Kjansen 1:260e834a8dc1 172 #define AD77681_GPIO_CNTRL_UGPIO_EN_MSK (0x1 << 7)
Kjansen 1:260e834a8dc1 173 #define AD77681_GPIO_CNTRL_UGPIO_EN(x) (((x) & 0x1) << 7)
Kjansen 1:260e834a8dc1 174 #define AD77681_GPIO_CNTRL_GPIO2_OD_EN_MSK (0x1 << 6)
Kjansen 1:260e834a8dc1 175 #define AD77681_GPIO_CNTRL_GPIO2_OD_EN(x) (((x) & 0x1) << 6)
Kjansen 1:260e834a8dc1 176 #define AD77681_GPIO_CNTRL_GPIO1_OD_EN_MSK (0x1 << 5)
Kjansen 1:260e834a8dc1 177 #define AD77681_GPIO_CNTRL_GPIO1_OD_EN(x) (((x) & 0x1) << 5)
Kjansen 1:260e834a8dc1 178 #define AD77681_GPIO_CNTRL_GPIO0_OD_EN_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 179 #define AD77681_GPIO_CNTRL_GPIO0_OD_EN(x) (((x) & 0x1) << 4)
Kjansen 1:260e834a8dc1 180 #define AD77681_GPIO_CNTRL_ALL_GPIOS_OD_EN_MSK (0x7 << 4)
Kjansen 1:260e834a8dc1 181 #define AD77681_GPIO_CNTRL_ALL_GPIOS_OD_EN(x) (((x) & 0x7) << 4)
Kjansen 1:260e834a8dc1 182 #define AD77681_GPIO_CNTRL_GPIO3_OP_EN_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 183 #define AD77681_GPIO_CNTRL_GPIO3_OP_EN(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 184 #define AD77681_GPIO_CNTRL_GPIO2_OP_EN_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 185 #define AD77681_GPIO_CNTRL_GPIO2_OP_EN(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 186 #define AD77681_GPIO_CNTRL_GPIO1_OP_EN_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 187 #define AD77681_GPIO_CNTRL_GPIO1_OP_EN(x) (((x) & 0x1) << 1)
Kjansen 1:260e834a8dc1 188 #define AD77681_GPIO_CNTRL_GPIO0_OP_EN_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 189 #define AD77681_GPIO_CNTRL_GPIO0_OP_EN(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 190 #define AD77681_GPIO_CNTRL_ALL_GPIOS_OP_EN_MSK (0xF << 0)
Kjansen 1:260e834a8dc1 191 #define AD77681_GPIO_CNTRL_ALL_GPIOS_OP_EN(x) (((x) & 0xF) << 0)
Kjansen 1:260e834a8dc1 192
Kjansen 1:260e834a8dc1 193 /* AD77681_REG_GPIO_WRITE */
Kjansen 1:260e834a8dc1 194 #define AD77681_GPIO_WRITE_3_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 195 #define AD77681_GPIO_WRITE_3(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 196 #define AD77681_GPIO_WRITE_2_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 197 #define AD77681_GPIO_WRITE_2(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 198 #define AD77681_GPIO_WRITE_1_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 199 #define AD77681_GPIO_WRITE_1(x) (((x) & 0x1) << 1)
Kjansen 1:260e834a8dc1 200 #define AD77681_GPIO_WRITE_0_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 201 #define AD77681_GPIO_WRITE_0(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 202 #define AD77681_GPIO_WRITE_ALL_MSK (0xF << 0)
Kjansen 1:260e834a8dc1 203 #define AD77681_GPIO_WRITE_ALL(x) (((x) & 0xF))
Kjansen 1:260e834a8dc1 204
Kjansen 1:260e834a8dc1 205 /* AD77681_REG_GPIO_READ */
Kjansen 1:260e834a8dc1 206 #define AD77681_GPIO_READ_3_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 207 #define AD77681_GPIO_READ_2_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 208 #define AD77681_GPIO_READ_1_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 209 #define AD77681_GPIO_READ_0_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 210 #define AD77681_GPIO_READ_ALL_MSK (0xF << 0)
Kjansen 1:260e834a8dc1 211
Kjansen 1:260e834a8dc1 212 /* AD77681_REG_OFFSET_HI */
Kjansen 1:260e834a8dc1 213 #define AD77681_OFFSET_HI_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 214 #define AD77681_OFFSET_HI(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 215
Kjansen 1:260e834a8dc1 216 /* AD77681_REG_OFFSET_MID */
Kjansen 1:260e834a8dc1 217 #define AD77681_OFFSET_MID_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 218 #define AD77681_OFFSET_MID(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 219
Kjansen 1:260e834a8dc1 220 /* AD77681_REG_OFFSET_LO */
Kjansen 1:260e834a8dc1 221 #define AD77681_OFFSET_LO_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 222 #define AD77681_OFFSET_LO(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 223
Kjansen 1:260e834a8dc1 224 /* AD77681_REG_GAIN_HI */
Kjansen 1:260e834a8dc1 225 #define AD77681_GAIN_HI_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 226 #define AD77681_GAIN_HI(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 227
Kjansen 1:260e834a8dc1 228 /* AD77681_REG_GAIN_MID */
Kjansen 1:260e834a8dc1 229 #define AD77681_GAIN_MID_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 230 #define AD77681_GAIN_MID(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 231
Kjansen 1:260e834a8dc1 232 /* AD77681_REG_GAIN_HI */
Kjansen 1:260e834a8dc1 233 #define AD77681_GAIN_LOW_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 234 #define AD77681_GAIN_LOW(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 235
Kjansen 1:260e834a8dc1 236 /* AD77681_REG_SPI_DIAG_ENABLE */
Kjansen 1:260e834a8dc1 237 #define AD77681_SPI_DIAG_ERR_SPI_IGNORE_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 238 #define AD77681_SPI_DIAG_ERR_SPI_IGNORE(x) (((x) & 0x1) << 4)
Kjansen 1:260e834a8dc1 239 #define AD77681_SPI_DIAG_ERR_SPI_CLK_CNT_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 240 #define AD77681_SPI_DIAG_ERR_SPI_CLK_CNT(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 241 #define AD77681_SPI_DIAG_ERR_SPI_RD_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 242 #define AD77681_SPI_DIAG_ERR_SPI_RD(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 243 #define AD77681_SPI_DIAG_ERR_SPI_WR_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 244 #define AD77681_SPI_DIAG_ERR_SPI_WR(x) (((x) & 0x1) << 1)
Kjansen 1:260e834a8dc1 245
Kjansen 1:260e834a8dc1 246 /* AD77681_REG_ADC_DIAG_ENABLE */
Kjansen 1:260e834a8dc1 247 #define AD77681_ADC_DIAG_ERR_DLDO_PSM_MSK (0x1 << 5)
Kjansen 1:260e834a8dc1 248 #define AD77681_ADC_DIAG_ERR_DLDO_PSM(x) (((x) & 0x1) << 5)
Kjansen 1:260e834a8dc1 249 #define AD77681_ADC_DIAG_ERR_ALDO_PSM_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 250 #define AD77681_ADC_DIAG_ERR_ALDO_PSM(x) (((x) & 0x1) << 4)
Kjansen 1:260e834a8dc1 251 #define AD77681_ADC_DIAG_ERR_FILT_SAT_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 252 #define AD77681_ADC_DIAG_ERR_FILT_SAT(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 253 #define AD77681_ADC_DIAG_ERR_FILT_NOT_SET_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 254 #define AD77681_ADC_DIAG_ERR_FILT_NOT_SET(x) (((x) & 0x1) << 1)
Kjansen 1:260e834a8dc1 255 #define AD77681_ADC_DIAG_ERR_EXT_CLK_QUAL_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 256 #define AD77681_ADC_DIAG_ERR_EXT_CLK_QUAL(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 257
Kjansen 1:260e834a8dc1 258 /* AD77681_REG_DIG_DIAG_ENABLE */
Kjansen 1:260e834a8dc1 259 #define AD77681_DIG_DIAG_ERR_MEMMAP_CRC_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 260 #define AD77681_DIG_DIAG_ERR_MEMMAP_CRC(x) (((x) & 0x1) << 4)
Kjansen 1:260e834a8dc1 261 #define AD77681_DIG_DIAG_ERR_RAM_CRC_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 262 #define AD77681_DIG_DIAG_ERR_RAM_CRC(x) (((x) & 0x1) << 3)
Kjansen 1:260e834a8dc1 263 #define AD77681_DIG_DIAG_ERR_FUSE_CRC_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 264 #define AD77681_DIG_DIAG_ERR_FUSE_CRC(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 265 #define AD77681_DIG_DIAG_FREQ_COUNT_EN_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 266 #define AD77681_DIG_DIAG_FREQ_COUNT_EN(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 267
Kjansen 1:260e834a8dc1 268 /* AD77681_REG_MASTER_STATUS */
Kjansen 1:260e834a8dc1 269 #define AD77681_MASTER_ERROR_MSK (0x1 << 7)
Kjansen 1:260e834a8dc1 270 #define AD77681_MASTER_ADC_ERROR_MSK (0x1 << 6)
Kjansen 1:260e834a8dc1 271 #define AD77681_MASTER_DIG_ERROR_MSK (0x1 << 5)
Kjansen 1:260e834a8dc1 272 #define AD77681_MASTER_DIG_ERR_EXT_CLK_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 273 #define AD77681_MASTER_FILT_SAT_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 274 #define AD77681_MASTER_FILT_NOT_SET_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 275 #define AD77681_MASTER_SPI_ERROR_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 276 #define AD77681_MASTER_POR_FLAG_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 277
Kjansen 1:260e834a8dc1 278 /* AD77681_REG_SPI_DIAG_STATUS */
Kjansen 1:260e834a8dc1 279 #define AD77681_SPI_IGNORE_ERROR_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 280 #define AD77681_SPI_IGNORE_ERROR_CLR(x) (((x) & 0x1) << 4)
Kjansen 1:260e834a8dc1 281 #define AD77681_SPI_CLK_CNT_ERROR_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 282 #define AD77681_SPI_READ_ERROR_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 283 #define AD77681_SPI_READ_ERROR_CLR(x) (((x) & 0x1) << 2)
Kjansen 1:260e834a8dc1 284 #define AD77681_SPI_WRITE_ERROR_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 285 #define AD77681_SPI_WRITE_ERROR_CLR(x) (((x) & 0x1) << 1)
Kjansen 1:260e834a8dc1 286 #define AD77681_SPI_CRC_ERROR_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 287 #define AD77681_SPI_CRC_ERROR_CLR(x) (((x) & 0x1) << 0)
Kjansen 1:260e834a8dc1 288
Kjansen 1:260e834a8dc1 289 /* AD77681_REG_ADC_DIAG_STATUS */
Kjansen 1:260e834a8dc1 290 #define AD77681_ADC_DLDO_PSM_ERROR_MSK (0x1 << 5)
Kjansen 1:260e834a8dc1 291 #define AD77681_ADC_ALDO_PSM_ERROR_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 292 #define AD77681_ADC_REF_DET_ERROR_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 293 #define AD77681_ADC_FILT_SAT_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 294 #define AD77681_ADC_FILT_NOT_SET_MSK (0x1 << 1)
Kjansen 1:260e834a8dc1 295 #define AD77681_ADC_DIG_ERR_EXT_CLK_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 296
Kjansen 1:260e834a8dc1 297 /* AD77681_REG_DIG_DIAG_STATUS */
Kjansen 1:260e834a8dc1 298 #define AD77681_DIG_MEMMAP_CRC_ERROR_MSK (0x1 << 4)
Kjansen 1:260e834a8dc1 299 #define AD77681_DIG_RAM_CRC_ERROR_MSK (0x1 << 3)
Kjansen 1:260e834a8dc1 300 #define AD77681_DIG_FUS_CRC_ERROR_MSK (0x1 << 2)
Kjansen 1:260e834a8dc1 301
Kjansen 1:260e834a8dc1 302 /* AD77681_REG_MCLK_COUNTER */
Kjansen 1:260e834a8dc1 303 #define AD77681_MCLK_COUNTER_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 304 #define AD77681_MCLK_COUNTER(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 305
Kjansen 1:260e834a8dc1 306 /* AD77681_REG_COEFF_CONTROL */
Kjansen 1:260e834a8dc1 307 #define AD77681_COEF_CONTROL_COEFFACCESSEN_MSK (0x1 << 7)
Kjansen 1:260e834a8dc1 308 #define AD77681_COEF_CONTROL_COEFFACCESSEN(x) (((x) & 0x1) << 7)
Kjansen 1:260e834a8dc1 309 #define AD77681_COEF_CONTROL_COEFFWRITEEN_MSK (0x1 << 6)
Kjansen 1:260e834a8dc1 310 #define AD77681_COEF_CONTROL_COEFFWRITEEN(x) (((x) & 0x1) << 6)
Kjansen 1:260e834a8dc1 311 #define AD77681_COEF_CONTROL_COEFFADDR_MSK (0x3F << 5)
Kjansen 1:260e834a8dc1 312 #define AD77681_COEF_CONTROL_COEFFADDR(x) (((x) & 0x3F) << 5)
Kjansen 1:260e834a8dc1 313
Kjansen 1:260e834a8dc1 314 /* AD77681_REG_COEFF_DATA */
Kjansen 1:260e834a8dc1 315 #define AD77681_COEFF_DATA_USERCOEFFEN_MSK (0x1 << 23)
Kjansen 1:260e834a8dc1 316 #define AD77681_COEFF_DATA_USERCOEFFEN(x) (((x) & 0x1) << 23)
Kjansen 1:260e834a8dc1 317 #define AD77681_COEFF_DATA_COEFFDATA_MSK (0x7FFFFF << 22)
Kjansen 1:260e834a8dc1 318 #define AD77681_COEFF_DATA_COEFFDATA(x) (((x) & 0x7FFFFF) << 22)
Kjansen 1:260e834a8dc1 319
Kjansen 1:260e834a8dc1 320 /* AD77681_REG_ACCESS_KEY */
Kjansen 1:260e834a8dc1 321 #define AD77681_ACCESS_KEY_MSK (0xFF << 0)
Kjansen 1:260e834a8dc1 322 #define AD77681_ACCESS_KEY(x) (((x) & 0xFF) << 0)
Kjansen 1:260e834a8dc1 323 #define AD77681_ACCESS_KEY_CHECK_MSK (0x1 << 0)
Kjansen 1:260e834a8dc1 324
Kjansen 1:260e834a8dc1 325 #define AD77681_REG_READ(x) ( (1 << 6) | (x & 0xFF) ) // Read from register x
Kjansen 1:260e834a8dc1 326 #define AD77681_REG_WRITE(x) ( (~(1 << 6)) & (x & 0xFF) ) // Write to register x
Kjansen 1:260e834a8dc1 327
Kjansen 1:260e834a8dc1 328 /* 8-bits wide checksum generated using the polynomial */
Kjansen 1:260e834a8dc1 329 #define AD77681_CRC8_POLY 0x07 // x^8 + x^2 + x^1 + x^0
Kjansen 1:260e834a8dc1 330
Kjansen 1:260e834a8dc1 331 /* Initial CRC for continuous read mode */
Kjansen 1:260e834a8dc1 332 #define INITIAL_CRC_CRC8 0x03
Kjansen 1:260e834a8dc1 333 #define INITIAL_CRC_XOR 0x6C
Kjansen 1:260e834a8dc1 334 #define INITIAL_CRC 0x00
Kjansen 1:260e834a8dc1 335
Kjansen 1:260e834a8dc1 336 #define CRC_DEBUG
Kjansen 1:260e834a8dc1 337
Kjansen 1:260e834a8dc1 338 /* AD7768-1 */
Kjansen 1:260e834a8dc1 339 /* A special key for exit the contiuous read mode, taken from the AD7768-1 datasheet */
Kjansen 1:260e834a8dc1 340 #define EXIT_CONT_READ 0x6C
Kjansen 1:260e834a8dc1 341 /* Bit resolution of the AD7768-1 */
Kjansen 1:260e834a8dc1 342 #define AD7768_N_BITS 24
Kjansen 1:260e834a8dc1 343 /* Full scale of the AD7768-1 = 2^24 = 16777216 */
Kjansen 1:260e834a8dc1 344 #define AD7768_FULL_SCALE (1 << AD7768_N_BITS)
Kjansen 1:260e834a8dc1 345 /* Half scale of the AD7768-1 = 2^23 = 8388608 */
Kjansen 1:260e834a8dc1 346 #define AD7768_HALF_SCALE (1 << (AD7768_N_BITS - 1))
Kjansen 1:260e834a8dc1 347
Kjansen 1:260e834a8dc1 348 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
Kjansen 1:260e834a8dc1 349
Kjansen 1:260e834a8dc1 350 #define ENABLE 1
Kjansen 1:260e834a8dc1 351 #define DISABLE 0
Kjansen 1:260e834a8dc1 352
Kjansen 1:260e834a8dc1 353 /*****************************************************************************/
Kjansen 1:260e834a8dc1 354 /*************************** Types Declarations *******************************/
Kjansen 1:260e834a8dc1 355 /******************************************************************************/
Kjansen 1:260e834a8dc1 356 enum ad77681_power_mode {
Kjansen 1:260e834a8dc1 357 AD77681_ECO = 0,
Kjansen 1:260e834a8dc1 358 AD77681_MEDIAN = 2,
Kjansen 1:260e834a8dc1 359 AD77681_FAST = 3,
Kjansen 1:260e834a8dc1 360 };
Kjansen 1:260e834a8dc1 361
Kjansen 1:260e834a8dc1 362 enum ad77681_mclk_div {
Kjansen 1:260e834a8dc1 363 AD77681_MCLK_DIV_16 = 0,
Kjansen 1:260e834a8dc1 364 AD77681_MCLK_DIV_8 = 1,
Kjansen 1:260e834a8dc1 365 AD77681_MCLK_DIV_4 = 2,
Kjansen 1:260e834a8dc1 366 AD77681_MCLK_DIV_2 = 3
Kjansen 1:260e834a8dc1 367 };
Kjansen 1:260e834a8dc1 368
Kjansen 1:260e834a8dc1 369 enum ad77681_conv_mode {
Kjansen 1:260e834a8dc1 370 AD77681_CONV_CONTINUOUS = 0,
Kjansen 1:260e834a8dc1 371 AD77681_CONV_ONE_SHOT = 1,
Kjansen 1:260e834a8dc1 372 AD77681_CONV_SINGLE = 2,
Kjansen 1:260e834a8dc1 373 AD77681_CONV_PERIODIC = 3,
Kjansen 1:260e834a8dc1 374 AD77681_CONV_STANDBY = 4
Kjansen 1:260e834a8dc1 375 };
Kjansen 1:260e834a8dc1 376
Kjansen 1:260e834a8dc1 377 enum ad77681_conv_len {
Kjansen 1:260e834a8dc1 378 AD77681_CONV_24BIT = 0,
Kjansen 1:260e834a8dc1 379 AD77681_CONV_16BIT = 1
Kjansen 1:260e834a8dc1 380 };
Kjansen 1:260e834a8dc1 381
Kjansen 1:260e834a8dc1 382 enum ad77681_rdy_dout {
Kjansen 1:260e834a8dc1 383 AD77681_RDY_DOUT_EN,
Kjansen 1:260e834a8dc1 384 AD77681_RDY_DOUT_DIS
Kjansen 1:260e834a8dc1 385 };
Kjansen 1:260e834a8dc1 386
Kjansen 1:260e834a8dc1 387 enum ad77681_conv_diag_mux {
Kjansen 1:260e834a8dc1 388 AD77681_TEMP_SENSOR = 0x0,
Kjansen 1:260e834a8dc1 389 AD77681_AIN_SHORT= 0x8,
Kjansen 1:260e834a8dc1 390 AD77681_POSITIVE_FS = 0x9,
Kjansen 1:260e834a8dc1 391 AD77681_NEGATIVE_FS = 0xA
Kjansen 1:260e834a8dc1 392 };
Kjansen 1:260e834a8dc1 393
Kjansen 1:260e834a8dc1 394 enum ad77681_crc_sel {
Kjansen 1:260e834a8dc1 395 AD77681_CRC,
Kjansen 1:260e834a8dc1 396 AD77681_XOR,
Kjansen 1:260e834a8dc1 397 AD77681_NO_CRC
Kjansen 1:260e834a8dc1 398 };
Kjansen 1:260e834a8dc1 399
Kjansen 1:260e834a8dc1 400 /* Filter tye FIR, SINC3, SINC5 */
Kjansen 1:260e834a8dc1 401 enum ad77681_filter_type {
Kjansen 1:260e834a8dc1 402 AD77681_SINC5 = 0,
Kjansen 1:260e834a8dc1 403 AD77681_SINC5_DECx8 = 1,
Kjansen 1:260e834a8dc1 404 AD77681_SINC5_DECx16 = 2,
Kjansen 1:260e834a8dc1 405 AD77681_SINC3 = 3,
Kjansen 1:260e834a8dc1 406 AD77681_FIR = 4
Kjansen 1:260e834a8dc1 407 };
Kjansen 1:260e834a8dc1 408
Kjansen 1:260e834a8dc1 409 /* Dectimation ratios for SINC5 and FIR */
Kjansen 1:260e834a8dc1 410 enum ad77681_sinc5_fir_decimate {
Kjansen 1:260e834a8dc1 411 AD77681_SINC5_FIR_DECx32 = 0,
Kjansen 1:260e834a8dc1 412 AD77681_SINC5_FIR_DECx64 = 1,
Kjansen 1:260e834a8dc1 413 AD77681_SINC5_FIR_DECx128 = 2,
Kjansen 1:260e834a8dc1 414 AD77681_SINC5_FIR_DECx256 = 3,
Kjansen 1:260e834a8dc1 415 AD77681_SINC5_FIR_DECx512 = 4,
Kjansen 1:260e834a8dc1 416 AD77681_SINC5_FIR_DECx1024 = 5
Kjansen 1:260e834a8dc1 417 };
Kjansen 1:260e834a8dc1 418
Kjansen 1:260e834a8dc1 419 /* Sleep / Power up */
Kjansen 1:260e834a8dc1 420 enum ad77681_sleep_wake {
Kjansen 1:260e834a8dc1 421 AD77681_SLEEP = 1,
Kjansen 1:260e834a8dc1 422 AD77681_WAKE = 0
Kjansen 1:260e834a8dc1 423 };
Kjansen 1:260e834a8dc1 424
Kjansen 1:260e834a8dc1 425 /* Reset option */
Kjansen 1:260e834a8dc1 426 enum ad7761_reset_option {
Kjansen 1:260e834a8dc1 427 AD77681_SOFT_RESET,
Kjansen 1:260e834a8dc1 428 AD77681_HARD_RESET
Kjansen 1:260e834a8dc1 429 };
Kjansen 1:260e834a8dc1 430 /* AIN- precharge */
Kjansen 1:260e834a8dc1 431 enum ad77681_AINn_precharge {
Kjansen 1:260e834a8dc1 432 AD77681_AINn_ENABLED = 0,
Kjansen 1:260e834a8dc1 433 AD77681_AINn_DISABLED = 1
Kjansen 1:260e834a8dc1 434 };
Kjansen 1:260e834a8dc1 435
Kjansen 1:260e834a8dc1 436 /* AIN+ precharge */
Kjansen 1:260e834a8dc1 437 enum ad77681_AINp_precharge {
Kjansen 1:260e834a8dc1 438 AD77681_AINp_ENABLED = 0,
Kjansen 1:260e834a8dc1 439 AD77681_AINp_DISABLED = 1
Kjansen 1:260e834a8dc1 440 };
Kjansen 1:260e834a8dc1 441
Kjansen 1:260e834a8dc1 442 /* REF- buffer */
Kjansen 1:260e834a8dc1 443 enum ad77681_REFn_buffer {
Kjansen 1:260e834a8dc1 444 AD77681_BUFn_ENABLED = 0,
Kjansen 1:260e834a8dc1 445 AD77681_BUFn_DISABLED = 1,
Kjansen 1:260e834a8dc1 446 AD77681_BUFn_FULL_BUFFER_ON = 2
Kjansen 1:260e834a8dc1 447 };
Kjansen 1:260e834a8dc1 448
Kjansen 1:260e834a8dc1 449 /* REF+ buffer */
Kjansen 1:260e834a8dc1 450 enum ad77681_REFp_buffer {
Kjansen 1:260e834a8dc1 451 AD77681_BUFp_ENABLED = 0,
Kjansen 1:260e834a8dc1 452 AD77681_BUFp_DISABLED = 1,
Kjansen 1:260e834a8dc1 453 AD77681_BUFp_FULL_BUFFER_ON = 2
Kjansen 1:260e834a8dc1 454 };
Kjansen 1:260e834a8dc1 455
Kjansen 1:260e834a8dc1 456 /* VCM output voltage */
Kjansen 1:260e834a8dc1 457 enum ad77681_VCM_out {
Kjansen 1:260e834a8dc1 458 AD77681_VCM_HALF_VCC = 0,
Kjansen 1:260e834a8dc1 459 AD77681_VCM_2_5V = 1,
Kjansen 1:260e834a8dc1 460 AD77681_VCM_2_05V = 2,
Kjansen 1:260e834a8dc1 461 AD77681_VCM_1_9V = 3,
Kjansen 1:260e834a8dc1 462 AD77681_VCM_1_65V = 4,
Kjansen 1:260e834a8dc1 463 AD77681_VCM_1_1V = 5,
Kjansen 1:260e834a8dc1 464 AD77681_VCM_0_9V = 6,
Kjansen 1:260e834a8dc1 465 AD77681_VCM_OFF = 7
Kjansen 1:260e834a8dc1 466 };
Kjansen 1:260e834a8dc1 467
Kjansen 1:260e834a8dc1 468 /* Global GPIO enable/disable */
Kjansen 1:260e834a8dc1 469 enum ad77681_gobal_gpio_enable {
Kjansen 1:260e834a8dc1 470 AD77681_GLOBAL_GPIO_ENABLE = 1,
Kjansen 1:260e834a8dc1 471 AD77681_GLOBAL_GPIO_DISABLE = 0
Kjansen 1:260e834a8dc1 472 };
Kjansen 1:260e834a8dc1 473
Kjansen 1:260e834a8dc1 474 /* ADCs GPIO numbering */
Kjansen 1:260e834a8dc1 475 enum ad77681_gpios {
Kjansen 1:260e834a8dc1 476 AD77681_GPIO0 = 0,
Kjansen 1:260e834a8dc1 477 AD77681_GPIO1 = 1,
Kjansen 1:260e834a8dc1 478 AD77681_GPIO2 = 2,
Kjansen 1:260e834a8dc1 479 AD77681_GPIO3 = 3,
Kjansen 1:260e834a8dc1 480 AD77681_ALL_GPIOS = 4
Kjansen 1:260e834a8dc1 481 };
Kjansen 1:260e834a8dc1 482
Kjansen 1:260e834a8dc1 483 enum ad77681_gpio_output_type {
Kjansen 1:260e834a8dc1 484 AD77681_GPIO_STRONG_DRIVER = 0,
Kjansen 1:260e834a8dc1 485 AD77681_GPIO_OPEN_DRAIN = 1
Kjansen 1:260e834a8dc1 486 };
Kjansen 1:260e834a8dc1 487
Kjansen 1:260e834a8dc1 488 /* Continuous ADC read */
Kjansen 1:260e834a8dc1 489 enum ad77681_continuous_read {
Kjansen 1:260e834a8dc1 490 AD77681_CONTINUOUS_READ_ENABLE = 1,
Kjansen 1:260e834a8dc1 491 AD77681_CONTINUOUS_READ_DISABLE = 0,
Kjansen 1:260e834a8dc1 492 };
Kjansen 1:260e834a8dc1 493
Kjansen 1:260e834a8dc1 494 /* ADC data read mode */
Kjansen 1:260e834a8dc1 495 enum ad77681_data_read_mode {
Kjansen 1:260e834a8dc1 496 AD77681_REGISTER_DATA_READ = 0,
Kjansen 1:260e834a8dc1 497 AD77681_CONTINUOUS_DATA_READ = 1,
Kjansen 1:260e834a8dc1 498 };
Kjansen 1:260e834a8dc1 499
Kjansen 1:260e834a8dc1 500 /* ADC data structure */
Kjansen 1:260e834a8dc1 501 struct adc_data {
Kjansen 1:260e834a8dc1 502 bool finish;
Kjansen 1:260e834a8dc1 503 uint16_t count;
Kjansen 1:260e834a8dc1 504 uint16_t samples;
Kjansen 1:260e834a8dc1 505 uint32_t raw_data[4096];
Kjansen 1:260e834a8dc1 506 };
Kjansen 1:260e834a8dc1 507 /* ADC status registers structure */
Kjansen 1:260e834a8dc1 508 struct ad77681_status_registers {
Kjansen 1:260e834a8dc1 509 bool master_error;
Kjansen 1:260e834a8dc1 510 bool adc_error;
Kjansen 1:260e834a8dc1 511 bool dig_error;
Kjansen 1:260e834a8dc1 512 bool adc_err_ext_clk_qual;
Kjansen 1:260e834a8dc1 513 bool adc_filt_saturated;
Kjansen 1:260e834a8dc1 514 bool adc_filt_not_settled;
Kjansen 1:260e834a8dc1 515 bool spi_error;
Kjansen 1:260e834a8dc1 516 bool por_flag;
Kjansen 1:260e834a8dc1 517 bool spi_ignore;
Kjansen 1:260e834a8dc1 518 bool spi_clock_count;
Kjansen 1:260e834a8dc1 519 bool spi_read_error;
Kjansen 1:260e834a8dc1 520 bool spi_write_error;
Kjansen 1:260e834a8dc1 521 bool spi_crc_error;
Kjansen 1:260e834a8dc1 522 bool dldo_psm_error;
Kjansen 1:260e834a8dc1 523 bool aldo_psm_error;
Kjansen 1:260e834a8dc1 524 bool ref_det_error;
Kjansen 1:260e834a8dc1 525 bool filt_sat_error;
Kjansen 1:260e834a8dc1 526 bool filt_not_set_error;
Kjansen 1:260e834a8dc1 527 bool ext_clk_qual_error;
Kjansen 1:260e834a8dc1 528 bool memoy_map_crc_error;
Kjansen 1:260e834a8dc1 529 bool ram_crc_error;
Kjansen 1:260e834a8dc1 530 bool fuse_crc_error;
Kjansen 1:260e834a8dc1 531 };
Kjansen 1:260e834a8dc1 532
Kjansen 1:260e834a8dc1 533 struct ad77681_dev {
Kjansen 1:260e834a8dc1 534 /* SPI */
Kjansen 1:260e834a8dc1 535 spi_desc *spi_desc;
Kjansen 1:260e834a8dc1 536 /* Configuration */
Kjansen 1:260e834a8dc1 537 enum ad77681_power_mode power_mode;
Kjansen 1:260e834a8dc1 538 enum ad77681_mclk_div mclk_div;
Kjansen 1:260e834a8dc1 539 enum ad77681_conv_mode conv_mode;
Kjansen 1:260e834a8dc1 540 enum ad77681_conv_diag_mux diag_mux_sel;
Kjansen 1:260e834a8dc1 541 bool conv_diag_sel;
Kjansen 1:260e834a8dc1 542 enum ad77681_conv_len conv_len;
Kjansen 1:260e834a8dc1 543 enum ad77681_crc_sel crc_sel;
Kjansen 1:260e834a8dc1 544 uint8_t status_bit;
Kjansen 1:260e834a8dc1 545 enum ad77681_VCM_out VCM_out;
Kjansen 1:260e834a8dc1 546 enum ad77681_AINn_precharge AINn;
Kjansen 1:260e834a8dc1 547 enum ad77681_AINp_precharge AINp;
Kjansen 1:260e834a8dc1 548 enum ad77681_REFn_buffer REFn;
Kjansen 1:260e834a8dc1 549 enum ad77681_REFp_buffer REFp;
Kjansen 1:260e834a8dc1 550 enum ad77681_filter_type filter;
Kjansen 1:260e834a8dc1 551 enum ad77681_sinc5_fir_decimate decimate;
Kjansen 1:260e834a8dc1 552 uint16_t sinc3_osr;
Kjansen 1:260e834a8dc1 553 uint16_t vref; /* Reference voltage*/
Kjansen 1:260e834a8dc1 554 uint16_t mclk; /* Mater clock*/
Kjansen 1:260e834a8dc1 555 uint32_t sample_rate; /* Sample rate*/
Kjansen 1:260e834a8dc1 556 uint8_t data_frame_byte; /* SPI 8bit frames*/
Kjansen 1:260e834a8dc1 557 };
Kjansen 1:260e834a8dc1 558
Kjansen 1:260e834a8dc1 559 struct ad77681_init_param {
Kjansen 1:260e834a8dc1 560 /* SPI */
Kjansen 1:260e834a8dc1 561 spi_init_param spi_eng_dev_init;
Kjansen 1:260e834a8dc1 562 /* Configuration */
Kjansen 1:260e834a8dc1 563 enum ad77681_power_mode power_mode;
Kjansen 1:260e834a8dc1 564 enum ad77681_mclk_div mclk_div;
Kjansen 1:260e834a8dc1 565 enum ad77681_conv_mode conv_mode;
Kjansen 1:260e834a8dc1 566 enum ad77681_conv_diag_mux diag_mux_sel;
Kjansen 1:260e834a8dc1 567 bool conv_diag_sel;
Kjansen 1:260e834a8dc1 568 enum ad77681_conv_len conv_len;
Kjansen 1:260e834a8dc1 569 enum ad77681_crc_sel crc_sel;
Kjansen 1:260e834a8dc1 570 uint8_t status_bit;
Kjansen 1:260e834a8dc1 571 enum ad77681_VCM_out VCM_out;
Kjansen 1:260e834a8dc1 572 enum ad77681_AINn_precharge AINn;
Kjansen 1:260e834a8dc1 573 enum ad77681_AINp_precharge AINp;
Kjansen 1:260e834a8dc1 574 enum ad77681_REFn_buffer REFn;
Kjansen 1:260e834a8dc1 575 enum ad77681_REFp_buffer REFp;
Kjansen 1:260e834a8dc1 576 enum ad77681_filter_type filter;
Kjansen 1:260e834a8dc1 577 enum ad77681_sinc5_fir_decimate decimate;
Kjansen 1:260e834a8dc1 578 uint16_t sinc3_osr;
Kjansen 1:260e834a8dc1 579 uint16_t vref;
Kjansen 1:260e834a8dc1 580 uint16_t mclk;
Kjansen 1:260e834a8dc1 581 uint32_t sample_rate;
Kjansen 1:260e834a8dc1 582 uint8_t data_frame_byte;
Kjansen 1:260e834a8dc1 583 };
Kjansen 1:260e834a8dc1 584
Kjansen 1:260e834a8dc1 585 /******************************************************************************/
Kjansen 1:260e834a8dc1 586 /************************ Functions Declarations ******************************/
Kjansen 1:260e834a8dc1 587 /******************************************************************************/
Kjansen 1:260e834a8dc1 588 uint8_t ad77681_compute_crc8(uint8_t *data,
Kjansen 1:260e834a8dc1 589 uint8_t data_size,
Kjansen 1:260e834a8dc1 590 uint8_t init_val);
Kjansen 1:260e834a8dc1 591 uint8_t ad77681_compute_xor(uint8_t *data,
Kjansen 1:260e834a8dc1 592 uint8_t data_size,
Kjansen 1:260e834a8dc1 593 uint8_t init_val);
Kjansen 1:260e834a8dc1 594 int32_t ad77681_setup(struct ad77681_dev **device,
Kjansen 1:260e834a8dc1 595 struct ad77681_init_param init_param,
Kjansen 1:260e834a8dc1 596 struct ad77681_status_registers **status);
Kjansen 1:260e834a8dc1 597 int32_t ad77681_spi_reg_read(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 598 uint8_t reg_addr,
Kjansen 1:260e834a8dc1 599 uint8_t *reg_data);
Kjansen 1:260e834a8dc1 600 int32_t ad77681_spi_read_mask(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 601 uint8_t reg_addr,
Kjansen 1:260e834a8dc1 602 uint8_t mask,
Kjansen 1:260e834a8dc1 603 uint8_t *data);
Kjansen 1:260e834a8dc1 604 int32_t ad77681_spi_reg_write(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 605 uint8_t reg_addr,
Kjansen 1:260e834a8dc1 606 uint8_t reg_data);
Kjansen 1:260e834a8dc1 607 int32_t ad77681_spi_write_mask(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 608 uint8_t reg_addr,
Kjansen 1:260e834a8dc1 609 uint8_t mask,
Kjansen 1:260e834a8dc1 610 uint8_t data);
Kjansen 1:260e834a8dc1 611 int32_t ad77681_set_power_mode(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 612 enum ad77681_power_mode mode);
Kjansen 1:260e834a8dc1 613 int32_t ad77681_set_mclk_div(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 614 enum ad77681_mclk_div clk_div);
Kjansen 1:260e834a8dc1 615 int32_t ad77681_spi_read_adc_data(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 616 uint8_t *adc_data,
Kjansen 1:260e834a8dc1 617 enum ad77681_data_read_mode mode);
Kjansen 1:260e834a8dc1 618 int32_t ad77681_set_conv_mode(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 619 enum ad77681_conv_mode conv_mode,
Kjansen 1:260e834a8dc1 620 enum ad77681_conv_diag_mux diag_mux_sel,
Kjansen 1:260e834a8dc1 621 bool conv_diag_sel);
Kjansen 1:260e834a8dc1 622 int32_t ad77681_set_convlen(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 623 enum ad77681_conv_len conv_len);
Kjansen 1:260e834a8dc1 624 int32_t ad77681_soft_reset(struct ad77681_dev *dev);
Kjansen 1:260e834a8dc1 625 int32_t ad77681_initiate_sync(struct ad77681_dev *dev);
Kjansen 1:260e834a8dc1 626 int32_t ad77681_programmable_filter(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 627 const float *coeffs,
Kjansen 1:260e834a8dc1 628 uint8_t num_coeffs);
Kjansen 1:260e834a8dc1 629 int32_t ad77681_gpio_read(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 630 uint8_t *value,
Kjansen 1:260e834a8dc1 631 enum ad77681_gpios gpio_number);
Kjansen 1:260e834a8dc1 632 int32_t ad77681_apply_offset(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 633 uint32_t value);
Kjansen 1:260e834a8dc1 634 int32_t ad77681_apply_gain(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 635 uint32_t value);
Kjansen 1:260e834a8dc1 636 int32_t ad77681_set_crc_sel(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 637 enum ad77681_crc_sel crc_sel);
Kjansen 1:260e834a8dc1 638 int32_t ad77681_gpio_open_drain(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 639 enum ad77681_gpios gpio_number,
Kjansen 1:260e834a8dc1 640 enum ad77681_gpio_output_type output_type);
Kjansen 1:260e834a8dc1 641 int32_t ad77681_set_continuos_read(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 642 enum ad77681_continuous_read continuous_enable);
Kjansen 1:260e834a8dc1 643 int32_t ad77681_clear_error_flags(struct ad77681_dev *dev);
Kjansen 1:260e834a8dc1 644 int32_t ad77681_data_to_voltage(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 645 uint32_t *raw_code,
Kjansen 1:260e834a8dc1 646 double *voltage);
Kjansen 1:260e834a8dc1 647 int32_t ad77681_CRC_status_handling(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 648 uint16_t *data_buffer);
Kjansen 1:260e834a8dc1 649 int32_t ad77681_set_AINn_buffer(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 650 enum ad77681_AINn_precharge AINn);
Kjansen 1:260e834a8dc1 651 int32_t ad77681_set_AINp_buffer(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 652 enum ad77681_AINp_precharge AINp);
Kjansen 1:260e834a8dc1 653 int32_t ad77681_set_REFn_buffer(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 654 enum ad77681_REFn_buffer REFn);
Kjansen 1:260e834a8dc1 655 int32_t ad77681_set_REFp_buffer(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 656 enum ad77681_REFp_buffer REFp);
Kjansen 1:260e834a8dc1 657 int32_t ad77681_set_filter_type(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 658 enum ad77681_sinc5_fir_decimate decimate,
Kjansen 1:260e834a8dc1 659 enum ad77681_filter_type filter,
Kjansen 1:260e834a8dc1 660 uint16_t sinc3_osr);
Kjansen 1:260e834a8dc1 661 int32_t ad77681_set_50HZ_rejection(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 662 uint8_t enable);
Kjansen 1:260e834a8dc1 663 int32_t ad77681_power_down(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 664 enum ad77681_sleep_wake sleep_wake);
Kjansen 1:260e834a8dc1 665 int32_t ad77681_set_status_bit(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 666 bool status_bit);
Kjansen 1:260e834a8dc1 667 int32_t ad77681_set_VCM_output(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 668 enum ad77681_VCM_out VCM_out);
Kjansen 1:260e834a8dc1 669 int32_t ad77681_gpio_write(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 670 uint8_t value,
Kjansen 1:260e834a8dc1 671 enum ad77681_gpios gpio_number);
Kjansen 1:260e834a8dc1 672 int32_t ad77681_gpio_inout(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 673 uint8_t direction,
Kjansen 1:260e834a8dc1 674 enum ad77681_gpios gpio_number);
Kjansen 1:260e834a8dc1 675 int32_t ad77681_global_gpio(struct ad77681_dev *devices,
Kjansen 1:260e834a8dc1 676 enum ad77681_gobal_gpio_enable gpio_enable);
Kjansen 1:260e834a8dc1 677 int32_t ad77681_scratchpad(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 678 uint8_t *sequence);
Kjansen 1:260e834a8dc1 679 int32_t ad77681_error_flags_enabe(struct ad77681_dev *dev);
Kjansen 1:260e834a8dc1 680 int32_t ad77681_update_sample_rate(struct ad77681_dev *dev);
Kjansen 1:260e834a8dc1 681 int32_t ad77681_SINC3_ODR(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 682 uint16_t *sinc3_dec_reg,
Kjansen 1:260e834a8dc1 683 float sinc3_odr);
Kjansen 1:260e834a8dc1 684 int32_t ad77681_status(struct ad77681_dev *dev,
Kjansen 1:260e834a8dc1 685 struct ad77681_status_registers *status);
Kjansen 1:260e834a8dc1 686 #endif /* SRC_AD77681_H_ */