#ifndef __bsp_sca720_H__ #define __bsp_sca720_H__ #include "msp_iicM1.h" #define SC7A20_SLAVE_ID 0x32//0x4E ,erichan 20150529 #define G_SlaveAddr SC7A20_SLAVE_ID /***使用驱动前请根据实际接线情况配置******/ /**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 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 #if 0 #define P_SENSITIVE_LOW 0x60 #define P_SENSITIVE_MID 0x38 #define P_SENSITIVE_HIGH 0x10 #define DMT_SENSITIVE_LOW 0xB0 #define DMT_SENSITIVE_MID 0x60 #define DMT_SENSITIVE_HIGH 0x20 //========================================== // SC7A20 Register //========================================== #define SOFT_RESET 0x00 //#define CHIPID 0x01 #define CHIPID 0x0f// erichan 20150529 #define ACC_X_LSB 0x02 #define ACC_X_MSB 0x03 #define ACC_Y_LSB 0x04 #define ACC_Y_MSB 0x05 #define ACC_Z_LSB 0x06 #define ACC_Z_MSB 0x07 #define MOTION_FLAG 0x09 #define NEWDATA_FLAG 0x0A #define TAP_ACTIVE_STATUS 0x0B #define RESOLUTION_RANGE 0x0F // Resolution bit[3:2] -- 00:14bit // 01:12bit // 10:10bit // 11:8bit // FS bit[1:0] -- 00:+/-2g // 01:+/-4g // 10:+/-8g // 11:+/-16g #define ODR_AXIS 0x10 #define MODE_BW 0x11 #define SWAP_POLARITY 0x12 #define INT_SET1 0x16 #define INT_SET2 0x17 #define INT_MAP1 0x19 #define INT_MAP2 0x1A #define INT_CONFIG 0x20 #define CHIPID 0x0f #define INT_LATCH 0x21 #define FREEFALL_DUR 0x22 #define FREEFALL_THS 0x23 #define FREEFALL_HYST 0x24 #define ACTIVE_DUR 0x27 #define ACTIVE_THS 0x28 #define TAP_DUR 0x2A #define TAP_THS 0x2B #define ORIENT_HYST 0x2C #define Z_BLOCK 0x2D #define SELF_TEST 0x32 #define ENGINEERING_MODE 0x7f #endif //========================================================== extern void G_Sensor_SC7A20_Init(INT8U level); extern void SC7A20_Enter_Interrupt_WakeUp_Mode(INT8U level); extern void ap_gsensor_set_sensitive(INT8U Gsensor); extern void G_Sensor_Init(INT8U level); extern void G_Sensor_park_mode_init(INT8U level); extern void G_sensor_clear_int_flag(void); extern INT16U G_sensor_get_int_active(void); extern void ap_gsensor_power_on_set_status(INT8U status); extern INT8U ap_gsensor_power_on_get_status(void); #if 0 #define g_sensor_write(x,y,z); {ts_siic[D_IIC_GSENSOR].sal = x; L1_iicx_Write2Reg(&ts_siic[D_IIC_GSENSOR],y,z);} #define g_sensor_write_add(y,z); L1_iicx_Write2Reg(&ts_siic[D_IIC_GSENSOR],y,(z)); #define g_sensor_read(x,y) L2_iicx_Read1Reg1DataR(&ts_siic[D_IIC_GSENSOR],y) #define Sensor_Read_Byte(x,y) L2_iicx_Read1Reg1Data(&ts_siic[D_IIC_GSENSOR],x,(y)) #else #endif extern void G_Sensor_SC7A20_Init2 (u8 *Acc_Int_Thr); ///extern void g_sensor_write(INT8U id, INT8U addr, INT8U data); ///extern INT16U g_sensor_read(INT8U id, INT8U addr); ///g_sensor_read ///temp1 = g_sensor_read(G_SlaveAddr,CHIPID); ///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ///1e 30 ///3f 63 33 #define D_0x1e 0x1e typedef struct { u8 reg[34];//0x1e u8 staus; u8 ff_temp; u8 ff; u8 got; U32 n; U32 stamp; S16 x,y,z; }TS_sca720_; extern TS_sca720_ ts_gs7; ///1e 30 ///3f 63 33 #define D_SC7A20_OUT_TEMP_L 0x0c #define D_SC7A20_OUT_TEMP_H 0x0D #define D_SC7A20_WHO_AM_I 0x0F #define CHIPID D_SC7A20_WHO_AM_I #define D_SC7A20_NVM_WR 0x1E ////rw 001 1110 00000000 #define D_SC7A20_TEMP_CFG 0x1F ////rw 001 1111 output #define D_SC7A20_CTRL_REG1 0x20 ////rw 010 0000 00000111 #define D_SC7A20_CTRL_REG2 0x21 ////rw 010 0001 00000000 #define D_SC7A20_CTRL_REG3 0x22 ////rw 010 0010 00000000 #define D_SC7A20_CTRL_REG4 0x23 ////rw 010 0011 00000000 #define D_SC7A20_CTRL_REG5 0x24 ////rw 010 0100 00000000 #define D_SC7A20_CTRL_REG6 0x25 ////rw 010 0101 00000000 #define D_SC7A20_REFERENCE 0x26 ////rw 010 0110 00000000 #define D_SC7A20_STATUS_REG 0x27 ////rw 010 0111 00000000 #define D_SC7A20_OUT_X_L 0x28 ////r 010 1000 output #define D_SC7A20_OUT_X_H 0x29 ////r 010 1001 output #define D_SC7A20_OUT_Y_L 0x2A ////r 010 1010 output #define D_SC7A20_OUT_Y_H 0x2B ////r 010 1011 output #define D_SC7A20_OUT_Z_L 0x2C ////r 010 1100 output #define D_SC7A20_OUT_Z_H 0x2D ////r 010 1101 output #define D_SC7A20_FIFO_CTRL_REG 0x2E ////rw 010 1110 00000000 #define D_SC7A20_FIFO_SRC_REG 0x2F ////r 010 1111 #define D_SC7A20_INT1_CFG 0x30 ////rw 011 0000 00000000 #define D_SC7A20_INT1_SOURCE 0x31 ////r 011 0001 00000000 #define D_SC7A20_INT1_THS 0x32 ////rw 011 0010 00000000 #define D_SC7A20_INT1_DURATION 0x33 ////rw 011 0011 00000000 #define D_SC7A20_INT2_CFG 0x34 ////rw 011 010000000000 #define D_SC7A20_INT2_SOURCE 0x35 ////r 011 0101 00000000 #define D_SC7A20_INT2_THS 0x36 ////rw 011 0110 00000000 #define D_SC7A20_INT2_DURATION 0x37 ////rw 011 0111 00000000 #define D_SC7A20_CLICK_CFG 0x38 ////rw 011 1000 00000000 #define D_SC7A20_CLICK_SRC 0x39 ////r 011 1001 00000000 #define D_SC7A20_CLICK_THS 0x3A ////rw 011 1010 00000000 #define D_SC7A20_TIME_LIMIT 0x3B ////rw 011 1011 00000000 #define D_SC7A20_TIME_LATENCY 0x3C ////rw 011 110000000000 #define D_SC7A20_TIME_WINDOW 0x3D ////rw 011 1101 00000000 #define D_SC7A20_ACT_THS 0x3E ////rw 011 1110 #define D_SC7A20_ACT_DURATION 0x3F ////rw 011 1111 #define D_SC7A20_ADD_INC 0x80 ////1000 ////0010 ////1010 //reg4 23h #define D_BDU BITN7 #define D_FS_2G 0///,(BITN5|BITN4) #define D_FS_4G (BITN4) #define D_FS_8G (BITN5) #define D_HR (BITN3) /*** 12.3 控制寄存器 3(22h) B7 B6 B5 B4 B3 B2 B1 B0 I1_CLICK I1_AOI1 I1_AOI2 I1_DRDY1 I1_DRDY2 HI1_WTM I1_OVERRUN -- I1_CLICK CLICK 中断在 INT1 上。默认值:0 (0:禁止; 1:使能) I1_AOI1 AOI1 中断在 on INT1。 默认值:0 (0:禁止; 1:使能) I1_AOI2 AOI2 中断在 INT1 上。默认值:0 (0:禁止; 1:使能) I1_DRDY1 DRDY1 中断在 INT1 上。默认值:0 (0:禁止; 1:使能) I1_DRDY2 DRDY2 中断在 INT1 上。默认值:0 (0:禁止; 1:使能) I1_WTM FIFO 水印中断在 INT1 上。默认值:0 (0:禁止; 1:使能) I1_OVERRUN FIFO 溢出中断在 INT1 上。默认值:0 (0:禁止; 1:使能) ***/ #define D_REG3_I1_CLICK BITN7 #define D_REG3_I1_AOI1 BITN6 #define D_REG3_I1_AOI2 BITN5 #define D_REG3_I1_DRDY1 BITN4 #define D_REG3_I1_DRDY2 BITN3 #define D_REG3_I1_WTM BITN2 #define D_REG3_I1_OVERRUN BITN1 /*** 12.6 控制寄存器 6(25h) B7 B6 B5 B4 B3 B2 B1 B0 I2_CLICK I2_INT1 I2_INT2 BOOT_I2 0 -- H_LACTIVE -- I2_CLICK CLICK 中断在 INT2 上。默认值:0 (0:禁止; 1:使能) I2_INT1 AOI2 中断在 on INT1。 默认值:0 (0:禁止; 1:使能) I2_INT2 AOI2 中断在 on INT2。 默认值:0 (0:禁止; 1:使能) BOOT_I2 BOOT 状态在 INT2 上。 默认值:0 (0:禁止; 1:使能) H_LACTIVE 0:高电平触发中断;1:低电平触发中断 ***/ #define D_REG6_I2_CLICK BITN7 #define D_REG6_I1_INT1 BITN6 #define D_REG6_I1_INT2 BITN5 #define D_REG6_BOOT_I2 BITN4 #define D_REG6_0 BITN3 ///#define D_REG3_I1_WTM BITN2 #define D_REG6_H_LACTIVE BITN1 ///#define g_sensor_write(x,y,z) L2_IICM1_WriteCmd(D_cmd_filter_GSensor,x,y) #define g_sensor_write_add(reg,cmd) L2_IICM1_WriteCmd(G_SlaveAddr,reg,cmd) /// g_sensor_write_add(0x38,0x00); #define g_sensor_read(sla,reg) L2_IICM1_Read1Reg1D(sla,reg) /// x = g_sensor_read(G_SlaveAddr, 0x29); //erichan 20150529 #define Sensor_Read_Byte(reg,d) L2_IICM1_ReadReg(G_SlaveAddr,reg,(d),1) ///Sensor_Read_Byte(CHIPID,&temp1); #define D_cmd_filter_GSensor 0xfc extern void L3_GSensor_setPara(u8 filter); extern void L1_SC7A20_Init(u8 *Acc_Int_Thr); extern void L2_SC7A20_Freefall_Status(void); extern void L1_SC7A20_xyz(void); #define Sensor_Write_Byte g_sensor_write_add #define DBG_PRINT printf #endif///#ifndef __bsp_sca720_H__