mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Convert original source to system workbench
Create readme Started commenting the files in english NO Optimisations yet, just trying to get it all working over as is first Using newer STM StdPeriph libs (i think they are newer?)
This commit is contained in:
264
workspace/ts100/src/MMA8652FC.c
Normal file
264
workspace/ts100/src/MMA8652FC.c
Normal file
@@ -0,0 +1,264 @@
|
||||
/********************* (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;
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
*******************************************************************************/
|
||||
u16 Get_MmaActive(void) {
|
||||
return gactive;
|
||||
}
|
||||
/*******************************************************************************
|
||||
Function: Get_MmaActive
|
||||
Description:Returns if movement has occured (0==still,1==movement)
|
||||
*******************************************************************************/
|
||||
u16 Get_MmaShift(void) {
|
||||
return gShift;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
|
||||
*******************************************************************************/
|
||||
void Set_MmaShift(u16 shift) {
|
||||
gShift = shift;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegWrite
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>Reg<65><67>ַд<D6B7><D0B4>Data
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Reg <20><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ַ<EFBFBD><D6B7>Data<74><61><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegRead
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Reg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Reg <20><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>gMmatxdata<74><61>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: MMA865x_Standby
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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)
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: MMA865x_Active
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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)
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegRead
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Reg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
*******************************************************************************/
|
||||
void StartUp_Accelerated(void) {
|
||||
//------<2D><><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();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Read_ZYXDr
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡXYZ<59><5A><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Cheak_XYData
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>x<EFBFBD><78>y<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>仯
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ǰһxy<78><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xy<78><79><EFBFBD><EFBFBD>Ա<EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_X
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>x
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_Y
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_z
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Check_Accelerated
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><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><C7B7>ƶ<EFBFBD>*/
|
||||
|
||||
x0 = x1;
|
||||
y0 = y1;
|
||||
}
|
||||
/******************************** END OF FILE *********************************/
|
||||
Reference in New Issue
Block a user