⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smb380.h

📁 Sample codes to change orientation using 3-Axis accel. chip, SMB380
💻 H
📖 第 1 页 / 共 3 页
字号:
#define OFFSET_X_MSB__REG	OFFSET_X_REG


#define OFFSET_Y_MSB__POS	0
#define OFFSET_Y_MSB__LEN	8
#define OFFSET_Y_MSB__MSK	0xFF
#define OFFSET_Y_MSB__REG	OFFSET_Y_REG

#define OFFSET_Z_MSB__POS	0
#define OFFSET_Z_MSB__LEN	8
#define OFFSET_Z_MSB__MSK	0xFF
#define OFFSET_Z_MSB__REG	OFFSET_Z_REG

#define OFFSET_T_MSB__POS	0
#define OFFSET_T_MSB__LEN	8
#define OFFSET_T_MSB__MSK	0xFF
#define OFFSET_T_MSB__REG	OFFSET_T_REG





#define SMB380_GET_BITSLICE(regvar, bitname)\
			(regvar & bitname##__MSK) >> bitname##__POS


#define SMB380_SET_BITSLICE(regvar, bitname, val)\
		  (regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK)  


/** \endcond */


/* CONSTANTS */


/* range and bandwidth */

#define SMB380_RANGE_2G			0 /**< sets range to 2G mode \see smb380_set_range() */
#define SMB380_RANGE_4G			1 /**< sets range to 4G mode \see smb380_set_range() */
#define SMB380_RANGE_8G			2 /**< sets range to 8G mode \see smb380_set_range() */


#define SMB380_BW_25HZ		0	/**< sets bandwidth to 25HZ \see smb380_set_bandwidth() */
#define SMB380_BW_50HZ		1	/**< sets bandwidth to 50HZ \see smb380_set_bandwidth() */
#define SMB380_BW_100HZ		2	/**< sets bandwidth to 100HZ \see smb380_set_bandwidth() */
#define SMB380_BW_190HZ		3	/**< sets bandwidth to 190HZ \see smb380_set_bandwidth() */
#define SMB380_BW_375HZ		4	/**< sets bandwidth to 375HZ \see smb380_set_bandwidth() */
#define SMB380_BW_750HZ		5	/**< sets bandwidth to 750HZ \see smb380_set_bandwidth() */
#define SMB380_BW_1500HZ	6	/**< sets bandwidth to 1500HZ \see smb380_set_bandwidth() */

/* mode settings */

#define SMB380_MODE_NORMAL      0
#define SMB380_MODE_SLEEP       2
#define SMB380_MODE_WAKE_UP     3

/* wake up */

#define SMB380_WAKE_UP_PAUSE_20MS		0
#define SMB380_WAKE_UP_PAUSE_80MS		1
#define SMB380_WAKE_UP_PAUSE_320MS		2
#define SMB380_WAKE_UP_PAUSE_2560MS		3


/* LG/HG thresholds are in LSB and depend on RANGE setting */
/* no range check on threshold calculation */

#define SMB380_SELF_TEST0_ON		1
#define SMB380_SELF_TEST1_ON		3

#define SMB380_EE_W_OFF			0
#define SMB380_EE_W_ON			1



/* low-g, high-g, any_motion */


#define SMB380_COUNTER_LG_RST		0
#define SMB380_COUNTER_LG_0LSB		SMB380_COUNTER_LG_RST
#define SMB380_COUNTER_LG_1LSB		1
#define SMB380_COUNTER_LG_2LSB		2
#define SMB380_COUNTER_LG_3LSB		3

#define SMB380_COUNTER_HG_RST		0
#define SMB380_COUNTER_HG_0LSB		SMB380_COUNTER_HG_RST
#define SMB380_COUNTER_HG_1LSB		1
#define SMB380_COUNTER_HG_2LSB		2
#define SMB380_COUNTER_HG_3LSB		3

#define SMB380_COUNTER_RST			0
#define SMB380_COUNTER_0LSB			SMB380_COUNTER_RST
#define SMB380_COUNTER_1LSB			1
#define SMB380_COUNTER_2LSB			2
#define SMB380_COUNTER_3LSB			3



/** Macro to convert floating point low-g-thresholds in G to 8-bit register values.<br>
  * Example: SMB380_LG_THRES_IN_G( 0.3, 2.0) generates the register value for 0.3G threshold in 2G mode.
  * \brief convert g-values to 8-bit value
 */
#define SMB380_LG_THRES_IN_G( gthres, range)			((256 * gthres ) / range)

/** Macro to convert floating point high-g-thresholds in G to 8-bit register values.<br>
  * Example: SMB380_HG_THRES_IN_G( 1.4, 2.0) generates the register value for 1.4G threshold in 2G mode.
  * \brief convert g-values to 8-bit value
 */
#define SMB380_HG_THRES_IN_G(gthres, range)				((256 * gthres ) / range)

/** Macro to convert floating point low-g-hysteresis in G to 8-bit register values.<br>
  * Example: SMB380_LG_HYST_THRES_IN_G( 0.2, 2.0) generates the register value for 0.2G threshold in 2G mode.
  * \brief convert g-values to 8-bit value
 */
#define SMB380_LG_HYST_IN_G( ghyst, range )				((32 * ghyst) / range)

/** Macro to convert floating point high-g-hysteresis in G to 8-bit register values.<br>
  * Example: SMB380_HG_HYST_THRES_IN_G( 0.2, 2.0) generates the register value for 0.2G threshold in 2G mode.
  * \brief convert g-values to 8-bit value
 */
#define SMB380_HG_HYST_IN_G( ghyst, range )				((32 * ghyst) / range)


/** Macro to convert floating point G-thresholds to 8-bit register values<br>
  * Example: SMB380_ANY_MOTION_THRES_IN_G( 1.2, 2.0) generates the register value for 1.2G threshold in 2G mode.
  * \brief convert g-values to 8-bit value
 */

#define SMB380_ANY_MOTION_THRES_IN_G( gthres, range)	((128 * gthres ) / range)


#define SMB380_ANY_MOTION_DUR_1		0
#define SMB380_ANY_MOTION_DUR_3		1
#define SMB380_ANY_MOTION_DUR_5		2
#define SMB380_ANY_MOTION_DUR_7		3



#define SMB380_SHADOW_DIS_OFF	0
#define SMB380_SHADOW_DIS_ON	1

#define SMB380_LATCH_INT_OFF	0
#define SMB380_LATCH_INT_ON		1

#define SMB380_NEW_DATA_INT_OFF	0
#define SMB380_NEW_DATA_INT_ON	1

#define SMB380_ENABLE_ADV_INT_OFF	0
#define SMB380_ENABLE_ADV_INT_ON	1

#define SMB380_EN_ANY_MOTION_OFF 	0
#define SMB380_EN_ANY_MOTION_ON 	1


#define SMB380_ALERT_OFF	0
#define SMB380_ALERT_ON		1

#define SMB380_ENABLE_LG_OFF	0
#define SMB380_ENABLE_LG_ON		1

#define SMB380_ENABLE_HG_OFF	0
#define SMB380_ENABLE_HG_ON		1



#define SMB380_INT_ALERT		(1<<7)
#define SMB380_INT_ANY_MOTION	(1<<6)
#define SMB380_INT_EN_ADV_INT	(1<<5)
#define SMB380_INT_NEW_DATA	(1<<4)
#define SMB380_INT_LATCH		(1<<3)
#define SMB380_INT_HG			(1<<1)
#define SMB380_INT_LG			(1<<0)


#define SMB380_INT_STATUS_HG			(1<<0)
#define SMB380_INT_STATUS_LG			(1<<1)
#define SMB380_INT_STATUS_HG_LATCHED	(1<<2)
#define SMB380_INT_STATUS_LG_LATCHED	(1<<3)
#define SMB380_INT_STATUS_ALERT			(1<<4)
#define SMB380_INT_STATUS_ST_RESULT		(1<<7)


#define SMB380_CONF1_INT_MSK	((1<<ALERT__POS) | (1<<EN_ANY_MOTION__POS) | (1<<ENABLE_HG__POS) | (1<<ENABLE_LG__POS))
#define SMB380_CONF2_INT_MSK	((1<<ENABLE_ADV_INT__POS) | (1<<NEW_DATA_INT__POS) | (1<<LATCH_INT__POS))
/** \brief SMB380 data structure to write data to the one dedicated address in eeprom
*/
typedef struct {
unsigned char addr;
unsigned char data;
}write_ee;
#if 1
/** \brief SMB380 data structure to read data from one dedicated address
*/
typedef struct {
unsigned char addr;
unsigned char len;
}read_reg;
/** \brief SMB380 data structure to write data to one dedicated address
*/
typedef struct {
unsigned char addr;
unsigned char len;
unsigned char *data;
}write_reg;
#endif
/** \brief SMB380 data structure to set x,y,z or temperature data to dedicated offset address
*/
typedef struct {
unsigned char xyzt;
unsigned short offset;
}set_offset;

/** SMB380 acceleration data structure
	\brief Register type that contains x,y,z axises data
*/
typedef struct  {
		short x, /**< holds x-axis acceleration data sign extended. Range -512 to 511. */
			  y, /**< holds y-axis acceleration data sign extended. Range -512 to 511. */
			  z; /**< holds z-axis acceleration data sign extended. Range -512 to 511. */
} smb380acc_t;
/* Function prototypes */

extern "C" __declspec(dllexport) int smb380_set_image (smb380regs_t *);

extern "C" __declspec(dllexport) int smb380_get_image(smb380regs_t *);

extern "C" __declspec(dllexport) int smb380_get_offset(unsigned char, unsigned short *); 

extern "C" __declspec(dllexport) int smb380_set_offset(unsigned char, unsigned short ); 

extern "C" __declspec(dllexport) int smb380_set_offset_eeprom(unsigned char, unsigned short);

extern "C" __declspec(dllexport) int smb380_soft_reset(void); 

extern "C" __declspec(dllexport) int smb380_update_image(void); 

extern "C" __declspec(dllexport) int smb380_write_ee(unsigned char , unsigned char ) ;

extern "C" __declspec(dllexport) int smb380_set_ee_w(unsigned char);

extern "C" __declspec(dllexport) int smb380_selftest(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_selftest_result(unsigned char *);

extern "C" __declspec(dllexport) int smb380_set_range(char); 

extern "C" __declspec(dllexport) int smb380_get_range(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_mode(unsigned char); 

extern "C" __declspec(dllexport) int smb380_get_mode(unsigned char *);

extern "C" __declspec(dllexport) int smb380_set_wake_up_pause(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_wake_up_pause(unsigned char *);

extern "C" __declspec(dllexport) int smb380_set_bandwidth(char);

extern "C" __declspec(dllexport) int smb380_get_bandwidth(unsigned char *);

extern "C" __declspec(dllexport) int smb380_set_low_g_threshold(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_low_g_threshold(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_low_g_hysteresis(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_low_g_countdown(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_low_g_countdown(unsigned char *);

extern "C" __declspec(dllexport) int smb380_get_low_g_hysteresis(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_low_g_duration(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_low_g_duration(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_high_g_threshold(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_high_g_threshold(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_high_g_hysteresis(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_high_g_countdown(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_high_g_countdown(unsigned char *);

extern "C" __declspec(dllexport) int smb380_get_high_g_hysteresis(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_high_g_duration(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_high_g_duration(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_any_motion_threshold(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_any_motion_threshold(unsigned char*);

extern "C" __declspec(dllexport) int smb380_set_any_motion_count(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_any_motion_count(unsigned char *);

extern "C" __declspec(dllexport) int smb380_read_accel_x(short *);

extern "C" __declspec(dllexport) int smb380_read_accel_y(short *);

extern "C" __declspec(dllexport) int smb380_read_accel_z(short *);

extern "C" __declspec(dllexport) int smb380_read_temperature(unsigned char*);

extern "C" __declspec(dllexport) int smb380_read_accel_xyzt(smb380acc_t *);

extern "C" __declspec(dllexport) int smb380_get_interrupt_status(unsigned char *);

extern "C" __declspec(dllexport) int smb380_reset_interrupt(void);

extern "C" __declspec(dllexport) int smb380_set_interrupt_mask(unsigned char);

extern "C" __declspec(dllexport) int smb380_get_interrupt_mask(unsigned char *);

extern "C" __declspec(dllexport) int smb380_set_low_g_int(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_high_g_int(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_any_motion_int(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_alert_int(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_advanced_int(unsigned char);

extern "C" __declspec(dllexport) int smb380_latch_int(unsigned char);

extern "C" __declspec(dllexport) int smb380_set_new_data_int(unsigned char onoff);

extern "C" __declspec(dllexport) int smb380_pause(int);

extern "C" __declspec(dllexport) int smb380_read_reg(read_reg *reg, unsigned char *data);

extern "C" __declspec(dllexport) int smb380_write_reg(unsigned char , unsigned char*, unsigned char );

extern "C" __declspec(dllexport) int i2c_bus_write(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);

extern "C" __declspec(dllexport) int i2c_bus_read(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);

extern "C" __declspec(dllexport) int spi_bus_write(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);

extern "C" __declspec(dllexport) int spi_bus_read(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);

extern "C" __declspec(dllexport) int smb380_wait_interrupt(unsigned char *mask);

extern "C" __declspec(dllexport) int smb380_deinit();

extern "C" __declspec(dllexport) int smb380_init();


#endif   // __SMB380_H__





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -