John Garlitos / AD77681
Committer:
jngarlitos
Date:
Mon Mar 15 06:51:56 2021 +0000
Revision:
1:abe97d9dd504
Initial Commit for AD7768-1 library files

Who changed what in which revision?

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