#include "sensor.h" #if 1 //def _SC7A20_ /***************���߲���**********************/ INT8 SL_SC7A20_Online_Test(void) { UINT8 SL_Read_Reg = 0xff; GSENSOR_ReadReg(SC7A20_CHIP_ID_ADDRESS, 1, &SL_Read_Reg); printf("SL_Read_Reg = %#x\r\n", SL_Read_Reg); if (SL_Read_Reg == SC7A20_CHIP_ID_VALUE) { return 1; } else { return -1; } } /***************BOOT �����ڲ��Ĵ���ֵ*********************/ INT8 SL_SC7A20_BOOT(void) { UINT8 SL_Read_Reg = 0xff; GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg); SL_Read_Reg = SL_SC7A20_BOOT_ENABLE; //|SL_Read_Reg; GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); return 1; } /***************��������������**********************/ INT8 SL_SC7A20_FS_Config(UINT8 Sc7a20_FS_Reg) { UINT8 SL_Read_Reg = 0xff, SL_Write_Reg; GSENSOR_ReadReg(SL_SC7A20_CTRL_REG4, 1, &SL_Read_Reg); SL_Write_Reg = 0x80 | Sc7a20_FS_Reg | SL_SC7A20_HR_ENABLE; GSENSOR_WriteReg(SL_SC7A20_CTRL_REG4, SL_Write_Reg); GSENSOR_ReadReg(SL_SC7A20_CTRL_REG4, 1, &SL_Read_Reg); if (SL_Read_Reg == SL_Write_Reg) { return 1; } else { return -1; } } #if SL_6D4D2D1D_SEL == 1 //1D //AOI1_INT1 �˶���⣬�˶������ж� 6D�˶���� //AOI2_INT2 λ�ü�⣬����Ƿ��뿪X+λ�� 1Dλ��ʶ�� /***************�ж�����*************/ INT8 SL_SC7A20_INT_Config(void) { UINT8 SL_Read_Reg; /*******************AOI1 IN INT1********************/ SL_Read_Reg = 0x08; //AOI1 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL; //interrupt happen,int pin output lower level GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); //AOI1 CONFIG SL_Read_Reg = 0x00; //0x7F SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg); //HPF SET // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_10PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_2CLK); //AOI1 TO INT1 // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg); SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg); /*******************AOI1 IN INT1********************/ /*******************AOI2 IN INT2********************/ GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); //AOI2 CONFIG SL_Read_Reg = 0x00; //0xFF SL_Read_Reg = SL_Read_Reg | 0xC0; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg); //HPF SET // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); //SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2 // GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_10PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK); //AOI2 TO INT2 GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); /*******************AOI2 IN INT2********************/ return 1; } #elif SL_6D4D2D1D_SEL == 2 //2D //AOI1_INT1 �˶���⣬�˶������ж� ���¼� 3D�˶���� //AOI2_INT2 λ�ü�⣬���X+ �� X- 2Dλ��ʶ�� /***************�ж�����*************/ INT8 SL_SC7A20_INT_Config(void) { UINT8 SL_Read_Reg; /*******************AOI1 IN INT1********************/ SL_Read_Reg = 0x08; //AOI1 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL; //interrupt happen,int pin output lower level GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); //AOI1 CONFIG SL_Read_Reg = 0x00; //0x7F SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x04; //Y ����¼� Y�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg); //HPF SET // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_10PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_2CLK); //AOI1 TO INT1 // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg); SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg); /*******************AOI1 IN INT1********************/ /*******************AOI2 IN INT2********************/ GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); //AOI2 CONFIG SL_Read_Reg = 0x00; //0xFF SL_Read_Reg = SL_Read_Reg | 0xC0; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x04; //Y ����¼� Y�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg); //HPF SET //GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); //SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2 //GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_10PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK); //AOI2 TO INT2 GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); /*******************AOI2 IN INT2********************/ return 1; } #elif SL_6D4D2D1D_SEL == 4 //4D //AOI1_INT1 �˶���⣬�˶������ж� ���¼� 3D�˶���� //AOI2_INT2 λ�ü�⣬���X+ �� X- Y+ �� Y- 4Dλ��ʶ�� /***************�ж�����*************/ INT8 SL_SC7A20_INT_Config(void) { UINT8 SL_Read_Reg; /*******************AOI1 IN INT1********************/ SL_Read_Reg = 0x08; //AOI1 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL; //interrupt happen,int pin output lower level GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); //AOI1 CONFIG SL_Read_Reg = 0x00; //0x7F SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg); //HPF SET // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_10PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_2CLK); //AOI1 TO INT1 // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg); SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg); /*******************AOI1 IN INT1********************/ /*******************AOI2 IN INT2********************/ GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); //AOI2 CONFIG SL_Read_Reg = 0x00; //0xFF SL_Read_Reg = SL_Read_Reg | 0xC0; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg); //HPF SET //GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); // SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2 // GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_10PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK); //AOI2 TO INT2 GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); /*******************AOI2 IN INT2********************/ return 1; } #elif SL_6D4D2D1D_SEL == 6 //6D //AOI1_INT1 �˶���⣬�˶������ж� 6D�˶���� //AOI2_INT2 λ�ü�⣬���X+ �� X- Y+ �� Y- Z+ �� Z- 6Dλ��ʶ�� /***************�ж�����*************/ INT8 SL_SC7A20_INT_Config(void) { UINT8 SL_Read_Reg; /*******************AOI1 IN INT1********************/ SL_Read_Reg = 0x00; //AOI1 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); SL_Read_Reg = SL_SC7A20_INT_ACTIVE_LOWER_LEVEL; //interrupt happen,int pin output lower level GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); //AOI1 CONFIG SL_Read_Reg = 0x00; //0x7F SL_Read_Reg = SL_Read_Reg | 0x00; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x02; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x08; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x20; //Z ��ߵ��¼� Z�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg); //HPF SET // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg); SL_Read_Reg = 0x81; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_20PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_10CLK); //AOI1 TO INT1 // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg); SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg); /*******************AOI1 IN INT1********************/ /*******************AOI2 IN INT2********************/ GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg); //AOI2 CONFIG SL_Read_Reg = 0x00; //0xFF SL_Read_Reg = SL_Read_Reg | 0xc0; //�����˶�ʶ��ģʽ SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ SL_Read_Reg = SL_Read_Reg | 0x30; //Z ��ߵ��¼� Z�����ݵľ���ֵ������ֵ GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg); //HPF SET GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2, 1, &SL_Read_Reg); // SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2 // GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg); //�ж���ֵ���� GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_20PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_10CLK); //AOI2 TO INT2 GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2 GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg); /*******************AOI2 IN INT2********************/ return 1; } #endif /******�ⲿ�жϴ�����������Ҫ���øú���*******/ //retrun_value&0x20=0x20 ZH Z����¼� //retrun_value&0x20=0x10 ZL Z����¼� //retrun_value&0x20=0x08 YH Y����¼� //retrun_value&0x20=0x04 YL Y����¼� //retrun_value&0x20=0x02 XH X����¼� //retrun_value&0x20=0x01 XL X����¼� INT8 SL_SC7A20_INT_RESET(void) { UINT8 SL_Read_Reg1; UINT8 SL_Read_Reg2; /*****Ϊ�˱����ȡ���ݹ������ֲ����жϣ�������ʱ�ر��ж�*****/ //SL_Read_Reg1 display the int1 type GSENSOR_ReadReg(SL_SC7A20_INT1_SRC, 1, &SL_Read_Reg1); //SL_Read_Reg2 display the int2 type GSENSOR_ReadReg(SL_SC7A20_INT2_SRC, 1, &SL_Read_Reg2); //close INT1 GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, 0x00); //close INT2 GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, 0x00); if ((SL_Read_Reg2 & 0x02) == 0x02) { //X+ } if ((SL_Read_Reg2 & 0x01) == 0x01) { //X- } if ((SL_Read_Reg2 & 0x08) == 0x08) { //Y+ } if ((SL_Read_Reg2 & 0x04) == 0x04) { //Y- } if ((SL_Read_Reg2 & 0x20) == 0x20) { //Z+ } if ((SL_Read_Reg2 & 0x10) == 0x10) { //Z- } if (SL_Read_Reg1 != 0 || SL_Read_Reg2 != 0) { return 1; } else { return 0; } } void SL_SC7A20_AOI1_event(void) { UINT8 SL_SRC_Reg1; UINT8 SL_THS_Reg1; UINT8 SL_DURATION_Reg1; //SL_Read_Reg1 display the int1 type GSENSOR_ReadReg(SL_SC7A20_INT1_SRC, 1, &SL_SRC_Reg1); GSENSOR_ReadReg(SL_SC7A20_INT1_THS, 1, &SL_THS_Reg1); GSENSOR_ReadReg(SL_SC7A20_INT1_DURATION, 1, &SL_DURATION_Reg1); printf("SL_SC7A20_INT1_SRC=%#x\r\n", SL_SRC_Reg1); // if((SL_SRC_Reg1&0x40)==0x40){ if ((SL_SRC_Reg1 & 0x01) == 0x01) { //X- printf("X1-\r\n"); } if ((SL_SRC_Reg1 & 0x02) == 0x02) { //X+ printf("X1+\r\n"); } if ((SL_SRC_Reg1 & 0x04) == 0x04) { //Y- printf("Y1-\r\n"); } if ((SL_SRC_Reg1 & 0x08) == 0x08) { //Y+ printf("Y1+\r\n"); } if ((SL_SRC_Reg1 & 0x10) == 0x10) { //Z- printf("Z1-\r\n"); } if ((SL_SRC_Reg1 & 0x20) == 0x20) { //Z+ printf("Z1+\r\n"); } // } } INT8 SL_SC7A20_AOI2_event(void) { UINT8 SL_SRC_Reg2; UINT8 SL_THS_Reg2; UINT8 SL_DURATION_Reg2; //SL_Read_Reg1 display the int1 type GSENSOR_ReadReg(SL_SC7A20_INT2_SRC, 1, &SL_SRC_Reg2); GSENSOR_ReadReg(SL_SC7A20_INT2_THS, 1, &SL_THS_Reg2); GSENSOR_ReadReg(SL_SC7A20_INT2_DURATION, 1, &SL_DURATION_Reg2); printf("SL_SC7A20_INT2_SRC=%#x\r\n", SL_SRC_Reg2); // if((SL_SRC_Reg2&0x40)==0x40){ if ((SL_SRC_Reg2 & 0x01) == 0x01) { //X- printf("X2-\r\n"); } if ((SL_SRC_Reg2 & 0x02) == 0x02) { //X+ printf("X2+\r\n"); } if ((SL_SRC_Reg2 & 0x04) == 0x04) { //Y- printf("Y2-\r\n"); } if ((SL_SRC_Reg2 & 0x08) == 0x08) { //Y+ printf("Y2+\r\n"); } if ((SL_SRC_Reg2 & 0x10) == 0x10) { //Z- printf("Z2-\r\n"); } if ((SL_SRC_Reg2 & 0x20) == 0x20) { //Z+ printf("Z2+\r\n"); } // } } void SL_SC7A20_Reg_read_all(void) { UINT8 SL_Read_Reg; printf("SL_SC7A20_Reg_readall ++++++++\r\n"); /*******************AOI1 IN INT1********************/ UINT8 adr; for (adr = 0x20; adr <= 0x3F; adr++) { GSENSOR_ReadReg(adr, 1, &SL_Read_Reg); printf("%#x = %#x, ", adr, SL_Read_Reg); } printf("SL_SC7A20_Reg_readall --------\r\n"); } /***************���ݸ�������**���ٶȼ�ʹ��**********/ INT8 SL_SC7A20_Power_Config(UINT8 Power_Config_Reg) { UINT8 SL_Read_Reg; #if SL_SC7A20_MTP_ENABLE == 1 SL_Read_Reg = 0x00; GSENSOR_WriteReg(SL_SC7A20_MTP_CFG, SL_SC7A20_MTP_VALUE); GSENSOR_ReadReg(SL_SC7A20_SDOI2C_PU_CFG, 1, &SL_Read_Reg); SL_Read_Reg = SL_Read_Reg | SL_SC7A20_SDO_PU_MSK | SL_SC7A20_I2C_PU_MSK; GSENSOR_WriteReg(SL_SC7A20_SDOI2C_PU_CFG, SL_Read_Reg); GSENSOR_WriteReg(SL_SC7A20_MTP_CFG, 0); #endif SL_Read_Reg = 0xff; GSENSOR_WriteReg(SL_SC7A20_CTRL_REG1, Power_Config_Reg); GSENSOR_ReadReg(SL_SC7A20_CTRL_REG1, 1, &SL_Read_Reg); if (SL_Read_Reg == Power_Config_Reg) { return 1; } else { return -1; } } #if SL_SC7A20_16BIT_8BIT == 0 /***************���ٶȼ����ݶ�ȡ*8bits*********/ INT8 SL_SC7A20_Read_XYZ_Data(INT8 *SL_SC7A20_Data_XYZ_Buf) { UINT8 SL_Read_Buf[7]; GSENSOR_ReadReg(SL_SC7A20_STATUS_REG, 1, &SL_Read_Buf[0]); if ((SL_Read_Buf[0] & 0x0f) == 0x0f) { GSENSOR_ReadReg(SL_SC7A20_DATA_OUT, 6, &SL_Read_Buf[1]); SL_SC7A20_Data_XYZ_Buf[0] = (INT8)SL_Read_Buf[2]; SL_SC7A20_Data_XYZ_Buf[1] = (INT8)SL_Read_Buf[4]; SL_SC7A20_Data_XYZ_Buf[2] = (INT8)SL_Read_Buf[6]; return 1; } else { return 0; } } #elif SL_SC7A20_16BIT_8BIT == 1 /***************���ٶȼ����ݶ�ȡ*16bits*********/ INT8 SL_SC7A20_Read_XYZ_Data(INT16 *SL_SC7A20_Data_XYZ_Buf) { UINT8 SL_Read_Buf[7]; GSENSOR_ReadReg(SL_SC7A20_STATUS_REG, 1, &SL_Read_Buf[0]); if ((SL_Read_Buf[0] & 0x0f) == 0x0f) { for (UINT8 i = 1; i < 7; i++) { GSENSOR_ReadReg(SL_SC7A20_STATUS_REG + i, 1, &SL_Read_Buf[i]); } SL_SC7A20_Data_XYZ_Buf[0] = (INT16)((SL_Read_Buf[2] << 8) + SL_Read_Buf[1]); SL_SC7A20_Data_XYZ_Buf[1] = (INT16)((SL_Read_Buf[4] << 8) + SL_Read_Buf[3]); SL_SC7A20_Data_XYZ_Buf[2] = (INT16)((SL_Read_Buf[6] << 8) + SL_Read_Buf[5]); SL_SC7A20_Data_XYZ_Buf[0] = SL_SC7A20_Data_XYZ_Buf[0] >> 4; SL_SC7A20_Data_XYZ_Buf[1] = SL_SC7A20_Data_XYZ_Buf[1] >> 4; SL_SC7A20_Data_XYZ_Buf[2] = SL_SC7A20_Data_XYZ_Buf[2] >> 4; SL_SC7A20_Data_XYZ_Buf[0] = SL_SC7A20_Data_XYZ_Buf[0] * 2; SL_SC7A20_Data_XYZ_Buf[1] = SL_SC7A20_Data_XYZ_Buf[1] * 2; SL_SC7A20_Data_XYZ_Buf[2] = SL_SC7A20_Data_XYZ_Buf[2] * 2; return 1; } else { return 0; } } #endif void GsensorInit(void) { INT8 res = 0; res = SL_SC7A20_Online_Test(); if (res == 1) { SL_SC7A20_BOOT(); SL_SC7A20_FS_Config(SL_SC7A20_FS_4G); SL_SC7A20_INT_Config(); //SL_SC7A20_INT_RESET(); SL_SC7A20_Power_Config(SL_SC7A20_ODR_400HZ); } } #endif