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.

400 lines
12 KiB

1 year ago
#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 01
***/
#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__