MCUXpresso_MIMXRT1021xxxxx/middleware/issdk/sensors/isl29023.h
2022-08-23 23:00:33 +08:00

188 lines
5.9 KiB
C

/*
* Copyright 2018 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef ISL29023_H_
#define ISL29023_H_
/**
**
** ISL29023 Ambient Light Sensor Internal Registers
*/
enum {
ISL29023_CMD_I = 0x00,
ISL29023_CMD_II = 0x01,
ISL29023_DATA_LSB = 0x02,
ISL29023_DATA_MSB = 0x03,
ISL29023_INT_LT_LSB = 0x04,
ISL29023_INT_LT_MSB = 0x05,
ISL29023_INT_HT_LSB = 0x06,
ISL29023_INT_HT_MSB = 0x07,
ISL29023_TEST = 0x08,
};
#define ISL29023_I2C_ADDRESS (0x44) /*ISL29023 I2C Address */
#define ISL29023_I2C_TEST_VALUE (0x00) /*ISL29023 test register value */
/*--------------------------------
** Register: COMMAND-I
** Enum: ISL29023_CMD_I
** --
** Offset : 0x00 - Control & Status bits
** ------------------------------*/
typedef union {
struct {
uint8_t prst: 2; /* IRQ persist bits. */
uint8_t flag: 1; /* IRQ flag bit. */
uint8_t _reserved_ : 2;
uint8_t op : 3; /* Operation mode bits. */
} b;
uint8_t w;
} ISL29023_CMD_I_t;
/*
** COMMAND-I - Bit field mask definitions
*/
#define ISL29023_CMD_I_PRST_MASK ((uint8_t) 0x03)
#define ISL29023_CMD_I_PRST_SHIFT ((uint8_t) 0)
#define ISL29023_CMD_I_FLAG_MASK ((uint8_t) 0x04)
#define ISL29023_CMD_I_FLAG_SHIFT ((uint8_t) 2)
#define ISL29023_CMD_I_OP_MASK ((uint8_t) 0xe0)
#define ISL29023_CMD_I_OP_SHIFT ((uint8_t) 5)
/*
** COMMAND-I - Bit field value definitions
*/
#define ISL29023_CMD_I_PRST_1 ((uint8_t) 0x00) /* Number of Integration Samples = 1 */
#define ISL29023_CMD_I_PRST_4 ((uint8_t) 0x01) /* Number of Integration Samples = 4 */
#define ISL29023_CMD_I_PRST_8 ((uint8_t) 0x02) /* Number of Integration Samples = 8 */
#define ISL29023_CMD_I_PRST_16 ((uint8_t) 0x03) /* Number of Integration Samples = 16 */
#define ISL29023_CMD_I_FLAG_CLEARED ((uint8_t) 0x00) /* IRQ flag is cleared or not triggered yet */
#define ISL29023_CMD_I_FLAG_TRIGGERED ((uint8_t) 0x04) /* IRQ flag is triggered */
#define ISL29023_CMD_I_OP_POWER_DOWN ((uint8_t) 0x00) /* Power-down the device (default) */
#define ISL29023_CMD_I_OP_ALS_ONCE ((uint8_t) 0x20) /* IC measures ALS only once */
#define ISL29023_CMD_I_OP_IR_ONCE ((uint8_t) 0x40) /* IC meausres IR only once */
#define ISL29023_CMD_I_OP_ALS_CONT ((uint8_t) 0xA0) /* IC meausres ALS continuously */
#define ISL29023_CMD_I_OP_IR_CONT ((uint8_t) 0xC0) /* IC meausres IR continuous */
/*------------------------------*/
/*--------------------------------
** Register: COMMAND-II
** Enum: ISL29023_CMD_II
** --
** Offset : 0x01 - Control bits
** ------------------------------*/
typedef union {
struct {
uint8_t range: 2; /* Full scale range bits */
uint8_t res : 2; /* ADC resolution bits */
uint8_t _reserved_ : 4;
} b;
uint8_t w;
} ISL29023_CMD_II_t;
/*
** COMMAND-II - Bit field mask definitions
*/
#define ISL29023_CMD_II_RANGE_MASK ((uint8_t) 0x03)
#define ISL29023_CMD_II_RANGE_SHIFT ((uint8_t) 0)
#define ISL29023_CMD_II_RES_MASK ((uint8_t) 0x0C)
#define ISL29023_CMD_II_RES_SHIFT ((uint8_t) 2)
/*
** COMMAND-II - Bit field value definitions
*/
#define ISL29023_CMD_II_RANGE_1 ((uint8_t) 0x00) /* FSR @ALS Sensing = 1.000 */
#define ISL29023_CMD_II_RANGE_2 ((uint8_t) 0x01) /* FSR @ALS Sensing = 4.000 */
#define ISL29023_CMD_II_RANGE_3 ((uint8_t) 0x02) /* FSR @ALS Sensing = 16.000 */
#define ISL29023_CMD_II_RANGE_4 ((uint8_t) 0x03) /* FSR @ALS Sensing = 64.000 */
#define ISL29023_CMD_II_RES_16 ((uint8_t) 0x00) /* 2^16 ADC resolution */
#define ISL29023_CMD_II_RES_12 ((uint8_t) 0x04) /* 2^12 ADC resolution */
#define ISL29023_CMD_II_RES_8 ((uint8_t) 0x08) /* 2^8 ADC resolution */
#define ISL29023_CMD_II_RES_4 ((uint8_t) 0x0C) /* 2^4 ADC resolution */
/*------------------------------*/
/*--------------------------------
** Register: DATA_LSB
** Enum: ISL29023_DATA_LSB
** --
** Offset : 0x02 - Bits 7-0 of the 16-bit data register.
** ------------------------------*/
typedef uint8_t ISL29023_DATA_LSB_t;
/*--------------------------------
** Register: DATA_MSB
** Enum: ISL29023_DATA_MSB
** --
** Offset : 0x03 - Bits 15-8 of the 16-bit data register.
** ------------------------------*/
typedef uint8_t ISL29023_DATA_MSB_t;
/*--------------------------------
** Register: INT_LT_LSB
** Enum: ISL29023_INT_LT_LSB
** --
** Offset : 0x04 - Bits 7-0 of the 16-bit lower IRQ treshold register.
** ------------------------------*/
typedef uint8_t ISL29023_INT_LT_LSB_t;
/*--------------------------------
** Register: INT_LT_MSB
** Enum: ISL29023_INT_LT_MSB
** --
** Offset : 0x05 - Bits 15-8 of the 16-bit lower IRQ treshold register.
** ------------------------------*/
typedef uint8_t ISL29023_INT_LT_MSB_t;
/*--------------------------------
** Register: INT_HT_LSB
** Enum: ISL29023_INT_HT_LSB
** --
** Offset : 0x06 - Bits 7-0 of the 16-bit upper IRQ treshold register.
** ------------------------------*/
typedef uint8_t ISL29023_INT_HT_LSB_t;
/*--------------------------------
** Register: INT_HT_MSB
** Enum: ISL29023_INT_HT_MSB
** --
** Offset : 0x07 - Bits 15-8 of the 16-bit upper IRQ treshold register.
** ------------------------------*/
typedef uint8_t ISL29023_INT_HT_MSB_t;
/*--------------------------------
** Register: TEST
** Enum: ISL29023_TEST
** --
** Offset : 0x08 - Test register (hold 00h during normal operation).
** ------------------------------*/
typedef uint8_t ISL29023_TEST_t;
#endif /* ISL29023_H_ */