#ifndef __SL_SC7A20_DRIVER_H__ #define __SL_SC7A20_DRIVER_H__ #include "PlatformTypes.h" #include "StandardTypes.h" #include "Spi.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 0 /**SC7A20 SPI IIC 选择 SPI: 0****/ /**SC7A20 SPI IIC 选择 IIC: 1****/ /*****************************************/ #define SL_6D4D2D1D_SEL 6 #if SL_SC7A20_SPI_IIC_MODE==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 #endif #define SC7A20_CHIP_ID_ADDRESS (uint8)0x0F #define SC7A20_CHIP_ID_VALUE (uint8)0x11 #define SL_SC7A20_CTRL_REG1 (uint8)0x20 #define SL_SC7A20_CTRL_REG2 (uint8)0x21 #define SL_SC7A20_CTRL_REG3 (uint8)0x22 #define SL_SC7A20_CTRL_REG4 (uint8)0x23 #define SL_SC7A20_CTRL_REG5 (uint8)0x24 #define SL_SC7A20_CTRL_REG6 (uint8)0x25 #define SL_SC7A20_STATUS_REG (uint8)0x27 #define SL_SC7A20_OUT_X_L (uint8)0x28 #define SL_SC7A20_OUT_X_H (uint8)0x29 #define SL_SC7A20_OUT_Y_L (uint8)0x2A #define SL_SC7A20_OUT_Y_H (uint8)0x2B #define SL_SC7A20_OUT_Z_L (uint8)0x2C #define SL_SC7A20_OUT_Z_H (uint8)0x2D #define SL_SC7A20_FIFO_CTRL_REG (uint8)0x2E #define SL_SC7A20_FIFO_SRC_REG (uint8)0x2F #define SL_SC7A20_INT1_CFG (uint8)0x30 #define SL_SC7A20_INT1_SRC (uint8)0x31 #define SL_SC7A20_INT1_THS (uint8)0x32 #define SL_SC7A20_INT1_DURATION (uint8)0x33 #define SL_SC7A20_INT2_CFG (uint8)0x34 #define SL_SC7A20_INT2_SRC (uint8)0x35 #define SL_SC7A20_INT2_THS (uint8)0x36 #define SL_SC7A20_INT2_DURATION (uint8)0x37 #define SL_SC7A20_CLICK_CFG (uint8)0x38 #define SL_SC7A20_CLICK_SRC (uint8)0x39 #define SL_SC7A20_CLICK_THS (uint8)0x3A #define SL_SC7A20_TIME_LIMIT (uint8)0x3B #define SL_SC7A20_TIME_LATENCY (uint8)0x3C #define SL_SC7A20_TIME_WINDOW (uint8)0x3D #define SL_SC7A20_ACT_THS (uint8)0x3E #define SL_SC7A20_ACT_DURATION (uint8)0x3F /*连续读取数据时的数据寄存器地址*/ #define SL_SC7A20_DATA_OUT (uint8)(SL_SC7A20_OUT_X_L) /**********特殊功能寄存器**********/ /*非原厂技术人员请勿修改*/ #define SL_SC7A20_MTP_ENABLE 0x00 #define SL_SC7A20_MTP_CFG (uint8)0x1E #define SL_SC7A20_MTP_VALUE (uint8)0x05 #define SL_SC7A20_SDOI2C_PU_CFG (uint8)0x57 #define SL_SC7A20_SDO_PU_MSK (uint8)0x08 #define SL_SC7A20_I2C_PU_MSK (uint8)0x04 #define SL_SC7A20_HR_ENABLE (uint8)0X08 #define SL_SC7A20_BOOT_ENABLE (uint8)0X80 /*非原厂技术人员请勿修改*/ /***************数据更新速率**加速度计使能**********/ #define SL_SC7A20_ODR_POWER_DOWN (uint8)0x00 #define SL_SC7A20_ODR_1HZ (uint8)0x17 #define SL_SC7A20_ODR_10HZ (uint8)0x27 #define SL_SC7A20_ODR_25HZ (uint8)0x37 #define SL_SC7A20_ODR_50HZ (uint8)0x47 #define SL_SC7A20_ODR_100HZ (uint8)0x57 #define SL_SC7A20_ODR_200HZ (uint8)0x67 #define SL_SC7A20_ODR_400HZ (uint8)0x77 #define SL_SC7A20_ODR_1600HZ (uint8)0x87 #define SL_SC7A20_ODR_1250HZ (uint8)0x97 #define SL_SC7A20_ODR_5000HZ (uint8)0x9F #define SL_SC7A20_LOWER_POWER_ODR_1HZ (uint8)0x1F #define SL_SC7A20_LOWER_POWER_ODR_10HZ (uint8)0x2F #define SL_SC7A20_LOWER_POWER_ODR_25HZ (uint8)0x3F #define SL_SC7A20_LOWER_POWER_ODR_50HZ (uint8)0x4F #define SL_SC7A20_LOWER_POWER_ODR_100HZ (uint8)0x5F #define SL_SC7A20_LOWER_POWER_ODR_200HZ (uint8)0x6F #define SL_SC7A20_LOWER_POWER_ODR_400HZ (uint8)0x7F /***************数据更新速率**加速度计使能**********/ /***************传感器量程设置**********************/ #define SL_SC7A20_FS_2G (uint8)0x00 #define SL_SC7A20_FS_4G (uint8)0x10 #define SL_SC7A20_FS_8G (uint8)0x20 #define SL_SC7A20_FS_16G (uint8)0x30 /***************传感器量程设置**********************/ /***取值在0-127之间,此处仅举例****/ #define SL_SC7A20_INT_THS_5PERCENT (uint8)0x06 #define SL_SC7A20_INT_THS_10PERCENT (uint8)0x0C #define SL_SC7A20_INT_THS_20PERCENT (uint8)0x18 #define SL_SC7A20_INT_THS_40PERCENT (uint8)0x30 #define SL_SC7A20_INT_THS_80PERCENT (uint8)0x60 /***取值在0-127之间,此处仅举例 乘以ODR单位时间****/ #define SL_SC7A20_INT_DURATION_2CLK (uint8)0x02 #define SL_SC7A20_INT_DURATION_5CLK (uint8)0x05 #define SL_SC7A20_INT_DURATION_10CLK (uint8)0x0A #define SL_SC7A20_INT_DURATION_30CLK (uint8)0x2E /***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/ #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接口封包函数****************/ Std_ReturnType Gsensor_SPI_Write(uint8 Addr,uint8 *DataBufferPtr,uint16 Length); Std_ReturnType Gsensor_SPI_Read(uint8 Addr,uint8 *DataBufferPtr,uint16 Length); /**Gsensor_SPI_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 data:寄存器的配置值******************/ /**Gsensor_SPI_Write 函数 是一个单次写的函数*******************************************************************/ /***Gsensor_SPI_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/ /***Gsensor_SPI_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/ /*** 客户IIC函数封装举例 uint8 SL_MEMS_i2c_spi_Write(uint8 reg, uint8 data) { i2cWrite(SC7A20_IIC_ADDRESS, reg, data); //由客户的II函数接口决定 return 1; } uint8 SL_MEMS_i2c_spi_Read(uint8 reg, uint8 len, uint8 *buf) { i2cRead( SC7A20_IIC_ADDRESS, reg, len, buf);//由客户的II函数接口决定 return 1; } ***/ Std_ReturnType SL_SC7A20_Online_Test(void); Std_ReturnType SL_SC7A20_BOOT(void); Std_ReturnType SL_SC7A20_INT_Config(void); Std_ReturnType SL_SC7A20_INT_RESET(void); Std_ReturnType SL_SC7A20_FS_Config(uint8 Sc7a20_FS_Reg); Std_ReturnType SL_SC7A20_Power_Config(uint8 Power_Config_Reg); Std_ReturnType SL_SC7A20_Read_XYZ_Data(sint16 *SL_SC7A20_Data_XYZ_Buf); void SL_SC7A20_AOI1_event(void); void SL_SC7A20_AOI2_event(void); void SL_SC7A20_Reg_read_all(void); Std_ReturnType GsensorInit(void); //步骤如下: //0.signed char SL_SC7A20_BOOT(void); //1.signed char SL_SC7A20_Online_Test(void); //2.signed char SL_SC7A20_FS_Config(uint8 Sc7a20_FS_Reg); //3.signed char SL_SC7A20_Power_Config(uint8 Power_Config_Reg); //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); #endif /* __SL_SC7A20_DRIVER_H */