aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/lib/mykonos/adi/t_mykonos_gpio.h
blob: 4ce66aa2d1ac22e65788777cc7dfa314d815517f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
/*!
 * \file t_mykonos_gpio.h
 * \brief Mykonos GPIO error handling and type defines
 *
 * Mykonos API version: 1.5.1.3565
 */

/**
* \page Disclaimer Legal Disclaimer
* Copyright 2015-2017 Analog Devices Inc.
* Released under the AD9371 API license, for more information see the "LICENSE.txt" file in this zip file.
*
*/

#ifndef T_MYKONOSGPIO_H_
#define T_MYKONOSGPIO_H_

#ifdef __cplusplus
extern "C" {
#endif


#include "common.h"

/**
 *  \brief Enum of unique error codes from the Mykonos GPIO API functions.
 * Each error condition in the library should get its own enum value to allow
 * easy debug of errors.
 */
typedef enum
{
	MYKONOS_ERR_GPIO_OK = 0,
	MYKONOS_ERR_EN_MONITOR_OUT_NOT_ENABLED,
    MYKONOS_ERR_EN_MONITOR_OUT_SRC_CTRL,
    MYKONOS_ERR_MONITOR_OUT_INDEX_RANGE,
    MYKONOS_ERR_GETGPIOMON_INDEX_NULL_PARM,
    MYKONOS_ERR_GETGPIOMON_MONITORMASK_NULL_PARM,

    MYKONOS_ERR_MGCRX2_GPIO_DECPIN_INV_PARAM,
    MYKONOS_ERR_MGCRX2_GPIO_INCPIN_INV_PARAM,
    MYKONOS_ERR_MGCRX2_SOURCE_CONFIG,
    MYKONOS_ERR_MGCRX2_STEP_INV_PARAM,
    MYKONOS_ERR_MGCRX1_GPIO_DECPIN_INV_PARAM,
    MYKONOS_ERR_MGCRX1_GPIO_INCPIN_INV_PARAM,
    MYKONOS_ERR_MGCRX1_STEP_INV_PARAM,
    MYKONOS_ERR_GETRX2PIN_INCSTEP_NULL_PARM,
    MYKONOS_ERR_GETRX2PIN_DECSTEP_NULL_PARM,
    MYKONOS_ERR_GETRX2PIN_INCPIN_NULL_PARM,
    MYKONOS_ERR_GETRX2PIN_DECPIN_NULL_PARM,
    MYKONOS_ERR_GETRX2PIN_EN_NULL_PARM,
    MYKONOS_ERR_GETRX1PIN_INCSTEP_NULL_PARM,
    MYKONOS_ERR_GETRX1PIN_DECSTEP_NULL_PARM,
    MYKONOS_ERR_GETRX1PIN_INCPIN_NULL_PARM,
    MYKONOS_ERR_GETRX1PIN_DECPIN_NULL_PARM,
    MYKONOS_ERR_GETRX1PIN_EN_NULL_PARM,

    MYKONOS_ERR_TPCTX2_GPIO_DECPIN_INV_PARAM,
    MYKONOS_ERR_TPCTX2_GPIO_INCPIN_INV_PARAM,
    MYKONOS_ERR_TPCTX2_GPIO_STEP_INV_PARAM,
    MYKONOS_ERR_TPCTX1_GPIO_DECPIN_INV_PARAM,
    MYKONOS_ERR_TPCTX1_GPIO_INCPIN_INV_PARAM,
    MYKONOS_ERR_TPCTX1_GPIO_STEP_INV_PARAM,
    MYKONOS_ERR_GETTX2PIN_STEP_NULL_PARM,
    MYKONOS_ERR_GETTX2PIN_INC_NULL_PARM,
    MYKONOS_ERR_GETTX2PIN_DEC_NULL_PARM,
    MYKONOS_ERR_GETTX2PIN_EN_NULL_PARM,
    MYKONOS_ERR_GETTX2PIN_TX1TX2_NULL_PARM,
    MYKONOS_ERR_GETTX1PIN_STEP_NULL_PARM,
    MYKONOS_ERR_GETTX1PIN_INC_NULL_PARM,
    MYKONOS_ERR_GETTX1PIN_DEC_NULL_PARM,
    MYKONOS_ERR_GETTX1PIN_EN_NULL_PARM,
    MYKONOS_ERR_GETTX1PIN_TX1TX2_NULL_PARM,

	MYKONOS_ERR_SPI2_INV_GPIO,
	MYKONOS_ERR_SPI2_INV_SETUP,

	MYKONOS_ERR_SET_GPIO_1V8_INV_POINTER,

	MYKONOS_ERR_GETGPIOSETLEVEL_NULL_PARM,
	MYKONOS_ERR_READGPIOSPI_NULL_PARM,
    MYKONOS_ERR_SET_GPIO_1V8_INV_MODE,
    MYKONOS_ERR_GETGPIO_OE_NULL_PARM,
    MYKONOS_ERR_GPIO_OE_INV_PARAM,
    MYKONOS_ERR_GPIO_SRC_PARAM_INV,
    MYKONOS_ERR_GET_GPIO_SOURCE_CONTROL_NULL_PARM,

    MYKONOS_ERR_INV_GP_INT_MASK_PARM,
    MYKONOS_ERR_GP_INT_STATUS_NULL_PARAM,

    MYKONOS_ERR_GETGPIO3V3OUT_NULL_PARM,
    MYKONOS_ERR_SET_GPIO_3V3_INV_POINTER,
    MYKONOS_ERR_GETGPIO3V3SPI_NULL_PARM,
    MYKONOS_ERR_GPIO3V3OUTEN_NULL_PARM,
    MYKONOS_ERR_SET_GPIO_3V3_INV_MODE,
    MYKONOS_ERR_SET_GPIO_3V3_INV_SRC_CTRL,

    MYKONOS_ERR_SET_ARMGPIO_INV_POINTER,
    MYKONOS_ERR_SET_ARMGPIO_PINS_ARMERROR,
    MYKONOS_ERR_SET_ARMGPIO_PINS_INV_SIGNALID,
    MYKONOS_ERR_SET_ARMGPIO_PINS_INV_GPIOPIN,

    MYKONOS_ERR_SETUPAUXDAC_NULL_PARAM,
    MYKONOS_ERR_WRITEAUXDAC_NULL_AUXIO,
    MYKONOS_ERR_READAUXADC_NULL_PARAM,
    MYKONOS_ERR_SETUPAUXDAC_INV_AUXDACCODE,
    MYKONOS_ERR_WRITEAUXDAC_INV_AUXDACCODE,
    MYKONOS_ERR_WRITEAUXDAC_INV_AUXDACINDEX,
    MYKONOS_ERR_INV_AUX_ADC_CHAN_PARM,
    MYKONOS_ERR_SETUPAUXADC_INV_VCODIV,
    MYKONOS_ERR_INV_AUX_ADC_DEC_PARM,

    MYKONOS_ERR_GAINCOMP_NULL_STRUCT,
    MYKONOS_ERR_GAINCOMP_EN_NULL_PARM,
    MYKONOS_ERR_GAINCOMP_SET_NULL_STRUCT,
    MYKONOS_ERR_GAINCOMP_INV_RX1_OFFSET,
    MYKONOS_ERR_GAINCOMP_INV_RX2_OFFSET,
    MYKONOS_ERR_GAINCOMP_INV_STEP,
    MYKONOS_ERR_GAINCOMP_INV_EN,

    MYKONOS_ERR_OBS_RX_GAINCOMP_SET_NULL_STRUCT,
    MYKONOS_ERR_OBS_RX_GAINCOMP_EN_NULL_PARAM,
    MYKONOS_ERR_OBS_RX_GAINCOMP_INV_EN,
    MYKONOS_ERR_OBS_RX_GAINCOMP_INV_OFFSET,
    MYKONOS_ERR_OBS_RX_GAINCOMP_INV_STEP,
    MYKONOS_ERR_OBS_RX_GAINCOMP_NULL_STRUCT,

    MYKONOS_ERR_SLICER_STEP_OUT_OF_RANGE,
    MYKONOS_ERR_SLICER_INV_RX1_SEL,
    MYKONOS_ERR_SLICER_INV_RX2_SEL,
    MYKONOS_ERR_SLICER_EN_INV,

    MYKONOS_ERR_SLICER_RX1PIN_NULL_PARM,
    MYKONOS_ERR_SLICER_RX2PIN_NULL_PARM,
    MYKONOS_ERR_SLICER_STEP_NULL_PARM,
    MYKONOS_ERR_SLICER_EN_NULL_PARM,

    MYKONOS_ERR_SLICER_INV_OBS_RX_SEL,
    MYKONOS_ERR_SLICER_OBS_RX_STEP_OUT_OF_RANGE,
    MYKONOS_ERR_SLICER_OBS_RX_EN_INV,
    MYKONOS_ERR_SLICER_OBS_RX_EN_NULL_PARM,
    MYKONOS_ERR_SLICER_OBS_RX_STEP_NULL_PARM,
    MYKONOS_ERR_SLICER_OBS_RXPIN_NULL_PARM,

    MYKONOS_ERR_FLOATFRMT_NULL_STRUCT,
    MYKONOS_ERR_FLOATFRMT_SET_NULL_STRUCT,
    MYKONOS_ERR_FLOATFRMT_INV_ROUND_MODE,
    MYKONOS_ERR_FLOATFRMT_INV_DATA_FORMAT,
    MYKONOS_ERR_FLOATFRMT_INV_ENC_NAN,
    MYKONOS_ERR_FLOATFRMT_INV_EXP_BITS,
    MYKONOS_ERR_FLOATFRMT_INV_LEADING,
    MYKONOS_ERR_FLOATFRMT_INV_RX1ATT,
    MYKONOS_ERR_FLOATFRMT_INV_RX2ATT,
    MYKONOS_ERR_FLOATFRMT_INV_EN,
    MYKONOS_ERR_FLOATFRMT_NULL_RX1ATT,
    MYKONOS_ERR_FLOATFRMT_NULL_RX2ATT,
    MYKONOS_ERR_FLOATFRMT_NULL_ENABLE,
    MYKONOS_ERR_FLOATFRMT_SET_INV_EN,
    MYKONOS_ERR_FLOATFRMT_SET_INV_RX1ATT,
    MYKONOS_ERR_FLOATFRMT_SET_INV_RX2ATT,

    MYKONOS_ERR_FLOATFRMT_INV_ORXATT,
    MYKONOS_ERR_FLOATFRMT_INV_ORXEN,
    MYKONOS_ERR_FLOATFRMT_NULL_ORXATT,
    MYKONOS_ERR_FLOATFRMT_NULL_ORXENABLE,

    MYKONOS_ERR_SETUPTEMPSENSOR_NULL_PARAM,
    MYKONOS_ERR_SETUPTEMPSENSOR_INV_TEMPDECIMATION,
    MYKONOS_ERR_SETUPTEMPSENSOR_INV_OFFSET,
    MYKONOS_ERR_SETUPTEMPSENSOR_INV_TEMPWINDOW,
    MYKONOS_ERR_GETTEMPSENSORCFG_NULL_PARAM,
    MYKONOS_ERR_READTEMPSENSOR_NULL_PARAM,
    MYKONOS_ERR_READTEMPSENSOR_NOT_LOCKED,

    MYKONOS_ERR_GAIN_CONTROL_NOT_HYBRID,
    MYKONOS_ERR_GPIO_HYBRID_RX1_PIN,
    MYKONOS_ERR_GPIO_HYBRID_RX2_PIN,
    MYKONOS_ERR_GPIO_HYBRID_RX1_PIN_NULL_PARM,
    MYKONOS_ERR_GPIO_HYBRID_RX2_PIN_NULL_PARM,
    MYKONOS_ERR_GPIO_HYBRID_RX1_PIN_READ,
    MYKONOS_ERR_GPIO_HYBRID_RX2_PIN_READ,
    MYKONOS_ERR_AGC_OBS_NOT_IN_HYBRID,
    MYKONOS_ERR_GPIO_HYBRID_ORX_PIN,
    MYKONOS_ERR_GPIO_HYBRID_ORX_PIN_NULL_PARM,

    MYKONOS_ERR_GAIN_CONTROL_NOT_AGC,
    MYKONOS_ERR_GPIO_AGC_SYNC_RX1_PIN,
    MYKONOS_ERR_GPIO_AGC_SYNC_RX2_PIN,
    MYKONOS_ERR_GPIO_AGC_SYNC_RX1_PIN_NULL_PARM,
    MYKONOS_ERR_GPIO_AGC_SYNC_RX2_PIN_NULL_PARM,
    MYKONOS_ERR_OBS_GAIN_CONTROL_NOT_AGC,
    MYKONOS_ERR_GPIO_AGC_SYNC_ORX_PIN,
    MYKONOS_ERR_GPIO_AGC_SYNC_ORX_PIN_NULL_PARM,

    MYKONOS_ERR_GETGPIODRV_NULL_PARAM,
    MYKONOS_ERR_GPIO_DRV_INV_PARAM,

    MYKONOS_ERR_GPIO_SLEW_RATE_INV_PARAM,
    MYKONOS_ERR_GPIO_GETSLEW_NULL_PARAM,

    MYKONOS_ERR_CMOS_DRV_INV_PARAM,
    MYKONOS_ERR_CMOS_DRV_NULL_PARAM
} mykonosGpioErr_t;

/**
 *  \brief Enum of possible Rx Slicer pin combinations
 */
typedef enum
{
    GPIO_0_1_2      = 0,    /*!< GPIO combination for RX1        */
    GPIO_5_6_7      = 1,    /*!< GPIO combination for RX1 or RX2 */
    GPIO_8_9_10     = 2,    /*!< GPIO combination for RX1        */
    GPIO_11_12_13   = 3     /*!< GPIO combination for RX2        */
} mykonosRxSlicer_t;

/**
 *  \brief Enum of possible observation channel Slicer pin combinations
 */
typedef enum
{
    GPIO_18_17_16      = 0,    /*!< GPIO combination for observation channel */
    GPIO_16_15_14      = 1     /*!< GPIO combination for observation channel */
} mykonosObsRxSlicer_t;

/**
 *  \brief Enum of possible GPIO slew rate settings
 */
typedef enum
{
    MYK_SLEWRATE_NONE    = 0,    /*!< Lower slew rate for the GPIO  */
    MYK_SLEWRATE_LOW     = 1,    /*!< Low slew rate for the GPIO    */
    MYK_SLEWRATE_MEDIUM  = 2,    /*!< Medium slew rate for the GPIO */
    MYK_SLEWRATE_HIGH    = 3     /*!< High slew rate for the GPIO   */
} mykonosGpioSlewRate_t;

/**
 * \brief Enumerated list of CMOS pads drive strength options
 */
typedef enum
{
    MYK_CMOSPAD_DRV_1X  = 0x00,       /*!<  2.5pF  load @ 65MHz */
    MYK_CMOSPAD_DRV_2X  = 0x01,       /*!<    5pF  load @ 65MHz */
    MYK_CMOSPAD_DRV_3X  = 0x03,       /*!<  7.5pF  load @ 65MHz */
    MYK_CMOSPAD_DRV_4X  = 0x07,       /*!<   10pF  load @ 65MHz */
    MYK_CMOSPAD_DRV_5X  = 0x0F        /*!< 12.5pF  load @ 65MHz */
} mykonosCmosPadDrvStr_t;


/**
 * \brief Enumerated list for Aux ADCs
 */
typedef enum
{
    MYK_AUXADC_0        = 0x00,       /*!< Aux ADC channel 0 */
    MYK_AUXADC_1        = 0x01,       /*!< Aux ADC channel 1 */
    MYK_AUXADC_2        = 0x02,       /*!< Aux ADC channel 2 */
    MYK_AUXADC_3        = 0x03,       /*!< Aux ADC channel 3 */
    MYK_AUXADC_0_DIV2   = 0x04,       /*!< Aux ADC channel 0 with the divider by 2 set */
    MYK_TEMPSENSOR      = 0x10        /*!< Temperature sensor channel */
} mykonosAuxAdcChannels_t;


/**
 *  \brief Data structure to hold Gain compensation settings for the main receive channels
 **/
typedef struct
{
    uint8_t rx1Offset;  /*!< These parameter contains the Rx1 offset word used for the gain compensation
                        when the gain index is at its maximum setting.
                         It has a range of 0 to 0x1F with a resolution is 0.5dB per LSB. */
    uint8_t rx2Offset;  /*!< These parameter contains the Rx2 offset word used for the gain compensation
                        when the gain index is at its maximum setting.
                        It has a range of 0 to 0x1F with a resolution is 0.5dB per LSB. */
    uint8_t compStep;   /*!< These bits contains the value in dB that the total Rx gain changes
                         when there is an LSB change in the gain index according to the following settings:
                         compStep |  dB ramp
                         ---------|------------
                            0     |   0.25dB
                            1     |   0.5dB
                            2     |   1.0dB
                            3     |   2.0dB
                            4     |   3.0dB
                            5     |   4.0dB
                            6     |   6.0dB
                            7     |   Not valid defaulted to 0.25dB */
} mykonosGainComp_t;

/**
 *  \brief Data structure to hold Gain compensation settings for the observation channel
 **/
typedef struct
{
    uint8_t obsRxOffset;    /*!< These parameter contains the Rx1 offset word used for the gain compensation
                            when the gain index is at its maximum setting.
                            It has a range of 0 to 0x1F with a resolution is 0.5dB per LSB. */
    uint8_t compStep;       /*!< These bits contains the value in dB that the total Rx gain changes
                            when there is an LSB change in the gain index according to the following settings:
                            compStep |  dB ramp
                            ---------|------------
                               0     |   0.25dB
                               1     |   0.5dB
                               2     |   1.0dB
                               3     |   2.0dB
                               4     |   3.0dB
                               5     |   4.0dB
                               6     |   6.0dB
                               7     |   Not valid defaulted to 0.25dB */
} mykonosObsRxGainComp_t;

/**
 * \brief Data structure to hold floating point formatter settings for the floating point
 *  number generation
 **/
typedef struct
{
   uint8_t roundMode;   /*!<These parameter set the round modes for the significand.
                        The following settings are defined in the IEEE754 specification:
                        roundMode |  Round type
                        ----------|-----------------
                             0    |  RoundTiesToEven
                             1    |  RoundTowardsPositive
                             2    |  RoundTowardsNegative
                             3    |  RoundTowardsZero
                             4    |  RoundTiesToAway*/
   uint8_t dataFormat;  /*!< These parameter sets the format of the 16-bit output on the JESD interface:
                        Setting this to 1 then the format is from MSB to LSB to {sign, significand, exponent}.
                        Clearing this bit sets the format to {sign, exponent, significand}.*/
   uint8_t encNan;      /*!< if this parameter is set to 1 then the floating point formatter reserves the highest value
                        of exponent for NaN to be compatible to the IEEE754 specification.
                        Clearing this parameter increases the range of the exponent by one.*/
   uint8_t expBits;     /*!<These parameter is used to indicate the number of exponent bits in the floating point number
                        according to the following settings:
                          expBits|  Round type
                         --------|------------------------------------------------
                            0    |  2 bit exponent, 13 bit significand, 1 bit sign
                            1    |  3 bit exponent, 12 bit significand, 1 bit sign
                            2    |  4 bit exponent, 11 bit significand, 1 bit sign
                            3    |  5 bit exponent, 10 bit significand, 1 bit sign */
   uint8_t leading;     /*!< Setting this parameter hides the leading one in the the significand to be compatible to the IEEE754 specification.
                        Clearing this parameter causes the leading one to be at the MSB of the significand.*/
}mykonosFloatPntFrmt_t;

/**
 *  \brief Data structure used to configure the on-die Temperature Sensor
 */
typedef struct
{
    uint8_t tempDecimation;      /*!<3-bit value that controls the AuxADC decimation factor when used for temp sensor calculations;
                                 AuxADC_decimation = 256 * 2^tempDecimation */
    uint8_t offset;              /*!< 8-bit offset that gets added to temp sensor code internally */
    uint8_t overrideFusedOffset; /*!< This bit overrides the factory-calibrated fuse offset
                                 and uses the value stored in the offset member */
    uint8_t tempWindow;          /*!<  4-bit code with a resolution of 1?C/LSB, each time a temperature measurement is performed,
                                 the device compares the current temperature against the previous value.*/
}mykonosTempSensorConfig_t;


/**
 *  \brief Data structure used to store Temperature Sensor related values
 */
typedef struct
{
    int16_t tempCode;       /*!< 16-bit signed temperature value (in deg C) that is read back */
    uint8_t windowExceeded; /*!< If the absolute value of the difference is greater than the value in temperature configuration
                            tempWindow, the windowExceeded flag is set.*/
    uint8_t windowHiLo;     /*!<when windowExceeded member gets set,
                            this bit is set to 1 if current value is greater than previous value, else reset */
    uint8_t tempValid;      /*!< When the reading is complete and a valid temperature value stored in tempCode*/
}mykonosTempSensorStatus_t;


#ifdef __cplusplus
}
#endif

#endif /* T_MYKONOSGPIO_H_ */