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
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 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__
|
||
|
|
||
|
|