MAV'RIC
lsm330dlc_driver.h
1 /*
2  * itg3200.h
3  *
4  * Created: 18/05/2012 17:51:08
5  * Author: sfx
6  */
7 
8 
9 #ifndef LSM330DLC_H_
10 #define LSM330DLC_H_
11 #include "compiler.h"
12 
13 #define GY_X 0
14 #define GY_Y 1
15 #define GY_Z 2
16 
17 #define LSM330_ACC_SLAVE_ADDRESS 0b0011000
18 #define LSM330_GYRO_SLAVE_ADDRESS 0b1101010
19 
20 
21 #define LSM_GYRO_DEN_PIN AVR32_PIN_PD23
22 
23 typedef struct lsm330dlc_acc_conf_t{
24  uint8_t start_address;
25  uint8_t ctrl_reg_a[5];
27 
28 typedef struct lsm330dlc_gyro_conf_t{
29  uint8_t start_address;
30  uint8_t ctrl_reg_g[5];
32 
33 
34 //CTRL_REG_A_1
35 #define LSM_ACC_DATARATE_OFF 0x00
36 #define LSM_ACC_DATARATE_1HZ 0x10
37 #define LSM_ACC_DATARATE_10Hz 0x20
38 #define LSM_ACC_DATARATE_25Hz 0x30
39 #define LSM_ACC_DATARATE_50Hz 0x40
40 #define LSM_ACC_DATARATE_100Hz 0x50
41 #define LSM_ACC_DATARATE_200Hz 0x60
42 #define LSM_ACC_DATARATE_400Hz 0x70
43 #define LSM_ACC_DATARATE_1620Hz 0x80
44 #define LSM_ACC_DATARATE_1344_5376Hz 0x90
45 
46 #define LSM_ACC_X_EN 0x01
47 #define LSM_ACC_Y_EN 0x02
48 #define LSM_ACC_Z_EN 0x04
49 #define LSM_ACC_ALL_EN 0x07
50 
51 #define LSM_ACC_LOW_POWER_EN 0x08
52 
53 //CTRL_REG_A_2
54 #define LSM_ACC_HPIS1 0x01
55 #define LSM_ACC_HPIS2 0x02
56 #define LSM_ACC_HPCLICK 0x04
57 #define LSM_ACC_FDS 0x08
58 #define LSM_ACC_HPCF1 0x10
59 #define LSM_ACC_HPCF2 0x20
60 #define LSM_ACC_HPM0 0x40
61 #define LSM_ACC_HPM1 0x80
62 
63 //CTRL_REG_A_3
64 #define LSM_ACC_OVERRUN_INT 0x02
65 #define LSM_ACC_FIFO_WM_INT 0x04
66 #define LSM_ACC_DRDY2_INT 0x08
67 #define LSM_ACC_DRDY1_INT 0x10
68 #define LSM_ACC_AOI_INT 0x40
69 #define LSM_ACC_CLICK_INT 0x80
70 
71 //CTRL_REG_A_4
72 #define LSM_ACC_SPI_MODE 0x01
73 #define LSM_ACC_HIGH_RES 0x08
74 
75 #define LSM_ACC_FULL_SCALE_2G 0x00
76 #define LSM_ACC_FULL_SCALE_4G 0x10
77 #define LSM_ACC_FULL_SCALE_8G 0x20
78 #define LSM_ACC_FULL_SCALE_16G 0x30
79 
80 #define LSM_ACC_BIG_ENDIAN 0x40
81 
82 //CTRL_REG_A_5
83 #define LSM_ACC_D4D_INT 0x04
84 #define LSM_ACC_LIR_INT 0x08
85 #define LSM_ACC_FIFO_EN 0x40
86 #define LSM_ACC_BOOT 0x80
87 
88 
89 //CTRL_REG_G_1
90 #define LSM_GYRO_DATARATE_95HZ 0x00
91 #define LSM_GYRO_DATARATE_190HZ 0x40
92 #define LSM_GYRO_DATARATE_380Hz 0x80
93 #define LSM_GYRO_DATARATE_760Hz 0xC0
94 
95 // note: actual bandwidth depends on datarate - specified for 380Hz. Consult Datasheet.
96 #define LSM_GYRO_BANDWIDTH_20Hz 0x40
97 #define LSM_GYRO_BANDWIDTH_25Hz 0x50
98 #define LSM_GYRO_BANDWIDTH_50Hz 0x60
99 #define LSM_GYRO_BANDWIDTH_100Hz 0x70
100 
101 #define LSM_GYRO_X_EN 0x01
102 #define LSM_GYRO_Y_EN 0x02
103 #define LSM_GYRO_Z_EN 0x04
104 #define LSM_GYRO_ALL_EN 0x07
105 #define LSM_GYRO_POWER_ON 0x08
106 
107 //CTRL_REG_G_2
108 #define LSM_GYRO_HPCF0 0x01
109 #define LSM_GYRO_HPCF1 0x02
110 #define LSM_GYRO_HPCF2 0x04
111 #define LSM_GYRO_HPCF3 0x08
112 #define LSM_GYRO_HPM0 0x10
113 #define LSM_GYRO_HPM1 0x20
114 #define LSM_GYRO_LVL_EN 0x40
115 #define LSM_GYRO_EXTREN 0x80
116 
117 //CTRL_REG_G_3
118 #define LSM_GYRO_FIFO_EMPTY_INT 0x01
119 #define LSM_GYRO_FIFO_OVRUN_INT 0x02
120 #define LSM_GYRO_FIFO_WM_INT 0x04
121 #define LSM_GYRO_DRDY_INT 0x08
122 #define LSM_GYRO_PP_OD 0x10
123 #define LSM_GYRO_H_L_ACT 0x20
124 #define LSM_GYRO_I1_BOOT 0x40
125 #define LSM_GYRO_I1_INT1 0x80
126 
127 //CTRL_REG_G_4
128 #define LSM_GYRO_SPI_MODE 0x01
129 
130 #define LSM_GYRO_FULL_SCALE_250 0x00
131 #define LSM_GYRO_FULL_SCALE_500 0x10
132 #define LSM_GYRO_FULL_SCALE_2000 0x20
133 #define LSM_GYRO_FULL_SCALE_2000 0x30
134 
135 #define LSM_GYRO_BIG_ENDIAN 0x40
136 #define LSM_GYRO_BLOCK_DATA 0x80
137 
138 //CTRL_REG_G_5
139 #define LSM_OUT_SEL0 0x01
140 #define LSM_OUT_SEL1 0x02
141 #define LSM_INT_SEL0 0x04
142 #define LSM_INT_SEL1 0x08
143 #define LSM_GYRO_HP_EN 0x10
144 #define LSM_GYRO_FIFO_EN 0x40
145 #define LSM_GYRO_BOOT 0x80
146 
147 
148 
149 #define LSM_ACC_OUT_ADDRESS 0x27
150 
151 #define LSM_ACC_FIFO_CTRL_ADDRESS 0x2E
152 #define LSM_ACC_FIFO_SRC_ADDRESS 0x2E
153 
154 #define LSM_GYRO_OUT_ADDRESS 0x26
155 
156 #define LSM_AUTO_INCREMENT 0x80
157 
158 static const lms330dlc_acc_conf_t lsm_acc_default_config=
159 {.start_address=0x20 | LSM_AUTO_INCREMENT,
160  .ctrl_reg_a=
161  { LSM_ACC_DATARATE_400Hz | LSM_ACC_ALL_EN , //CTRL_REG_G_1
162  0, //CTRL_REG_G_2
163  0, //CTRL_REG_G_3
164  LSM_ACC_HIGH_RES | LSM_ACC_FULL_SCALE_8G, //|LSM_ACC_BIG_ENDIAN, //CTRL_REG_G_4
165  LSM_ACC_FIFO_EN //CTRL_REG_G_5
166  }
167 };
168 
169 static const lsm330dlc_gyro_conf_t lsm_gyro_default_config=
170 {.start_address=0x20| LSM_AUTO_INCREMENT,
171  .ctrl_reg_g=
172  { LSM_GYRO_POWER_ON | LSM_GYRO_DATARATE_380Hz | LSM_GYRO_BANDWIDTH_50Hz | LSM_GYRO_ALL_EN, //CTRL_REG_A_1
173  0, //CTRL_REG_A_2
174  0, //CTRL_REG_A_3
175  LSM_GYRO_FULL_SCALE_2000|LSM_GYRO_BIG_ENDIAN, //CTRL_REG_A_4
176  LSM_GYRO_FIFO_EN
177  }
178 };
179 
180 static const uint8_t fifo_config[2]={LSM_ACC_FIFO_CTRL_ADDRESS, 0x80};
181 
182 typedef struct{
183  int8_t temperature;
184  uint8_t status_register;
185  int16_t axes[3];
186 } lsm_gyro_t;
187 
188 typedef struct{
189  uint8_t status_register;
190  int16_t axes[3];
191 } lsm_acc_t;
192 
193 
194 void lsm330dlc_init(void);
195 
196 lsm_gyro_t* lsm330dlc_driver_get_gyro_data(void);
197 lsm_acc_t* lsm330dlc_driver_get_acc_data(void);
198 
199 
200 #endif
Definition: lsm330dlc_driver.h:23
Definition: lsm330dlc_driver.h:28
Structure containing the accelerometer's data.
Definition: lsm330dlc.h:59
Structure containing the gyroscope's data.
Definition: lsm330dlc.h:67