use VL6180XA1 chip wothout X-NUCLEO-6180XA1 Board. Simple way to use the chip.

Dependents:   Check_VL6180XA1_ToF

Fork of X_NUCLEO_6180XA1 by ST

Committer:
kenjiArai
Date:
Thu Feb 01 12:05:43 2018 +0000
Revision:
60:972b4898a007
Parent:
59:81afbb75311d
more simple / delete DevI2C and others

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gallonm 1:1de1ea2994d9 1 /*******************************************************************************
gallonm 1:1de1ea2994d9 2 Copyright © 2014, STMicroelectronics International N.V.
gallonm 1:1de1ea2994d9 3 All rights reserved.
gallonm 1:1de1ea2994d9 4
gallonm 1:1de1ea2994d9 5 Redistribution and use in source and binary forms, with or without
gallonm 1:1de1ea2994d9 6 modification, are permitted provided that the following conditions are met:
gallonm 1:1de1ea2994d9 7 * Redistributions of source code must retain the above copyright
gallonm 1:1de1ea2994d9 8 notice, this list of conditions and the following disclaimer.
gallonm 1:1de1ea2994d9 9 * Redistributions in binary form must reproduce the above copyright
gallonm 1:1de1ea2994d9 10 notice, this list of conditions and the following disclaimer in the
gallonm 1:1de1ea2994d9 11 documentation and/or other materials provided with the distribution.
gallonm 1:1de1ea2994d9 12 * Neither the name of STMicroelectronics nor the
gallonm 1:1de1ea2994d9 13 names of its contributors may be used to endorse or promote products
gallonm 1:1de1ea2994d9 14 derived from this software without specific prior written permission.
gallonm 1:1de1ea2994d9 15
gallonm 1:1de1ea2994d9 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
gallonm 1:1de1ea2994d9 17 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
gallonm 1:1de1ea2994d9 18 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
kenjiArai 60:972b4898a007 19 NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
gallonm 1:1de1ea2994d9 20 IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
gallonm 1:1de1ea2994d9 21 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
gallonm 1:1de1ea2994d9 22 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
gallonm 1:1de1ea2994d9 23 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
gallonm 1:1de1ea2994d9 24 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
gallonm 1:1de1ea2994d9 25 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
gallonm 1:1de1ea2994d9 26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
gallonm 1:1de1ea2994d9 27 ********************************************************************************/
gallonm 1:1de1ea2994d9 28
kenjiArai 60:972b4898a007 29 //------- Feburary 1st, 2018 by JH1PJL / K.Arai --------------------------------
kenjiArai 60:972b4898a007 30 // Change X_NUCLEO_6180XA1 library to 6180XA1_simplest library
kenjiArai 60:972b4898a007 31 // modified -> all related files
kenjiArai 60:972b4898a007 32 //------------------------------------------------------------------------------
kenjiArai 60:972b4898a007 33
gallonm 1:1de1ea2994d9 34 /*
gallonm 1:1de1ea2994d9 35 * $Date: 2015-05-13 14:12:05 +0200 (Wed, 13 May 2015) $
gallonm 1:1de1ea2994d9 36 * $Revision: 2290 $
gallonm 1:1de1ea2994d9 37 */
gallonm 1:1de1ea2994d9 38
gallonm 1:1de1ea2994d9 39 /**
Davidroid 57:fa4c622b04a7 40 * @file VL6180X_def.h
gallonm 1:1de1ea2994d9 41 *
gallonm 1:1de1ea2994d9 42 * @brief Type definitions for vl6180x api.
gallonm 1:1de1ea2994d9 43 *
gallonm 1:1de1ea2994d9 44 */
gallonm 1:1de1ea2994d9 45
gallonm 1:1de1ea2994d9 46
Davidroid 57:fa4c622b04a7 47 #ifndef _VL6180X_DEF
Davidroid 57:fa4c622b04a7 48 #define _VL6180X_DEF
gallonm 1:1de1ea2994d9 49
gallonm 1:1de1ea2994d9 50 /** API major version */
Davidroid 57:fa4c622b04a7 51 #define VL6180X_API_REV_MAJOR 3
gallonm 1:1de1ea2994d9 52 /** API minor version */
Davidroid 57:fa4c622b04a7 53 #define VL6180X_API_REV_MINOR 0
gallonm 1:1de1ea2994d9 54 /** API sub version */
Davidroid 57:fa4c622b04a7 55 #define VL6180X_API_REV_SUB 1
gallonm 1:1de1ea2994d9 56
gallonm 1:1de1ea2994d9 57 #define VL6180X_STR_HELPER(x) #x
gallonm 1:1de1ea2994d9 58 #define VL6180X_STR(x) VL6180X_STR_HELPER(x)
gallonm 1:1de1ea2994d9 59
gallonm 1:1de1ea2994d9 60 #include "vl6180x_cfg.h"
gallonm 1:1de1ea2994d9 61
gallonm 1:1de1ea2994d9 62 /*
gallonm 1:1de1ea2994d9 63 * check configuration macro raise error or warning and suggest a default value
gallonm 1:1de1ea2994d9 64 */
gallonm 1:1de1ea2994d9 65
Davidroid 57:fa4c622b04a7 66 #ifndef VL6180X_UPSCALE_SUPPORT
Davidroid 57:fa4c622b04a7 67 #error "VL6180X_UPSCALE_SUPPORT not defined"
gallonm 1:1de1ea2994d9 68 /* TODO you must define value for upscale support in your vl6180x_cfg.h */
gallonm 1:1de1ea2994d9 69 #endif
gallonm 1:1de1ea2994d9 70
Davidroid 57:fa4c622b04a7 71 #ifndef VL6180X_ALS_SUPPORT
Davidroid 57:fa4c622b04a7 72 #error "VL6180X_ALS_SUPPORT not defined"
Davidroid 57:fa4c622b04a7 73 /* TODO you must define VL6180X_ALS_SUPPORT with a value in your vl6180x_cfg.h set to 0 do disable*/
gallonm 1:1de1ea2994d9 74 #endif
gallonm 1:1de1ea2994d9 75
Davidroid 57:fa4c622b04a7 76 #ifndef VL6180X_HAVE_DMAX_RANGING
Davidroid 57:fa4c622b04a7 77 #error "VL6180X_HAVE_DMAX_RANGING not defined"
gallonm 1:1de1ea2994d9 78 /* TODO you may remove or comment these #error and keep the default below or update your vl6180x_cfg.h .h file */
gallonm 1:1de1ea2994d9 79 /**
Davidroid 57:fa4c622b04a7 80 * force VL6180X_HAVE_DMAX_RANGING to not supported when not part of cfg file
gallonm 1:1de1ea2994d9 81 */
Davidroid 57:fa4c622b04a7 82 #define VL6180X_HAVE_DMAX_RANGING 0
gallonm 1:1de1ea2994d9 83 #endif
gallonm 1:1de1ea2994d9 84
Davidroid 57:fa4c622b04a7 85 #ifndef VL6180X_EXTENDED_RANGE
Davidroid 57:fa4c622b04a7 86 #define VL6180X_EXTENDED_RANGE 0
gallonm 1:1de1ea2994d9 87 #endif
gallonm 1:1de1ea2994d9 88
gallonm 1:1de1ea2994d9 89
gallonm 1:1de1ea2994d9 90 /****************************************
gallonm 1:1de1ea2994d9 91 * PRIVATE define do not edit
gallonm 1:1de1ea2994d9 92 ****************************************/
gallonm 1:1de1ea2994d9 93
gallonm 1:1de1ea2994d9 94 /** Maximal buffer size ever use in i2c */
Davidroid 57:fa4c622b04a7 95 #define VL6180X_MAX_I2C_XFER_SIZE 8 /* At present time it 6 byte max but that can change */
gallonm 1:1de1ea2994d9 96
Davidroid 57:fa4c622b04a7 97 #if VL6180X_UPSCALE_SUPPORT < 0
gallonm 1:1de1ea2994d9 98 /**
Davidroid 57:fa4c622b04a7 99 * @def VL6180X_HAVE_UPSCALE_DATA
gallonm 1:1de1ea2994d9 100 * @brief is defined if device data structure has data so when user configurable up-scale is active
gallonm 1:1de1ea2994d9 101 */
Davidroid 57:fa4c622b04a7 102 #define VL6180X_HAVE_UPSCALE_DATA /* have data only for user configurable up-scale config */
gallonm 1:1de1ea2994d9 103 #endif
gallonm 1:1de1ea2994d9 104
Davidroid 57:fa4c622b04a7 105 #if VL6180X_ALS_SUPPORT != 0
gallonm 1:1de1ea2994d9 106 /**
Davidroid 57:fa4c622b04a7 107 * @def VL6180X_HAVE_ALS_DATA
gallonm 1:1de1ea2994d9 108 * @brief is defined when als data are include in device data structure so when als suport if configured
gallonm 1:1de1ea2994d9 109 */
Davidroid 57:fa4c622b04a7 110 #define VL6180X_HAVE_ALS_DATA
gallonm 1:1de1ea2994d9 111 #endif
gallonm 1:1de1ea2994d9 112
gallonm 1:1de1ea2994d9 113
gallonm 1:1de1ea2994d9 114 /** Error and warning code returned by API
gallonm 1:1de1ea2994d9 115 *
gallonm 1:1de1ea2994d9 116 * negative value are true error mostly fatal\n
gallonm 1:1de1ea2994d9 117 * positive value are warning most of time it's ok to continue\n
gallonm 1:1de1ea2994d9 118 */
kenjiArai 60:972b4898a007 119 enum VL6180X_ErrCode_t {
kenjiArai 60:972b4898a007 120 API_NO_ERROR = 0,
Davidroid 57:fa4c622b04a7 121 CALIBRATION_WARNING = 1, /*!< warning invalid calibration data may be in used \a VL6180X_InitData() \a VL6180X_GetOffsetCalibrationData \a VL6180X_SetOffsetCalibrationData*/
gallonm 1:1de1ea2994d9 122 MIN_CLIPED = 2, /*!< warning parameter passed was clipped to min before to be applied */
gallonm 1:1de1ea2994d9 123 NOT_GUARANTEED = 3, /*!< Correct operation is not guaranteed typically using extended ranging on vl6180x */
gallonm 1:1de1ea2994d9 124 NOT_READY = 4, /*!< the data is not ready retry */
gallonm 1:1de1ea2994d9 125
gallonm 1:1de1ea2994d9 126 API_ERROR = -1, /*!< Unqualified error */
gallonm 1:1de1ea2994d9 127 INVALID_PARAMS = -2, /*!< parameter passed is invalid or out of range */
gallonm 1:1de1ea2994d9 128 NOT_SUPPORTED = -3, /*!< function is not supported in current mode or configuration */
gallonm 1:1de1ea2994d9 129 RANGE_ERROR = -4, /*!< device report a ranging error interrupt status */
gallonm 1:1de1ea2994d9 130 TIME_OUT = -5, /*!< aborted due to time out */
gallonm 1:1de1ea2994d9 131 };
gallonm 1:1de1ea2994d9 132
gallonm 1:1de1ea2994d9 133 /**
gallonm 1:1de1ea2994d9 134 * Filtered result data structure range data is to be used
gallonm 1:1de1ea2994d9 135 */
gallonm 1:1de1ea2994d9 136 typedef struct RangeFilterResult_tag {
gallonm 1:1de1ea2994d9 137 uint16_t range_mm; /*!< Filtered ranging value */
gallonm 1:1de1ea2994d9 138 uint16_t rawRange_mm; /*!< raw range value (scaled) */
gallonm 1:1de1ea2994d9 139 } RangeFilterResult_t;
gallonm 1:1de1ea2994d9 140
gallonm 1:1de1ea2994d9 141 /**
gallonm 1:1de1ea2994d9 142 * "small" unsigned data type used in filter
gallonm 1:1de1ea2994d9 143 *
gallonm 1:1de1ea2994d9 144 * if data space saving is not a concern it can be change to platform native unsigned int
gallonm 1:1de1ea2994d9 145 */
gallonm 1:1de1ea2994d9 146 typedef uint8_t FilterType1_t;
gallonm 1:1de1ea2994d9 147
gallonm 1:1de1ea2994d9 148 /**
gallonm 1:1de1ea2994d9 149 * @def FILTER_NBOF_SAMPLES
gallonm 1:1de1ea2994d9 150 * @brief sample history len used for wrap around filtering
gallonm 1:1de1ea2994d9 151 */
gallonm 1:1de1ea2994d9 152 #define FILTER_NBOF_SAMPLES 10
gallonm 1:1de1ea2994d9 153 /**
gallonm 1:1de1ea2994d9 154 * Wrap around filter internal data
gallonm 1:1de1ea2994d9 155 */
gallonm 1:1de1ea2994d9 156 struct FilterData_t {
gallonm 1:1de1ea2994d9 157 uint32_t MeasurementIndex; /*!< current measurement index */
gallonm 1:1de1ea2994d9 158 uint16_t LastTrueRange[FILTER_NBOF_SAMPLES]; /*!< filtered/corrected distance history */
gallonm 1:1de1ea2994d9 159 uint32_t LastReturnRates[FILTER_NBOF_SAMPLES]; /*!< Return rate history */
gallonm 1:1de1ea2994d9 160 uint16_t StdFilteredReads; /*!< internal use */
gallonm 1:1de1ea2994d9 161 FilterType1_t Default_ZeroVal; /*!< internal use */
gallonm 1:1de1ea2994d9 162 FilterType1_t Default_VAVGVal; /*!< internal use */
gallonm 1:1de1ea2994d9 163 FilterType1_t NoDelay_ZeroVal; /*!< internal use */
gallonm 1:1de1ea2994d9 164 FilterType1_t NoDelay_VAVGVal; /*!< internal use */
gallonm 1:1de1ea2994d9 165 FilterType1_t Previous_VAVGDiff; /*!< internal use */
gallonm 1:1de1ea2994d9 166 };
gallonm 1:1de1ea2994d9 167
gallonm 1:1de1ea2994d9 168
gallonm 1:1de1ea2994d9 169 /**
Davidroid 57:fa4c622b04a7 170 * @struct VL6180XDevData_t
gallonm 1:1de1ea2994d9 171 *
Davidroid 57:fa4c622b04a7 172 * @brief Per VL6180X device St private data structure \n
gallonm 1:1de1ea2994d9 173 * End user should never access any of these field directly
gallonm 1:1de1ea2994d9 174 *
Davidroid 57:fa4c622b04a7 175 * These must never access directly but only via VL6180XDev/SetData(dev, field) macro
gallonm 1:1de1ea2994d9 176 */
Davidroid 57:fa4c622b04a7 177 struct VL6180XDevData_t {
gallonm 1:1de1ea2994d9 178
gallonm 1:1de1ea2994d9 179 uint32_t Part2PartAmbNVM; /*!< backed up NVM value */
gallonm 1:1de1ea2994d9 180 uint32_t XTalkCompRate_KCps; /*! Cached XTlak Compensation Rate */
gallonm 1:1de1ea2994d9 181
gallonm 1:1de1ea2994d9 182 uint16_t EceFactorM; /*!< Ece Factor M numerator */
gallonm 1:1de1ea2994d9 183 uint16_t EceFactorD; /*!< Ece Factor D denominator*/
gallonm 1:1de1ea2994d9 184
Davidroid 57:fa4c622b04a7 185 #ifdef VL6180X_HAVE_ALS_DATA
gallonm 1:1de1ea2994d9 186 uint16_t IntegrationPeriod; /*!< cached als Integration period avoid slow read from device at each measure */
gallonm 1:1de1ea2994d9 187 uint16_t AlsGainCode; /*!< cached Als gain avoid slow read from device at each measure */
gallonm 1:1de1ea2994d9 188 uint16_t AlsScaler; /*!< cached Als scaler avoid slow read from device at each measure */
gallonm 1:1de1ea2994d9 189 #endif
gallonm 1:1de1ea2994d9 190
Davidroid 57:fa4c622b04a7 191 #ifdef VL6180X_HAVE_UPSCALE_DATA
gallonm 1:1de1ea2994d9 192 uint8_t UpscaleFactor; /*!< up-scaling factor*/
gallonm 1:1de1ea2994d9 193 #endif
gallonm 1:1de1ea2994d9 194
Davidroid 57:fa4c622b04a7 195 #ifdef VL6180X_HAVE_WRAP_AROUND_DATA
gallonm 1:1de1ea2994d9 196 uint8_t WrapAroundFilterActive; /*!< Filter on/off */
gallonm 1:1de1ea2994d9 197 struct FilterData_t FilterData; /*!< Filter internal data state history ... */
gallonm 1:1de1ea2994d9 198 #endif
gallonm 1:1de1ea2994d9 199
gallonm 1:1de1ea2994d9 200 int8_t Part2PartOffsetNVM; /*!< backed up NVM value */
gallonm 1:1de1ea2994d9 201 };
gallonm 1:1de1ea2994d9 202
gallonm 1:1de1ea2994d9 203
gallonm 1:1de1ea2994d9 204 /**
Davidroid 57:fa4c622b04a7 205 * @struct VL6180X_RangeData_t
gallonm 1:1de1ea2994d9 206 * @brief Range and any optional measurement data.
gallonm 1:1de1ea2994d9 207 */
gallonm 1:1de1ea2994d9 208 typedef struct {
mapellil 54:17f3bb228b13 209 uint32_t range_mm; /*!< range distance in mm. */
gallonm 1:1de1ea2994d9 210 int32_t signalRate_mcps; /*!< signal rate (MCPS)\n these is a 9.7 fix point value, which is effectively a measure of target reflectance.*/
gallonm 1:1de1ea2994d9 211 uint32_t errorStatus; /*!< Error status of the current measurement. \n
Davidroid 57:fa4c622b04a7 212 see @a ::RangeError_u @a VL6180X_GetRangeStatusErrString() */
gallonm 1:1de1ea2994d9 213
gallonm 1:1de1ea2994d9 214
Davidroid 57:fa4c622b04a7 215 #ifdef VL6180X_HAVE_RATE_DATA
gallonm 1:1de1ea2994d9 216 uint32_t rtnAmbRate; /*!< Return Ambient rate in KCount per sec related to \a RESULT_RANGE_RETURN_AMB_COUNT */
gallonm 1:1de1ea2994d9 217 uint32_t rtnRate; /*!< Return rate in KCount per sec related to \a RESULT_RANGE_RETURN_SIGNAL_COUNT */
gallonm 1:1de1ea2994d9 218 uint32_t rtnConvTime; /*!< Return Convergence time \a RESULT_RANGE_RETURN_CONV_TIME */
gallonm 1:1de1ea2994d9 219 uint32_t refConvTime; /*!< Reference convergence time \a RESULT_RANGE_REFERENCE_CONV_TIME */
gallonm 1:1de1ea2994d9 220 #endif
gallonm 1:1de1ea2994d9 221
Davidroid 57:fa4c622b04a7 222 #ifdef VL6180X_HAVE_WRAP_AROUND_DATA
gallonm 1:1de1ea2994d9 223 RangeFilterResult_t FilteredData; /*!< Filter result main range_mm is updated */
gallonm 1:1de1ea2994d9 224 #endif
kenjiArai 60:972b4898a007 225 } VL6180X_RangeData_t;
gallonm 1:1de1ea2994d9 226
gallonm 1:1de1ea2994d9 227
gallonm 1:1de1ea2994d9 228 /** use where fix point 9.7 bit values are expected
gallonm 1:1de1ea2994d9 229 *
gallonm 1:1de1ea2994d9 230 * given a floating point value f it's .7 bit point is (int)(f*(1<<7))*/
gallonm 1:1de1ea2994d9 231 typedef uint16_t FixPoint97_t;
gallonm 1:1de1ea2994d9 232
gallonm 1:1de1ea2994d9 233 /** lux data type */
gallonm 1:1de1ea2994d9 234 typedef uint32_t lux_t;
gallonm 1:1de1ea2994d9 235
gallonm 1:1de1ea2994d9 236 /**
gallonm 1:1de1ea2994d9 237 * @brief This data type defines als measurement data.
gallonm 1:1de1ea2994d9 238 */
kenjiArai 60:972b4898a007 239 typedef struct VL6180X_AlsData_st {
gallonm 1:1de1ea2994d9 240 lux_t lux; /**< Light measurement (Lux) */
gallonm 1:1de1ea2994d9 241 uint32_t errorStatus; /**< Error status of the current measurement. \n
gallonm 1:1de1ea2994d9 242 * No Error := 0. \n
gallonm 1:1de1ea2994d9 243 * Refer to product sheets for other error codes. */
kenjiArai 60:972b4898a007 244 } VL6180X_AlsData_t;
gallonm 1:1de1ea2994d9 245
gallonm 1:1de1ea2994d9 246 /**
gallonm 1:1de1ea2994d9 247 * @brief Range status Error code
gallonm 1:1de1ea2994d9 248 *
Davidroid 57:fa4c622b04a7 249 * @a VL6180X_GetRangeStatusErrString() if configured ( @a #VL6180X_RANGE_STATUS_ERRSTRING )
gallonm 1:1de1ea2994d9 250 * related to register @a #RESULT_RANGE_STATUS and additional post processing
gallonm 1:1de1ea2994d9 251 */
gallonm 1:1de1ea2994d9 252 typedef enum {
gallonm 1:1de1ea2994d9 253 NoError_=0, /*!< 0 0b0000 NoError */
gallonm 1:1de1ea2994d9 254 VCSEL_Continuity_Test, /*!< 1 0b0001 VCSEL_Continuity_Test */
gallonm 1:1de1ea2994d9 255 VCSEL_Watchdog_Test, /*!< 2 0b0010 VCSEL_Watchdog_Test */
gallonm 1:1de1ea2994d9 256 VCSEL_Watchdog, /*!< 3 0b0011 VCSEL_Watchdog */
gallonm 1:1de1ea2994d9 257 PLL1_Lock, /*!< 4 0b0100 PLL1_Lock */
gallonm 1:1de1ea2994d9 258 PLL2_Lock, /*!< 5 0b0101 PLL2_Lock */
gallonm 1:1de1ea2994d9 259 Early_Convergence_Estimate,/*!< 6 0b0110 Early_Convergence_Estimate */
gallonm 1:1de1ea2994d9 260 Max_Convergence, /*!< 7 0b0111 Max_Convergence */
gallonm 1:1de1ea2994d9 261 No_Target_Ignore, /*!< 8 0b1000 No_Target_Ignore */
gallonm 1:1de1ea2994d9 262 Not_used_9, /*!< 9 0b1001 Not_used */
gallonm 1:1de1ea2994d9 263 Not_used_10, /*!< 10 0b1010 Not_used_ */
gallonm 1:1de1ea2994d9 264 Max_Signal_To_Noise_Ratio, /*!< 11 0b1011 Max_Signal_To_Noise_Ratio*/
gallonm 1:1de1ea2994d9 265 Raw_Ranging_Algo_Underflow,/*!< 12 0b1100 Raw_Ranging_Algo_Underflow*/
gallonm 1:1de1ea2994d9 266 Raw_Ranging_Algo_Overflow, /*!< 13 0b1101 Raw_Ranging_Algo_Overflow */
gallonm 1:1de1ea2994d9 267 Ranging_Algo_Underflow, /*!< 14 0b1110 Ranging_Algo_Underflow */
gallonm 1:1de1ea2994d9 268 Ranging_Algo_Overflow, /*!< 15 0b1111 Ranging_Algo_Overflow */
gallonm 1:1de1ea2994d9 269
gallonm 1:1de1ea2994d9 270 /* code below are addition for API/software side they are not hardware*/
gallonm 1:1de1ea2994d9 271 RangingFiltered =0x10, /*!< 16 0b10000 filtered by post processing*/
gallonm 1:1de1ea2994d9 272
gallonm 1:1de1ea2994d9 273 } RangeError_u;
gallonm 1:1de1ea2994d9 274
gallonm 1:1de1ea2994d9 275
gallonm 1:1de1ea2994d9 276 /** @defgroup device_regdef Device registers & masks definitions
gallonm 1:1de1ea2994d9 277 * @brief Device registers and masks definitions
gallonm 1:1de1ea2994d9 278 */
gallonm 1:1de1ea2994d9 279
kenjiArai 60:972b4898a007 280
gallonm 1:1de1ea2994d9 281 /** @ingroup device_regdef
gallonm 1:1de1ea2994d9 282 * @{*/
gallonm 1:1de1ea2994d9 283
gallonm 1:1de1ea2994d9 284 /**
gallonm 1:1de1ea2994d9 285 * The device model ID
gallonm 1:1de1ea2994d9 286 */
gallonm 10:4954b09b72d8 287 #define IDENTIFICATION_MODEL_ID 0x000
gallonm 1:1de1ea2994d9 288 /**
gallonm 1:1de1ea2994d9 289 * Revision identifier of the Device for major change.
gallonm 1:1de1ea2994d9 290 */
gallonm 10:4954b09b72d8 291 #define IDENTIFICATION_MODULE_REV_MAJOR 0x003
gallonm 1:1de1ea2994d9 292 /**
gallonm 1:1de1ea2994d9 293 * Revision identifier of the Device for minor change.
gallonm 1:1de1ea2994d9 294 */
gallonm 10:4954b09b72d8 295 #define IDENTIFICATION_MODULE_REV_MINOR 0x004
gallonm 1:1de1ea2994d9 296
gallonm 1:1de1ea2994d9 297
gallonm 1:1de1ea2994d9 298 /**
gallonm 1:1de1ea2994d9 299 * @def SYSTEM_MODE_GPIO0
gallonm 1:1de1ea2994d9 300 * @brief Configures polarity and select which function gpio 0 serves.
gallonm 1:1de1ea2994d9 301 * Gpio0 is chip enable at power up ! Be aware of all h/w implication of turning it to output.
gallonm 1:1de1ea2994d9 302 * Same definition as #SYSTEM_MODE_GPIO1
gallonm 1:1de1ea2994d9 303 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 304 */
gallonm 10:4954b09b72d8 305 #define SYSTEM_MODE_GPIO0 0x010
gallonm 1:1de1ea2994d9 306 /**
gallonm 1:1de1ea2994d9 307 * @def SYSTEM_MODE_GPIO1
gallonm 1:1de1ea2994d9 308 * @brief Configures polarity and select what als or ranging functionality gpio pin serves.
gallonm 1:1de1ea2994d9 309 *
gallonm 1:1de1ea2994d9 310 * Function can be #GPIOx_SELECT_OFF #GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT.\n
gallonm 1:1de1ea2994d9 311 * Same definition apply to register GPIO0 that is used as chip enable at power up.
gallonm 1:1de1ea2994d9 312 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 313 */
gallonm 10:4954b09b72d8 314 #define SYSTEM_MODE_GPIO1 0x011
kenjiArai 60:972b4898a007 315 /** gpio pad POLARITY mask in #SYSTEM_MODE_GPIO1 (and/or 0) write 1 to set active high polarity (positive edge) */
kenjiArai 60:972b4898a007 316 #define GPIOx_POLARITY_SELECT_MASK 0x20
kenjiArai 60:972b4898a007 317 /** gpio pad Function select shift in #SYSTEM_MODE_GPIO1 or 0 */
kenjiArai 60:972b4898a007 318 #define GPIOx_FUNCTIONALITY_SELECT_SHIFT 1
kenjiArai 60:972b4898a007 319 /** gpio pad Function select mask in #SYSTEM_MODE_GPIO1 or 0 */
kenjiArai 60:972b4898a007 320 #define GPIOx_FUNCTIONALITY_SELECT_MASK (0xF<<GPIOx_FUNCTIONALITY_SELECT_SHIFT)
kenjiArai 60:972b4898a007 321 /** select no interrupt in #SYSTEM_MODE_GPIO1 pad is put in Hi-Z*/
kenjiArai 60:972b4898a007 322 #define GPIOx_SELECT_OFF 0x00
kenjiArai 60:972b4898a007 323 /** select gpiox as interrupt output in #SYSTEM_MODE_GPIO1 */
kenjiArai 60:972b4898a007 324 #define GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT 0x08
kenjiArai 60:972b4898a007 325 /** select range as source for interrupt on in #SYSTEM_MODE_GPIO1 */
kenjiArai 60:972b4898a007 326 #define GPIOx_MODE_SELECT_RANGING 0x00
kenjiArai 60:972b4898a007 327 /** select als as source for interrupt on in #SYSTEM_MODE_GPIO1 */
kenjiArai 60:972b4898a007 328 #define GPIOx_MODE_SELECT_ALS 0x01
gallonm 1:1de1ea2994d9 329
gallonm 1:1de1ea2994d9 330
gallonm 1:1de1ea2994d9 331 /**
gallonm 1:1de1ea2994d9 332 * @def SYSTEM_INTERRUPT_CONFIG_GPIO
gallonm 1:1de1ea2994d9 333 *
gallonm 1:1de1ea2994d9 334 * @brief Configure Als and Ranging interrupt reporting
gallonm 1:1de1ea2994d9 335 *
gallonm 1:1de1ea2994d9 336 * Possible values for Range and ALS are\n
gallonm 1:1de1ea2994d9 337 *
gallonm 1:1de1ea2994d9 338 * #CONFIG_GPIO_INTERRUPT_DISABLED\n
gallonm 1:1de1ea2994d9 339 * #CONFIG_GPIO_INTERRUPT_LEVEL_LOW\n
gallonm 1:1de1ea2994d9 340 * #CONFIG_GPIO_INTERRUPT_LEVEL_HIGH\n
gallonm 1:1de1ea2994d9 341 * #CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW\n
gallonm 1:1de1ea2994d9 342 * #CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY\n
gallonm 1:1de1ea2994d9 343 * Apply respective rang/als shift and mask \n
gallonm 1:1de1ea2994d9 344 * #CONFIG_GPIO_RANGE_SHIFT and full reg mask #CONFIG_GPIO_RANGE_MASK\n
gallonm 1:1de1ea2994d9 345 * #CONFIG_GPIO_ALS_SHIFT and full reg mask #CONFIG_GPIO_ALS_MASK\n
gallonm 1:1de1ea2994d9 346 *
gallonm 1:1de1ea2994d9 347 * \sa GPIO use for interrupt #SYSTEM_MODE_GPIO0 or #SYSTEM_MODE_GPIO1\n
gallonm 1:1de1ea2994d9 348 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 349 */
gallonm 10:4954b09b72d8 350 #define SYSTEM_INTERRUPT_CONFIG_GPIO 0x014
kenjiArai 60:972b4898a007 351 /** RANGE bits shift in #SYSTEM_INTERRUPT_CONFIG_GPIO */
kenjiArai 60:972b4898a007 352 #define CONFIG_GPIO_RANGE_SHIFT 0
kenjiArai 60:972b4898a007 353 /** RANGE bits mask in #SYSTEM_INTERRUPT_CONFIG_GPIO (unshifted)*/
kenjiArai 60:972b4898a007 354 #define CONFIG_GPIO_RANGE_MASK (0x7<<CONFIG_GPIO_RANGE_SHIFT)
kenjiArai 60:972b4898a007 355 /** ALS bits shift in #SYSTEM_INTERRUPT_CONFIG_GPIO */
kenjiArai 60:972b4898a007 356 #define CONFIG_GPIO_ALS_SHIFT 3
kenjiArai 60:972b4898a007 357 /** ALS bits mask in #SYSTEM_INTERRUPT_CONFIG_GPIO (unshifted)*/
kenjiArai 60:972b4898a007 358 #define CONFIG_GPIO_ALS_MASK (0x7<<CONFIG_GPIO_ALS_SHIFT)
kenjiArai 60:972b4898a007 359 /** interrupt is disabled */
kenjiArai 60:972b4898a007 360 #define CONFIG_GPIO_INTERRUPT_DISABLED 0x00
kenjiArai 60:972b4898a007 361 /** trigger when value < low threshold */
kenjiArai 60:972b4898a007 362 #define CONFIG_GPIO_INTERRUPT_LEVEL_LOW 0x01
kenjiArai 60:972b4898a007 363 /** trigger when value < low threshold */
kenjiArai 60:972b4898a007 364 #define CONFIG_GPIO_INTERRUPT_LEVEL_HIGH 0x02
kenjiArai 60:972b4898a007 365 /** trigger when outside range defined by high low threshold */
kenjiArai 60:972b4898a007 366 #define CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW 0x03
kenjiArai 60:972b4898a007 367 /** trigger when new sample are ready */
kenjiArai 60:972b4898a007 368 #define CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY 0x04
gallonm 1:1de1ea2994d9 369
gallonm 1:1de1ea2994d9 370 /**
gallonm 1:1de1ea2994d9 371 * @def SYSTEM_INTERRUPT_CLEAR
gallonm 1:1de1ea2994d9 372 * @brief Writing to this register will clear interrupt source
gallonm 1:1de1ea2994d9 373 *
gallonm 1:1de1ea2994d9 374 * Use or combination of any #INTERRUPT_CLEAR_RANGING , #INTERRUPT_CLEAR_ALS , #INTERRUPT_CLEAR_ERROR
gallonm 1:1de1ea2994d9 375 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 376 */
gallonm 10:4954b09b72d8 377 #define SYSTEM_INTERRUPT_CLEAR 0x015
kenjiArai 60:972b4898a007 378 /** clear ranging interrupt in write to #SYSTEM_INTERRUPT_CLEAR */
kenjiArai 60:972b4898a007 379 #define INTERRUPT_CLEAR_RANGING 0x01
kenjiArai 60:972b4898a007 380 /** clear als interrupt in write to #SYSTEM_INTERRUPT_CLEAR */
kenjiArai 60:972b4898a007 381 #define INTERRUPT_CLEAR_ALS 0x02
kenjiArai 60:972b4898a007 382 /** clear error interrupt in write to #SYSTEM_INTERRUPT_CLEAR */
kenjiArai 60:972b4898a007 383 #define INTERRUPT_CLEAR_ERROR 0x04
gallonm 1:1de1ea2994d9 384
gallonm 1:1de1ea2994d9 385 /** After power up or reset this register will start reading 1 when device is ready */
gallonm 10:4954b09b72d8 386 #define SYSTEM_FRESH_OUT_OF_RESET 0x016
gallonm 1:1de1ea2994d9 387
gallonm 1:1de1ea2994d9 388 /**
gallonm 1:1de1ea2994d9 389 * @def SYSTEM_GROUPED_PARAMETER_HOLD
gallonm 1:1de1ea2994d9 390 * @brief Writing 1/0 activate/deactivate safe host update of multiple register in critical group \n
Davidroid 57:fa4c622b04a7 391 * rather use \a VL6180X_SetGroupParamHold()
gallonm 1:1de1ea2994d9 392 *
gallonm 1:1de1ea2994d9 393 * The critical register group is made of: \n
gallonm 1:1de1ea2994d9 394 * #SYSTEM_INTERRUPT_CONFIG_GPIO \n
gallonm 1:1de1ea2994d9 395 * #SYSRANGE_THRESH_HIGH \n
gallonm 1:1de1ea2994d9 396 * #SYSRANGE_THRESH_LOW \n
gallonm 1:1de1ea2994d9 397 * #SYSALS_INTEGRATION_PERIOD \n
gallonm 1:1de1ea2994d9 398 * #SYSALS_ANALOGUE_GAIN \n
gallonm 1:1de1ea2994d9 399 * #SYSALS_THRESH_HIGH \n
gallonm 1:1de1ea2994d9 400 * #SYSALS_THRESH_LOW
gallonm 1:1de1ea2994d9 401 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 402 */
gallonm 10:4954b09b72d8 403 #define SYSTEM_GROUPED_PARAMETER_HOLD 0x017
gallonm 1:1de1ea2994d9 404
gallonm 1:1de1ea2994d9 405
gallonm 1:1de1ea2994d9 406 /**
gallonm 1:1de1ea2994d9 407 * @def SYSRANGE_START
gallonm 1:1de1ea2994d9 408 * @brief Start/stop and set operating range mode
gallonm 1:1de1ea2994d9 409 *
gallonm 1:1de1ea2994d9 410 * Write Combination of #MODE_START_STOP and #MODE_CONTINUOUS to select and start desired operation.
gallonm 1:1de1ea2994d9 411 *
gallonm 1:1de1ea2994d9 412 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 413 */
gallonm 10:4954b09b72d8 414 #define SYSRANGE_START 0x018
kenjiArai 60:972b4898a007 415 /** mask existing bit in #SYSRANGE_START*/
kenjiArai 60:972b4898a007 416 #define MODE_MASK 0x03
kenjiArai 60:972b4898a007 417 /** bit 0 in #SYSRANGE_START write 1 toggle state in continuous mode and arm next shot in single shot mode */
kenjiArai 60:972b4898a007 418 #define MODE_START_STOP 0x01
kenjiArai 60:972b4898a007 419 /** bit 1 write 1 in #SYSRANGE_START set continuous operation mode */
kenjiArai 60:972b4898a007 420 #define MODE_CONTINUOUS 0x02
kenjiArai 60:972b4898a007 421 /** bit 1 write 0 in #SYSRANGE_START set single shot mode */
kenjiArai 60:972b4898a007 422 #define MODE_SINGLESHOT 0x00
gallonm 1:1de1ea2994d9 423
gallonm 1:1de1ea2994d9 424 /**
gallonm 1:1de1ea2994d9 425 * @def SYSRANGE_THRESH_HIGH
gallonm 1:1de1ea2994d9 426 * High level range threshold (must be scaled)
gallonm 1:1de1ea2994d9 427 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 428 */
gallonm 10:4954b09b72d8 429 #define SYSRANGE_THRESH_HIGH 0x019
gallonm 1:1de1ea2994d9 430
gallonm 1:1de1ea2994d9 431 /**
gallonm 1:1de1ea2994d9 432 * @def SYSRANGE_THRESH_LOW
gallonm 1:1de1ea2994d9 433 * Low level range threshold (must be scaled)
gallonm 1:1de1ea2994d9 434 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 435 */
gallonm 10:4954b09b72d8 436 #define SYSRANGE_THRESH_LOW 0x01A
gallonm 1:1de1ea2994d9 437
gallonm 1:1de1ea2994d9 438 /**
gallonm 1:1de1ea2994d9 439 * @def SYSRANGE_INTERMEASUREMENT_PERIOD
Davidroid 57:fa4c622b04a7 440 * @brief Continuous mode intermeasurement delay \a VL6180X_RangeSetInterMeasPeriod()
gallonm 1:1de1ea2994d9 441 *
gallonm 1:1de1ea2994d9 442 * Time delay between measurements in Ranging continuous mode.\n
gallonm 1:1de1ea2994d9 443 * Range 0-254 (0 = 10ms).\n Step size = 10ms.
gallonm 1:1de1ea2994d9 444 *
gallonm 1:1de1ea2994d9 445 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 446 */
gallonm 10:4954b09b72d8 447 #define SYSRANGE_INTERMEASUREMENT_PERIOD 0x01B
gallonm 1:1de1ea2994d9 448
gallonm 1:1de1ea2994d9 449 /**
gallonm 1:1de1ea2994d9 450 * @brief Maximum time to run measurement in Ranging modes.
gallonm 1:1de1ea2994d9 451 * Range 1 - 63 ms (1 code = 1 ms);
gallonm 1:1de1ea2994d9 452 *
gallonm 1:1de1ea2994d9 453 * Measurement aborted when limit reached to aid power reduction.\
gallonm 1:1de1ea2994d9 454 * For example, 0x01 = 1ms, 0x0a = 10ms.\
gallonm 1:1de1ea2994d9 455 * Note: Effective max_convergence_time depends on readout_averaging_sample_period setting.
gallonm 1:1de1ea2994d9 456 *
gallonm 1:1de1ea2994d9 457 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 458 */
gallonm 10:4954b09b72d8 459 #define SYSRANGE_MAX_CONVERGENCE_TIME 0x01C
gallonm 1:1de1ea2994d9 460 /**@brief Cross talk compensation rate
Davidroid 57:fa4c622b04a7 461 * @warning never write register directly use @a VL6180X_SetXTalkCompensationRate()
gallonm 1:1de1ea2994d9 462 * refer to manual for calibration procedure and computation
gallonm 1:1de1ea2994d9 463 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 464 */
gallonm 10:4954b09b72d8 465 #define SYSRANGE_CROSSTALK_COMPENSATION_RATE 0x01E
gallonm 1:1de1ea2994d9 466 /**
gallonm 1:1de1ea2994d9 467 * @brief Minimum range value in mm to qualify for crosstalk compensation
gallonm 1:1de1ea2994d9 468 */
gallonm 10:4954b09b72d8 469 #define SYSRANGE_CROSSTALK_VALID_HEIGHT 0x021
gallonm 10:4954b09b72d8 470 #define SYSRANGE_EARLY_CONVERGENCE_ESTIMATE 0x022
gallonm 10:4954b09b72d8 471 #define SYSRANGE_PART_TO_PART_RANGE_OFFSET 0x024
gallonm 10:4954b09b72d8 472 #define SYSRANGE_RANGE_IGNORE_VALID_HEIGHT 0x025
gallonm 10:4954b09b72d8 473 #define SYSRANGE_RANGE_IGNORE_THRESHOLD 0x026
gallonm 10:4954b09b72d8 474 #define SYSRANGE_EMITTER_BLOCK_THRESHOLD 0x028
gallonm 10:4954b09b72d8 475 #define SYSRANGE_MAX_AMBIENT_LEVEL_THRESH 0x02A
gallonm 10:4954b09b72d8 476 #define SYSRANGE_MAX_AMBIENT_LEVEL_MULT 0x02C
gallonm 1:1de1ea2994d9 477 /** @brief various Enable check enabel register
Davidroid 57:fa4c622b04a7 478 * @a VL6180X_RangeSetEceState()
gallonm 1:1de1ea2994d9 479 */
gallonm 10:4954b09b72d8 480 #define SYSRANGE_RANGE_CHECK_ENABLES 0x02D
kenjiArai 60:972b4898a007 481 #define RANGE_CHECK_ECE_ENABLE_MASK 0x01
kenjiArai 60:972b4898a007 482 #define RANGE_CHECK_RANGE_ENABLE_MASK 0x02
kenjiArai 60:972b4898a007 483 #define RANGE_CHECK_SNR_ENABLKE 0x10
gallonm 1:1de1ea2994d9 484
gallonm 10:4954b09b72d8 485 #define SYSRANGE_VHV_RECALIBRATE 0x02E
gallonm 1:1de1ea2994d9 486 #define SYSRANGE_VHV_REPEAT_RATE 0x031
gallonm 1:1de1ea2994d9 487
gallonm 1:1de1ea2994d9 488 /**
gallonm 1:1de1ea2994d9 489 * @def SYSALS_START
gallonm 1:1de1ea2994d9 490 * @brief Start/stop and set operating als mode
gallonm 1:1de1ea2994d9 491 *
gallonm 1:1de1ea2994d9 492 * same bit definition as range \a #SYSRANGE_START \n
gallonm 1:1de1ea2994d9 493 */
gallonm 10:4954b09b72d8 494 #define SYSALS_START 0x038
gallonm 1:1de1ea2994d9 495
gallonm 1:1de1ea2994d9 496 /** ALS low Threshold high */
gallonm 10:4954b09b72d8 497 #define SYSALS_THRESH_HIGH 0x03A
gallonm 1:1de1ea2994d9 498 /** ALS low Threshold low */
gallonm 10:4954b09b72d8 499 #define SYSALS_THRESH_LOW 0x03C
gallonm 1:1de1ea2994d9 500 /** ALS intermeasurement period */
gallonm 10:4954b09b72d8 501 #define SYSALS_INTERMEASUREMENT_PERIOD 0x03E
kenjiArai 60:972b4898a007 502 /**
gallonm 1:1de1ea2994d9 503 * @warning or value with 0x40 when writing to these register*/
gallonm 10:4954b09b72d8 504 #define SYSALS_ANALOGUE_GAIN 0x03F
gallonm 1:1de1ea2994d9 505 /** ALS integration period */
gallonm 10:4954b09b72d8 506 #define SYSALS_INTEGRATION_PERIOD 0x040
gallonm 1:1de1ea2994d9 507
gallonm 1:1de1ea2994d9 508 /**
gallonm 1:1de1ea2994d9 509 * @brief Result range status
gallonm 1:1de1ea2994d9 510 *
gallonm 1:1de1ea2994d9 511 * Hold the various range interrupt flags and error Specific error codes
gallonm 1:1de1ea2994d9 512 */
gallonm 10:4954b09b72d8 513 #define RESULT_RANGE_STATUS 0x04D
kenjiArai 60:972b4898a007 514 /** Device ready for new command bit 0*/
kenjiArai 60:972b4898a007 515 #define RANGE_DEVICE_READY_MASK 0x01
kenjiArai 60:972b4898a007 516 /** mask for error status covers bits [7:4] in #RESULT_RANGE_STATUS @a ::RangeError_u */
kenjiArai 60:972b4898a007 517 #define RANGE_ERROR_CODE_MASK 0xF0 /* */
kenjiArai 60:972b4898a007 518 /** range error bit position in #RESULT_RANGE_STATUS */
kenjiArai 60:972b4898a007 519 #define RANGE_ERROR_CODE_SHIFT 4
gallonm 1:1de1ea2994d9 520
gallonm 1:1de1ea2994d9 521 /**
gallonm 1:1de1ea2994d9 522 * @def RESULT_ALS_STATUS
gallonm 1:1de1ea2994d9 523 * @brief Result als status \n
gallonm 1:1de1ea2994d9 524 * Hold the various als interrupt flags and Specific error codes
gallonm 1:1de1ea2994d9 525 */
gallonm 10:4954b09b72d8 526 #define RESULT_ALS_STATUS 0x4E
kenjiArai 60:972b4898a007 527 /** Device ready for new command bit 0*/
kenjiArai 60:972b4898a007 528 #define ALS_DEVICE_READY_MASK 0x01
gallonm 1:1de1ea2994d9 529
gallonm 1:1de1ea2994d9 530 /**
gallonm 1:1de1ea2994d9 531 * @def RESULT_ALS_VAL
gallonm 1:1de1ea2994d9 532 * @brief 16 Bit ALS count output value.
gallonm 1:1de1ea2994d9 533 *
gallonm 1:1de1ea2994d9 534 * Lux value depends on Gain and integration settings and calibrated lux/count setting
Davidroid 57:fa4c622b04a7 535 * \a VL6180X_AlsGetLux() \a VL6180X_AlsGetMeasurement()
gallonm 1:1de1ea2994d9 536 */
gallonm 10:4954b09b72d8 537 #define RESULT_ALS_VAL 0x50
gallonm 1:1de1ea2994d9 538
gallonm 1:1de1ea2994d9 539 /**
gallonm 1:1de1ea2994d9 540 * @def FW_ALS_RESULT_SCALER
gallonm 1:1de1ea2994d9 541 * @brief Als scaler register Bits [3:0] analogue gain 1 to 16x
Davidroid 57:fa4c622b04a7 542 * these register content is cached by API in \a VL6180XDevData_t::AlsScaler
gallonm 1:1de1ea2994d9 543 * for lux computation acceleration
gallonm 1:1de1ea2994d9 544 */
gallonm 10:4954b09b72d8 545 #define FW_ALS_RESULT_SCALER 0x120
gallonm 1:1de1ea2994d9 546
gallonm 1:1de1ea2994d9 547
gallonm 1:1de1ea2994d9 548 /**
gallonm 1:1de1ea2994d9 549 * these union can be use as a generic bit field type for map #RESULT_INTERRUPT_STATUS_GPIO register
gallonm 1:1de1ea2994d9 550 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 551 */
kenjiArai 60:972b4898a007 552 typedef union IntrStatus_u {
gallonm 1:1de1ea2994d9 553 uint8_t val; /*!< raw 8 bit register value*/
gallonm 1:1de1ea2994d9 554 struct {
gallonm 1:1de1ea2994d9 555 unsigned Range :3; /*!< Range status one of :\n \a #RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD \n \a #RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD \n \a #RES_INT_STAT_GPIO_OUT_OF_WINDOW \n \a #RES_INT_STAT_GPIO_NEW_SAMPLE_READY */
gallonm 1:1de1ea2994d9 556 unsigned Als :3; /*!< Als status one of: \n \a #RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD \n \a #RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD \n \a #RES_INT_STAT_GPIO_OUT_OF_WINDOW \n \a #RES_INT_STAT_GPIO_NEW_SAMPLE_READY */
gallonm 1:1de1ea2994d9 557 unsigned Error :2; /*!< Error status of: \n \a #RES_INT_ERROR_LASER_SAFETY \n \a #RES_INT_ERROR_PLL */
kenjiArai 60:972b4898a007 558 } status; /*!< interrupt status as bit field */
gallonm 1:1de1ea2994d9 559 } IntrStatus_t;
gallonm 1:1de1ea2994d9 560
gallonm 1:1de1ea2994d9 561 /**
gallonm 1:1de1ea2994d9 562 * @def RESULT_INTERRUPT_STATUS_GPIO
gallonm 1:1de1ea2994d9 563 * @brief System interrupt status report selected interrupt for als and ranging
gallonm 1:1de1ea2994d9 564 *
gallonm 1:1de1ea2994d9 565 * These register can be polled even if no gpio pins is active\n
gallonm 1:1de1ea2994d9 566 * What reported is selected by \a #SYSTEM_INTERRUPT_CONFIG_GPIO \n
gallonm 1:1de1ea2994d9 567 * Range mask with \a #RES_INT_RANGE_MASK and shit by \a #RES_INT_RANGE_SHIFT
gallonm 1:1de1ea2994d9 568 * Als mask with \a #RES_INT_ALS_MASK and shit by \a #RES_INT_ALS_SHIFT
gallonm 1:1de1ea2994d9 569 * Result value express condition (or combination?)
gallonm 1:1de1ea2994d9 570 * \a #RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD \n
gallonm 1:1de1ea2994d9 571 * \a #RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD \n
gallonm 1:1de1ea2994d9 572 * \a #RES_INT_STAT_GPIO_OUT_OF_WINDOW \n
gallonm 1:1de1ea2994d9 573 * \a #RES_INT_STAT_GPIO_NEW_SAMPLE_READY
gallonm 1:1de1ea2994d9 574 *
gallonm 1:1de1ea2994d9 575 * @ingroup device_regdef
gallonm 1:1de1ea2994d9 576 */
gallonm 10:4954b09b72d8 577 #define RESULT_INTERRUPT_STATUS_GPIO 0x4F
kenjiArai 60:972b4898a007 578 /** ranging interrupt 1st bit position in #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 579 #define RES_INT_RANGE_SHIFT 0
kenjiArai 60:972b4898a007 580 /** ALS interrupt 1st bit position in #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 581 #define RES_INT_ALS_SHIFT 3
kenjiArai 60:972b4898a007 582 /** interrupt bit position in #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 583 #define RES_INT_ERROR_SHIFT 6
kenjiArai 60:972b4898a007 584 /** Ranging interrupt mask in #RESULT_INTERRUPT_STATUS_GPIO (prior to shift) \sa IntrStatus_t */
kenjiArai 60:972b4898a007 585 #define RES_INT_RANGE_MASK (0x7<<RES_INT_RANGE_SHIFT)
kenjiArai 60:972b4898a007 586 /** als interrupt mask in #RESULT_INTERRUPT_STATUS_GPIO (prior to shift) \sa IntrStatus_t */
kenjiArai 60:972b4898a007 587 #define RES_INT_ALS_MASK (0x7<<RES_INT_ALS_SHIFT)
gallonm 1:1de1ea2994d9 588
kenjiArai 60:972b4898a007 589 /** low threshold condition in #RESULT_INTERRUPT_STATUS_GPIO for */
kenjiArai 60:972b4898a007 590 #define RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD 0x01
kenjiArai 60:972b4898a007 591 /** high threshold condition in #RESULT_INTERRUPT_STATUS_GPIO for ALs or Rage*/
kenjiArai 60:972b4898a007 592 #define RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD 0x02
kenjiArai 60:972b4898a007 593 /** out of window condition in #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 594 #define RES_INT_STAT_GPIO_OUT_OF_WINDOW 0x03
kenjiArai 60:972b4898a007 595 /** new sample ready in #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 596 #define RES_INT_STAT_GPIO_NEW_SAMPLE_READY 0x04
kenjiArai 60:972b4898a007 597 /** error in #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 598 #define RES_INT_ERROR_MASK (0x3<<RES_INT_ERROR_SHIFT)
kenjiArai 60:972b4898a007 599 /** laser safety error on #RES_INT_ERROR_MASK of #RESULT_INTERRUPT_STATUS_GPIO */
kenjiArai 60:972b4898a007 600 #define RES_INT_ERROR_LASER_SAFETY 1
kenjiArai 60:972b4898a007 601 /** pll 1 or 2 error on #RES_INT_ERROR_MASK of #RESULT_INTERRUPT_STATUS_GPIO*/
kenjiArai 60:972b4898a007 602 #define RES_INT_ERROR_PLL 2
gallonm 1:1de1ea2994d9 603
gallonm 1:1de1ea2994d9 604 /**
gallonm 1:1de1ea2994d9 605 * Final range result value presented to the user for use. Unit is in mm.
gallonm 1:1de1ea2994d9 606 */
gallonm 10:4954b09b72d8 607 #define RESULT_RANGE_VAL 0x062
gallonm 1:1de1ea2994d9 608
gallonm 1:1de1ea2994d9 609 /**
gallonm 1:1de1ea2994d9 610 * Raw Range result value with offset applied (no cross talk compensation applied). Unit is in mm.
gallonm 1:1de1ea2994d9 611 */
gallonm 10:4954b09b72d8 612 #define RESULT_RANGE_RAW 0x064
gallonm 1:1de1ea2994d9 613
gallonm 1:1de1ea2994d9 614 /**
gallonm 1:1de1ea2994d9 615 * @brief Sensor count rate of signal returns correlated to IR emitter.
gallonm 1:1de1ea2994d9 616 *
gallonm 1:1de1ea2994d9 617 * Computed from RETURN_SIGNAL_COUNT / RETURN_CONV_TIME. Mcps 9.7 format
gallonm 1:1de1ea2994d9 618 */
gallonm 10:4954b09b72d8 619 #define RESULT_RANGE_SIGNAL_RATE 0x066
gallonm 1:1de1ea2994d9 620
gallonm 1:1de1ea2994d9 621 /**
gallonm 1:1de1ea2994d9 622 * @brief Return signal count
gallonm 1:1de1ea2994d9 623 *
gallonm 1:1de1ea2994d9 624 * Sensor count output value attributed to signal correlated to IR emitter on the Return array.
gallonm 1:1de1ea2994d9 625 */
gallonm 10:4954b09b72d8 626 #define RESULT_RANGE_RETURN_SIGNAL_COUNT 0x06C
gallonm 1:1de1ea2994d9 627
gallonm 1:1de1ea2994d9 628 /**
gallonm 1:1de1ea2994d9 629 * @brief Reference signal count
gallonm 1:1de1ea2994d9 630 *
gallonm 1:1de1ea2994d9 631 * sensor count output value attributed to signal correlated to IR emitter on the Reference array.
gallonm 1:1de1ea2994d9 632 */
gallonm 10:4954b09b72d8 633 #define RESULT_RANGE_REFERENCE_SIGNAL_COUNT 0x070
gallonm 1:1de1ea2994d9 634
gallonm 1:1de1ea2994d9 635 /**
gallonm 1:1de1ea2994d9 636 * @brief Return ambient count
gallonm 1:1de1ea2994d9 637 *
gallonm 1:1de1ea2994d9 638 * sensor count output value attributed to uncorrelated ambient signal on the Return array.
gallonm 1:1de1ea2994d9 639 * Must be multiplied by 6 if used to calculate the ambient to signal threshold
gallonm 1:1de1ea2994d9 640 */
gallonm 10:4954b09b72d8 641 #define RESULT_RANGE_RETURN_AMB_COUNT 0x074
gallonm 1:1de1ea2994d9 642
gallonm 1:1de1ea2994d9 643 /**
gallonm 1:1de1ea2994d9 644 * @brief Reference ambient count
gallonm 1:1de1ea2994d9 645 *
gallonm 1:1de1ea2994d9 646 * Sensor count output value attributed to uncorrelated ambient signal on the Reference array.
gallonm 1:1de1ea2994d9 647 */
gallonm 10:4954b09b72d8 648 #define RESULT_RANGE_REFERENCE_AMB_COUNT 0x078
gallonm 1:1de1ea2994d9 649
gallonm 1:1de1ea2994d9 650 /**
gallonm 1:1de1ea2994d9 651 * sensor count output value attributed to signal on the Return array.
gallonm 1:1de1ea2994d9 652 */
gallonm 10:4954b09b72d8 653 #define RESULT_RANGE_RETURN_CONV_TIME 0x07C
gallonm 1:1de1ea2994d9 654
gallonm 1:1de1ea2994d9 655 /**
gallonm 1:1de1ea2994d9 656 * sensor count output value attributed to signal on the Reference array.
gallonm 1:1de1ea2994d9 657 */
gallonm 10:4954b09b72d8 658 #define RESULT_RANGE_REFERENCE_CONV_TIME 0x080
gallonm 1:1de1ea2994d9 659
gallonm 1:1de1ea2994d9 660
gallonm 1:1de1ea2994d9 661 /**
gallonm 1:1de1ea2994d9 662 * @def RANGE_SCALER
gallonm 1:1de1ea2994d9 663 * @brief RANGE scaling register
gallonm 1:1de1ea2994d9 664 *
Davidroid 57:fa4c622b04a7 665 * Never should user write directly onto that register directly \a VL6180X_UpscaleSetScaling()
gallonm 1:1de1ea2994d9 666 */
gallonm 10:4954b09b72d8 667 #define RANGE_SCALER 0x096
gallonm 1:1de1ea2994d9 668
gallonm 1:1de1ea2994d9 669 /**
gallonm 1:1de1ea2994d9 670 * @def READOUT_AVERAGING_SAMPLE_PERIOD
gallonm 1:1de1ea2994d9 671 * @brief Readout averaging sample period register
gallonm 1:1de1ea2994d9 672 *
gallonm 1:1de1ea2994d9 673 *
gallonm 1:1de1ea2994d9 674 * The internal readout averaging sample period can be adjusted from 0 to 255.
gallonm 1:1de1ea2994d9 675 * Increasing the sampling period decreases noise but also reduces the effective
gallonm 1:1de1ea2994d9 676 * max convergence time and increases power consumption
gallonm 1:1de1ea2994d9 677 * Each unit sample period corresponds to around 64.5 μs additional processing time.
gallonm 1:1de1ea2994d9 678 * The recommended setting is 48 which equates to around 4.3 ms.
gallonm 1:1de1ea2994d9 679 *
gallonm 1:1de1ea2994d9 680 * see datasheet for more detail
gallonm 1:1de1ea2994d9 681 */
gallonm 10:4954b09b72d8 682 #define READOUT_AVERAGING_SAMPLE_PERIOD 0x10A
gallonm 1:1de1ea2994d9 683
gallonm 1:1de1ea2994d9 684 /**
gallonm 1:1de1ea2994d9 685 * @def I2C_SLAVE_DEVICE_ADDRESS
gallonm 1:1de1ea2994d9 686 * User programmable I2C address (7-bit). Device address can be re-designated after power-up.
gallonm 1:1de1ea2994d9 687 * @warning What programmed in the register 7-0 are bit 8-1 of i2c address on bus (bit 0 is rd/wr)
gallonm 1:1de1ea2994d9 688 * so what prohamd is commonly whar ergfer as adrerss /2
Davidroid 57:fa4c622b04a7 689 * @sa VL6180X_SetI2CAddress()
gallonm 1:1de1ea2994d9 690 */
gallonm 10:4954b09b72d8 691 #define I2C_SLAVE_DEVICE_ADDRESS 0x212
gallonm 1:1de1ea2994d9 692
Davidroid 57:fa4c622b04a7 693 #endif /* _VL6180X_DEF */