00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <avr/io.h>
00023 #include <avr/signal.h>
00024 #include <avr/interrupt.h>
00025
00026 #include "global.h"
00027 #include "i2c.h"
00028 #include "lis3l02.h"
00029
00030 #include "rprintf.h"
00031 #include "timer.h"
00032
00033
00034
00035
00036 u08 lis3l02Init(void)
00037 {
00038
00039 return lis3l02Reset();
00040 }
00041
00042 u08 lis3l02Reset(void)
00043 {
00044
00045 lis3l02WriteReg(LIS3L02_REG_CTRLREG1,
00046 LIS3L02_CTRLREG1_XEN |
00047 LIS3L02_CTRLREG1_YEN |
00048 LIS3L02_CTRLREG1_ZEN |
00049 LIS3L02_CTRLREG1_PD0);
00050
00051
00052 lis3l02WriteReg(LIS3L02_REG_CTRLREG2,
00053 LIS3L02_CTRLREG2_BOOT |
00054 LIS3L02_CTRLREG2_DAS );
00055
00056 return 0;
00057 }
00058
00059 u08 lis3l02ReadReg(u08 reg)
00060 {
00061 u08 data;
00062 u08 i2cStat;
00063
00064
00065 i2cStat = i2cMasterSendNI(LIS3L02_I2C_ADDR, 1, ®);
00066 if(i2cStat == I2C_ERROR_NODEV)
00067 {
00068 rprintf("No I2C Device\r\n");
00069 return i2cStat;
00070 }
00071
00072 i2cStat = i2cMasterReceiveNI(LIS3L02_I2C_ADDR, 1, &data);
00073
00074
00075
00076 return data;
00077 }
00078
00079 u08 lis3l02WriteReg(u08 reg, u08 data)
00080 {
00081 u08 packet[2];
00082 u08 i2cStat;
00083
00084
00085 packet[0] = reg;
00086 packet[1] = data;
00087
00088 i2cStat = i2cMasterSendNI(LIS3L02_I2C_ADDR, 2, packet);
00089 if(i2cStat == I2C_ERROR_NODEV)
00090 {
00091 rprintf("No I2C Device\r\n");
00092 return i2cStat;
00093 }
00094
00095
00096
00097 return (i2cStat == I2C_OK);
00098 }
00099
00100 s16 lis3l02GetAccel(u08 chxyz)
00101 {
00102 s16 value;
00103
00104 value = lis3l02ReadReg(LIS3L02_REG_OUTXL + (chxyz<<1));
00105 value |= lis3l02ReadReg(LIS3L02_REG_OUTXH + (chxyz<<1))<<8;
00106
00107 return value;
00108 }
00109
00110
00111