#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 */