You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
8.5 KiB
208 lines
8.5 KiB
1 year ago
|
#ifndef __SL_SC7A20_FREEFALL_DRIVER_H__
|
||
|
#define __SL_SC7A20_FREEFALL_DRIVER_H__
|
||
|
|
||
|
|
||
|
/***使用驱动前请根据实际接线情况配置******/
|
||
|
/**SC7A20的SDO 脚接地: 0****************/
|
||
|
/**SC7A20的SDO 脚接电源:1****************/
|
||
|
#define SC7A20_SDO_VDD_GND 1
|
||
|
/*****************************************/
|
||
|
|
||
|
/***使用驱动前请根据实际IIC情况进行配置***/
|
||
|
/**SC7A20的IIC 接口地址类型 7bits: 0****/
|
||
|
/**SC7A20的IIC 接口地址类型 8bits: 1****/
|
||
|
#define SC7A20_IIC_7BITS_8BITS 0
|
||
|
/*****************************************/
|
||
|
|
||
|
#define SL_SC7A20_16BIT_8BIT 1
|
||
|
/**SC7A20的数据位数选择 16bits: 1****/
|
||
|
/**SC7A20的数据位数选择 8bits: 0****/
|
||
|
/*****************************************/
|
||
|
|
||
|
#define SL_SC7A20_SPI_IIC_MODE 1
|
||
|
/**SC7A20 SPI IIC 选择 SPI: 0****/
|
||
|
/**SC7A20 SPI IIC 选择 IIC: 1****/
|
||
|
/*****************************************/
|
||
|
|
||
|
|
||
|
#if SC7A20_SDO_VDD_GND==0
|
||
|
#define SC7A20_IIC_7BITS_ADDR 0x18
|
||
|
#define SC7A20_IIC_8BITS_ADDR 0x30
|
||
|
#else
|
||
|
#define SC7A20_IIC_7BITS_ADDR 0x19
|
||
|
#define SC7A20_IIC_8BITS_ADDR 0x32
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#if SC7A20_IIC_7BITS_8BITS==0
|
||
|
#define SC7A20_IIC_ADDRESS SC7A20_IIC_7BITS_ADDR
|
||
|
#else
|
||
|
#define SC7A20_IIC_ADDRESS SC7A20_IIC_8BITS_ADDR
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define SC7A20_CHIP_ID_ADDRESS (unsigned char)0x0F
|
||
|
#define SC7A20_CHIP_ID_VALUE (unsigned char)0x11
|
||
|
|
||
|
#define SL_SC7A20_CTRL_REG1 (unsigned char)0x20
|
||
|
#define SL_SC7A20_CTRL_REG2 (unsigned char)0x21
|
||
|
#define SL_SC7A20_CTRL_REG3 (unsigned char)0x22
|
||
|
#define SL_SC7A20_CTRL_REG4 (unsigned char)0x23
|
||
|
#define SL_SC7A20_CTRL_REG5 (unsigned char)0x24
|
||
|
#define SL_SC7A20_CTRL_REG6 (unsigned char)0x25
|
||
|
|
||
|
#define SL_SC7A20_STATUS_REG (unsigned char)0x27
|
||
|
|
||
|
#define SL_SC7A20_OUT_X_L (unsigned char)0x28
|
||
|
#define SL_SC7A20_OUT_X_H (unsigned char)0x29
|
||
|
#define SL_SC7A20_OUT_Y_L (unsigned char)0x2A
|
||
|
#define SL_SC7A20_OUT_Y_H (unsigned char)0x2B
|
||
|
#define SL_SC7A20_OUT_Z_L (unsigned char)0x2C
|
||
|
#define SL_SC7A20_OUT_Z_H (unsigned char)0x2D
|
||
|
|
||
|
#define SL_SC7A20_FIFO_CTRL_REG (unsigned char)0x2E
|
||
|
#define SL_SC7A20_FIFO_SRC_REG (unsigned char)0x2F
|
||
|
|
||
|
#define SL_SC7A20_INT1_CFG (unsigned char)0x30
|
||
|
#define SL_SC7A20_INT1_SRC (unsigned char)0x31
|
||
|
#define SL_SC7A20_INT1_THS (unsigned char)0x32
|
||
|
#define SL_SC7A20_INT1_DURATION (unsigned char)0x33
|
||
|
|
||
|
#define SL_SC7A20_INT2_CFG (unsigned char)0x34
|
||
|
#define SL_SC7A20_INT2_SRC (unsigned char)0x35
|
||
|
#define SL_SC7A20_INT2_THS (unsigned char)0x36
|
||
|
#define SL_SC7A20_INT2_DURATION (unsigned char)0x37
|
||
|
#define SL_SC7A20_CLICK_CFG (unsigned char)0x38
|
||
|
#define SL_SC7A20_CLICK_SRC (unsigned char)0x39
|
||
|
#define SL_SC7A20_CLICK_THS (unsigned char)0x3A
|
||
|
#define SL_SC7A20_TIME_LIMIT (unsigned char)0x3B
|
||
|
#define SL_SC7A20_TIME_LATENCY (unsigned char)0x3C
|
||
|
#define SL_SC7A20_TIME_WINDOW (unsigned char)0x3D
|
||
|
#define SL_SC7A20_ACT_THS (unsigned char)0x3E
|
||
|
#define SL_SC7A20_ACT_DURATION (unsigned char)0x3F
|
||
|
|
||
|
/*连续读取数据时的数据寄存器地址*/
|
||
|
#define SL_SC7A20_DATA_OUT (unsigned char)(SL_SC7A20_OUT_X_L|0x80)
|
||
|
|
||
|
/**********特殊功能寄存器**********/
|
||
|
/*非原厂技术人员请勿修改*/
|
||
|
#define SL_SC7A20_MTP_ENABLE 0x00
|
||
|
#define SL_SC7A20_MTP_CFG (unsigned char)0x1E
|
||
|
#define SL_SC7A20_MTP_VALUE (unsigned char)0x05
|
||
|
#define SL_SC7A20_SDOI2C_PU_CFG (unsigned char)0x57
|
||
|
#define SL_SC7A20_SDO_PU_MSK (unsigned char)0x08
|
||
|
#define SL_SC7A20_I2C_PU_MSK (unsigned char)0x04
|
||
|
#define SL_SC7A20_HR_ENABLE (unsigned char)0X08
|
||
|
#define SL_SC7A20_BOOT_ENABLE (unsigned char)0X80
|
||
|
/*非原厂技术人员请勿修改*/
|
||
|
|
||
|
|
||
|
/***************数据更新速率**加速度计使能**********/
|
||
|
#define SL_SC7A20_ODR_POWER_DOWN (unsigned char)0x00
|
||
|
#define SL_SC7A20_ODR_1HZ (unsigned char)0x17
|
||
|
#define SL_SC7A20_ODR_10HZ (unsigned char)0x27
|
||
|
#define SL_SC7A20_ODR_25HZ (unsigned char)0x37
|
||
|
#define SL_SC7A20_ODR_50HZ (unsigned char)0x47
|
||
|
#define SL_SC7A20_ODR_100HZ (unsigned char)0x57
|
||
|
#define SL_SC7A20_ODR_200HZ (unsigned char)0x67
|
||
|
#define SL_SC7A20_ODR_400HZ (unsigned char)0x77
|
||
|
#define SL_SC7A20_ODR_1600HZ (unsigned char)0x87
|
||
|
#define SL_SC7A20_ODR_1250HZ (unsigned char)0x97
|
||
|
#define SL_SC7A20_ODR_5000HZ (unsigned char)0x9F
|
||
|
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_1HZ (unsigned char)0x1F
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_10HZ (unsigned char)0x2F
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_25HZ (unsigned char)0x3F
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_50HZ (unsigned char)0x4F
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_100HZ (unsigned char)0x5F
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_200HZ (unsigned char)0x6F
|
||
|
#define SL_SC7A20_LOWER_POWER_ODR_400HZ (unsigned char)0x7F
|
||
|
/***************数据更新速率**加速度计使能**********/
|
||
|
|
||
|
|
||
|
/***************传感器量程设置**********************/
|
||
|
#define SL_SC7A20_FS_2G (unsigned char)0x00
|
||
|
#define SL_SC7A20_FS_4G (unsigned char)0x10
|
||
|
#define SL_SC7A20_FS_8G (unsigned char)0x20
|
||
|
#define SL_SC7A20_FS_16G (unsigned char)0x30
|
||
|
/***************传感器量程设置**********************/
|
||
|
|
||
|
|
||
|
/***取值在0-127之间,此处仅举例****/
|
||
|
#define SL_SC7A20_INT1_THS_5PERCENT (unsigned char)0x06
|
||
|
#define SL_SC7A20_INT1_THS_10PERCENT (unsigned char)0x0C
|
||
|
#define SL_SC7A20_INT1_THS_20PERCENT (unsigned char)0x18
|
||
|
#define SL_SC7A20_INT1_THS_40PERCENT (unsigned char)0x30
|
||
|
#define SL_SC7A20_INT1_THS_80PERCENT (unsigned char)0x60
|
||
|
|
||
|
|
||
|
/***取值在0-127之间,此处仅举例 乘以ODR单位时间****/
|
||
|
#define SL_SC7A20_INT1_DURATION_2CLK (unsigned char)0x02
|
||
|
#define SL_SC7A20_INT1_DURATION_5CLK (unsigned char)0x05
|
||
|
#define SL_SC7A20_INT1_DURATION_10CLK (unsigned char)0x0A
|
||
|
|
||
|
/***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/
|
||
|
#define SL_SC7A20_INT_ACTIVE_LOWER_LEVEL 0x02 //0x02:中断时INT1脚输出 低电平
|
||
|
#define SL_SC7A20_INT_ACTIVE_HIGH_LEVEL 0x00 //0x00:中断时INT1脚输出 高电平
|
||
|
|
||
|
/***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/
|
||
|
#define SL_SC7A20_INT_AOI1_INT1 0x40 //AOI1 TO INT1
|
||
|
#define SL_SC7A20_INT_AOI2_INT1 0x20 //AOI2 TO INT1
|
||
|
|
||
|
/********客户需要进行的IIC接口封包函数****************/
|
||
|
extern unsigned char SL_SC7A20_I2c_Spi_Write(unsigned char sl_spi_iic,unsigned char reg, unsigned char dat);
|
||
|
extern unsigned char SL_SC7A20_I2c_Spi_Read(unsigned char sl_spi_iic,unsigned char reg, unsigned char len, unsigned char *buf);
|
||
|
/**SL_SC7A20_I2c_Spi_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 data:寄存器的配置值******************/
|
||
|
/**SL_SC7A20_I2c_Spi_Write 函数 是一个单次写的函数*******************************************************************/
|
||
|
/***SL_SC7A20_I2c_Spi_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/
|
||
|
/***SL_SC7A20_I2c_Spi_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/
|
||
|
|
||
|
|
||
|
|
||
|
/*** 客户IIC函数封装举例
|
||
|
unsigned char SL_MEMS_i2c_spi_Write(unsigned char reg, unsigned char data)
|
||
|
{
|
||
|
i2cWrite(SC7A20_IIC_ADDRESS, reg, data); //由客户的II函数接口决定
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
unsigned char SL_MEMS_i2c_spi_Read(unsigned char reg, unsigned char len, unsigned char *buf)
|
||
|
{
|
||
|
i2cRead( SC7A20_IIC_ADDRESS, reg, len, buf);//由客户的II函数接口决定
|
||
|
return 1;
|
||
|
}
|
||
|
***/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
signed char SL_SC7A20_Online_Test(void);
|
||
|
signed char SL_SC7A20_BOOT(void);
|
||
|
signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg);
|
||
|
signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg);
|
||
|
signed char SL_SC7A20_FreeFall_Config(void);
|
||
|
|
||
|
#if SL_SC7A20_16BIT_8BIT==0
|
||
|
signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf);
|
||
|
#elif SL_SC7A20_16BIT_8BIT==1
|
||
|
signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf);
|
||
|
#endif
|
||
|
signed char SL_SC7A20_Freefall_Status(void);
|
||
|
|
||
|
|
||
|
|
||
|
//步骤如下:
|
||
|
//0.signed char SL_SC7A20_BOOT(void);
|
||
|
//1.signed char SL_SC7A20_Online_Test(void);
|
||
|
//2.signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg);
|
||
|
//3.signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg);
|
||
|
//4.signed char SL_SC7A20_FreeFall_Config(void);
|
||
|
//6.signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf);
|
||
|
//6.signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf);
|
||
|
//7.signed char SL_SC7A20_Freefall_Status(void);
|
||
|
#endif /* __SL_SC7A20_DRIVER_H */
|
||
|
|