#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=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�����ݵľ���ֵ������ֵ SL_Read_Reg=SL_Read_Reg|0x30;//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=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_20PERCENT); //������ֵ����ʱ�䴥���ж� GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_30CLK); //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_5PERCENT); //������ֵ����ʱ�䴥���ж� 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; } #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\r\n",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]); #ifdef USING_PRINTF printf("SL_SC7A20_STATUS_REG = %#x\r\n",SL_Read_Buf[0]); #endif if((SL_Read_Buf[0]&0x0f)==0x0f) { GSENSOR_ReadReg(SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]); #ifdef USING_PRINTF printf("SL_SC7A20_DATA_OUT22 = %#x\r\n",SL_Read_Buf[1]); #endif 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]); #ifdef USING_PRINTF printf("SL_SC7A20_DATA_OUT BUF:X = %d,Y = %d,Z = %d\r\n",SL_SC7A20_Data_XYZ_Buf[0],SL_SC7A20_Data_XYZ_Buf[1],SL_SC7A20_Data_XYZ_Buf[2]); #endif 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_LOWER_POWER_ODR_400HZ); } } #endif