OV-Watch/Software/OV_Watch_V2.3.1/BSP/LSM303DLH/LSM303.h

73 lines
2.5 KiB
C

#ifndef _LSM303_H_
#define _LSM303_H_
#include "iic_hal.h"
//LSM303DLH 寄存器定义
//罗盘
#define LSM303_CRA_REG_M 0x00 //RW
#define LSM303_CRB_REG_M 0x01 //RW
#define LSM303_MR_REG_M 0x02 //RW
#define LSM303_OUT_X_H_M 0x03 //R
#define LSM303_OUT_X_L_M 0x04 //R
#define LSM303_OUT_Z_H_M 0x05 //R
#define LSM303_OUT_Z_L_M 0x06 //R
#define LSM303_OUT_Y_H_M 0x07 //R
#define LSM303_OUT_Y_L_M 0x08 //R
#define LSM303_SR_REG_M 0x09 //R
#define LSM303_IRA_REG_M 0x0A //R
#define LSM303_IRB_REG_M 0x0B //R
#define LSM303_IRC_REG_M 0x0C //R
//加速度
#define LSM303_CTRL_REG1_A 0x20 //RW
#define LSM303_CTRL_REG2_A 0x21 //RW
#define LSM303_CTRL_REG3_A 0x22 //RW
#define LSM303_CTRL_REG4_A 0x23 //RW
#define LSM303_CTRL_REG5_A 0x24 //RW
#define LSM303_HP_FILTER_RESET_A 0x25 //R
#define LSM303_REFERENCE_A 0x26 //RW
#define LSM303_STATUS_REG_A 0x27 //R
#define LSM303_OUT_X_L_A 0x28 //R
#define LSM303_OUT_X_H_A 0x29 //R
#define LSM303_OUT_Y_L_A 0x2A //R
#define LSM303_OUT_Y_H_A 0x2B //R
#define LSM303_OUT_Z_L_A 0x2C //R
#define LSM303_OUT_Z_H_A 0x2D //R
#define LSM303_INT1_CFG_A 0x30 //RW
#define LSM303_INT1_SOURCE_A 0x31 //R
#define LSM303_INT1_THS_A 0x32 //RW
#define LSM303_INT1_DURATION_A 0x33 //RW
#define LSM303_INT2_CFG_A 0x34 //RW
#define LSM303_INT2_SOURCE_A 0x35 //R
#define LSM303_INT2_THS_A 0x36 //RW
#define LSM303_INT2_DURATION_A 0x37 //RW
//温度
#define TEMP_OUT_H_M 0x31 //R
#define TEMP_OUT_L_M 0x32 //R
#define LSM303_SlaveAddr_A 0x19 //加速度地址
#define LSM303_SlaveAddr_M 0x1E //磁力计和温度的地址
//functions
unsigned char LSM303_ReadOneReg(unsigned char RegAddr);
void LSM303_ReadMultiReg(unsigned char RegAddr, unsigned char RegNum, unsigned char DataBuff[]);
unsigned char LSM303_Temp_ReadOneReg(unsigned char RegAddr);
void LSM303_WriteOneReg(unsigned char RegAddr, unsigned char dat);
unsigned char LSM303DLH_Init(void);
void LSM303DLH_Sleep(void);
void LSM303DLH_Wakeup(void);
void LSM303_ReadAcceleration(int16_t *Xa, int16_t *Ya, int16_t *Za);
void LSM303_ReadMagnetic(int16_t *Xm, int16_t *Ym, int16_t *Zm);
int LSM303DLH_CalculationZAxisAngle(int16_t Xa, int16_t Ya, int16_t Za);
int LSM303DLH_CalculationXAxisAngle(int16_t Xa, int16_t Ya, int16_t Za);
void LSM303_ReadTemperature(int16_t *Temp);
float Azimuth_Calculate(int16_t Xa, int16_t Ya, int16_t Za, int16_t Xm, int16_t Ym, int16_t Zm);
#endif /*_LSM303DLH_H_*/