first commit

This commit is contained in:
minidso
2016-04-30 20:56:50 +05:00
commit 4d014816a7
141 changed files with 77255 additions and 0 deletions

268
S100App/Src/MMA8652FC.c Normal file
View File

@@ -0,0 +1,268 @@
/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
File Name : MMA8652FC.c
Version : S100 APP Ver 2.11
Description:
Author : Celery
Data: 2015/07/07
History:
2015/07/07 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#include "APP_Version.h"
#include "Bios.h"
#include "Oled.h"
#include "MMA8652FC.h"
#include "I2C.h"
#include "CTRL.h"
#include "UI.h"
//------------------------------------------------------------------//
static int IIC_RegWrite(u8 reg,u8 data);
static int IIC_RegRead(u8 reg);
static int Read_ZYXDr(void);
u16 gactive = 0,gShift = 0;
u8 gMmatxdata;
typedef struct {
u8 hi;
u8 lo;
} DRByte;
typedef struct {
DRByte Byte;
} DR_Value;
DR_Value gX_value,gY_value,gZ_value;
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD>״̬
*******************************************************************************/
u16 Get_MmaActive(void)
{
return gactive;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
*******************************************************************************/
u16 Get_MmaShift(void)
{
return gShift;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
*******************************************************************************/
void Set_MmaShift(u16 shift)
{
gShift = shift;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegWrite
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>Reg<65><67>ַд<D6B7><D0B4>Data
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Reg <20><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ַ<EFBFBD><D6B7>Data<74><61><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD>
*******************************************************************************/
int IIC_RegWrite(u8 reg,u8 data)
{
u8 tx_data[20];
tx_data[0]=reg;
tx_data[1]=data;
I2C_PageWrite(tx_data,2,DEVICE_ADDR);
return 1;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegRead
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Reg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Reg <20><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>gMmatxdata<74><61>
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD>
*******************************************************************************/
int IIC_RegRead(u8 reg)
{
u8 tx_data[20];
tx_data[0] = reg;
I2C_PageRead(tx_data, 1, DEVICE_ADDR, reg);
gMmatxdata = tx_data[0];
return 1;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: MMA865x_Standby
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
void MMA865x_Standby(void)
{
//Put the sensor into Standby Mode by clearing
// the Active bit of the System Control 1 Register
IIC_RegWrite(CTRL_REG1, 0); //(IIC_RegRead(CTRL_REG1) & ~ ACTIVE_MASK)
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: MMA865x_Active
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
void MMA865x_Active(void)
{
// Put the sensor into Active Mode by setting the
// Active bit of the System Control 1 Register
IIC_RegWrite(CTRL_REG1,ACTIVE_MASK );//(IIC_RegRead(CTRL_REG1) | ACTIVE_MASK)
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegRead
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Reg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
void StartUp_Accelerated(void)
{
//------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬-----------------------//
MMA865x_Standby();
//---- <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Χ4g----------------------//
IIC_RegWrite(XYZ_DATA_CFG_REG,FULL_SCALE_8G );//(IIC_RegRead(XYZ_DATA_CFG_REG) & ~FS_MASK)
//--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100HZ------------------------------------//
IIC_RegWrite(CTRL_REG1, DataRateValue); //IIC_RegRead(CTRL_REG1)|
//----<2D><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ------------------------------------------------------//
IIC_RegWrite(CTRL_REG2, 0);//(IIC_RegRead(CTRL_REG2) & ~MODS_MASK)
//---------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ------------------------------------//
MMA865x_Active();
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Read_ZYXDr
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡXYZ<59><5A><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:x,y,z<>ķ<EFBFBD><C4B7><EFBFBD>
*******************************************************************************/
int Read_ZYXDr(void)
{
u8 reg_flag;
u8 ptr,i;
u8 value[6];
memset((u8*)&gX_value,0,6);
//Poll the ZYXDR status bit and wait for it to set
if(IIC_RegRead(STATUS_REG)) {
reg_flag = gMmatxdata ;
if((reg_flag & ZYXDR_BIT) !=0) {
//Read 12/10-bit XYZ results using a 6 byte IIC access
ptr=X_MSB_REG;
for(i=0; i<6; i++) {
if(IIC_RegRead(ptr++)==0)break;
value[i]=gMmatxdata ;
//Copy and save each result as a 16-bit left-justified value
gX_value.Byte.hi = value[0];
gX_value.Byte.lo = value[1];
gY_value.Byte.hi = value[2];
gY_value.Byte.lo = value[3];
gZ_value.Byte.hi = value[4];
gZ_value.Byte.lo = value[5];
return 1;
}
} else
return 0;
}
return 0;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Cheak_XYData
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>x<EFBFBD><78>y<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һxy<78><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xy<78><79><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>
*******************************************************************************/
u16 Cheak_XYData(u16 x0,u16 y0,u16 x1,u16 y1)
{
u16 active = 0;
gShift = 0;
if((x1 > (x0 + 16)) || (x1 < (x0 - 16))) active = 1;
if((y1 > (y0 + 16)) || (y1 < (y0 - 16))) active = 1;
if((x1 > (x0 + 32)) || (x1 < (x0 - 32))) gShift = 1;
if((y1 > (y0 + 32)) || (y1 < (y0 - 32))) gShift = 1;
return active;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_X
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>x
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
u16 Update_X(void)
{
u16 value,x;
value = ((gX_value.Byte.hi<<8) | (gX_value.Byte.lo & 0xf0 ))>>4;
if(gX_value.Byte.hi>0x7f) x = (~value+1) & 0xfff;
else x = value & 0xfff;
return x;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_Y
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>y
*******************************************************************************/
u16 Update_Y(void)
{
u16 value,y;
value = ((gY_value.Byte.hi<<8) | (gY_value.Byte.lo & 0xf0 ))>>4;
if(gY_value.Byte.hi>0x7f) y = (~value+1) & 0xfff;
else y = value & 0xfff;
return y;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_z
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>z
*******************************************************************************/
u16 Update_Z(void)
{
u16 value,z;
value = ((gZ_value.Byte.hi<<8) | (gZ_value.Byte.lo & 0xf0 ))>>4;
if(gZ_value.Byte.hi>0x7f) z = (~value+1) & 0xfff;
else z = value & 0xfff;
return z;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Check_Accelerated
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
void Check_Accelerated(void)
{
static u16 x0 = 0,y0 = 0;
u16 x1,y1;
if(Read_ZYXDr()) { /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
x1 = Update_X();
y1 = Update_Y();
} else x1 = x0;
y1 = y0;
gactive = Cheak_XYData(x0,y0,x1,y1);/*<2A><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>*/
x0 = x1;
y0 = y1;
}
/******************************** END OF FILE *********************************/