41
41
/* WHO AM I register default value */
42
42
#define UC_WHO_AM_I_DEFAULT_VALUE 0x3F
43
43
44
- /* ADD_REG_CTRL_4 register configuration value: X,Y,Z axis enabled and 400Hz of output data rate */
44
+ /* ADD_REG_CTRL_4 register configuration value:
45
+ * X,Y,Z axis enabled and 400Hz of output data rate */
45
46
#define UC_ADD_REG_CTRL_4_CFG_VALUE 0x77
46
47
47
48
/* Sensitivity for 2G range [mg/digit] */
48
49
#define SENS_2G_RANGE_MG_PER_DIGIT ((float)0.06)
49
50
50
51
/* LED threshold value in mg */
51
- #define LED_TH_MG (1000) /* 1000mg (1G) */
52
+ #define LED_TH_MG (1000) /* 1000mg (1G) */
52
53
53
54
54
55
63
64
#define SET_WRITE_SINGLE_CMD (x ) (x & (~(0xC0)))
64
65
/* set write multiple command. Attention: command must be 0x3F at most */
65
66
#define SET_WRITE_MULTI_CMD (x ) (x & (~(0x80)) \
66
- x |= 0x40)
67
+ x |= 0x40)
67
68
68
69
/* Macros for turning LEDs ON */
69
- #define LED_GREEN_ON () (gpio_set(GPIOD, GPIO12))
70
- #define LED_ORANGE_ON () (gpio_set(GPIOD, GPIO13))
71
- #define LED_RED_ON () (gpio_set(GPIOD, GPIO14))
72
- #define LED_BLUE_ON () (gpio_set(GPIOD, GPIO15))
70
+ #define LED_GREEN_ON () (gpio_set(GPIOD, GPIO12))
71
+ #define LED_ORANGE_ON () (gpio_set(GPIOD, GPIO13))
72
+ #define LED_RED_ON () (gpio_set(GPIOD, GPIO14))
73
+ #define LED_BLUE_ON () (gpio_set(GPIOD, GPIO15))
73
74
74
75
/* Macros for turning LEDs OFF */
75
- #define LED_GREEN_OFF () (gpio_clear(GPIOD, GPIO12))
76
- #define LED_ORANGE_OFF () (gpio_clear(GPIOD, GPIO13))
77
- #define LED_RED_OFF () (gpio_clear(GPIOD, GPIO14))
78
- #define LED_BLUE_OFF () (gpio_clear(GPIOD, GPIO15))
76
+ #define LED_GREEN_OFF () (gpio_clear(GPIOD, GPIO12))
77
+ #define LED_ORANGE_OFF () (gpio_clear(GPIOD, GPIO13))
78
+ #define LED_RED_OFF () (gpio_clear(GPIOD, GPIO14))
79
+ #define LED_BLUE_OFF () (gpio_clear(GPIOD, GPIO15))
79
80
80
81
81
82
82
83
83
84
/* ------------- Local functions prototypes --------------- */
84
85
85
- static void gpio_setup (void );
86
- static void spi_setup (void );
87
- static void LIS3DSH_init (void );
88
- static void LIS3DSH_write_reg (int , int );
89
- static int LIS3DSH_read_reg (int );
90
- static inline int twoComplToInt16 (int );
86
+ static void gpio_setup (void );
87
+ static void spi_setup (void );
88
+ static void LIS3DSH_init (void );
89
+ static void LIS3DSH_write_reg (int , int );
90
+ static int LIS3DSH_read_reg (int );
91
+ static inline int twoComplToInt16 (int );
91
92
92
93
93
94
@@ -100,8 +101,9 @@ static void gpio_setup(void)
100
101
/* Enable GPIOD clock. */
101
102
rcc_periph_clock_enable (RCC_GPIOD );
102
103
103
- /* Set GPIO12, GPIO13, GPIO14, GPIO15 (in GPIO port D) to 'output push-pull'. */
104
- gpio_mode_setup (GPIOD , GPIO_MODE_OUTPUT , GPIO_PUPD_NONE , GPIO12 | GPIO13 | GPIO14 | GPIO15 );
104
+ /* Set GPIO12/13/14/15 (in GPIO port D) to 'output push-pull'. */
105
+ gpio_mode_setup (GPIOD , GPIO_MODE_OUTPUT , GPIO_PUPD_NONE ,
106
+ GPIO12 | GPIO13 | GPIO14 | GPIO15 );
105
107
106
108
/* LIS3DSH pins map:
107
109
PA5 - SPI1_SCK
@@ -113,9 +115,11 @@ static void gpio_setup(void)
113
115
/* Enable GPIOA clock. */
114
116
rcc_periph_clock_enable (RCC_GPIOA );
115
117
/* set SPI pins as CLK, MOSI, MISO */
116
- gpio_mode_setup (GPIOA , GPIO_MODE_AF , GPIO_PUPD_NONE , GPIO5 | GPIO6 | GPIO7 );
118
+ gpio_mode_setup (GPIOA , GPIO_MODE_AF , GPIO_PUPD_NONE ,
119
+ GPIO5 | GPIO6 | GPIO7 );
117
120
/* Push Pull, Speed 100 MHz */
118
- gpio_set_output_options (GPIOA , GPIO_OTYPE_PP , GPIO_OSPEED_100MHZ , GPIO5 | GPIO6 | GPIO7 );
121
+ gpio_set_output_options (GPIOA , GPIO_OTYPE_PP , GPIO_OSPEED_100MHZ ,
122
+ GPIO5 | GPIO6 | GPIO7 );
119
123
/* Alternate Function: SPI1 */
120
124
gpio_set_af (GPIOA , GPIO_AF5 , GPIO5 | GPIO6 | GPIO7 );
121
125
@@ -124,7 +128,8 @@ static void gpio_setup(void)
124
128
/* set CS as OUTPUT */
125
129
gpio_mode_setup (GPIOE , GPIO_MODE_OUTPUT , GPIO_PUPD_NONE , GPIO3 );
126
130
/* Push Pull, Speed 100 MHz */
127
- gpio_set_output_options (GPIOE , GPIO_OTYPE_PP , GPIO_OSPEED_100MHZ , GPIO3 );
131
+ gpio_set_output_options (GPIOE , GPIO_OTYPE_PP ,
132
+ GPIO_OSPEED_100MHZ , GPIO3 );
128
133
/* set CS high */
129
134
gpio_set (GPIOE , GPIO3 );
130
135
}
@@ -153,32 +158,29 @@ static void spi_setup(void)
153
158
/* Function to initialise the LIS3DSH */
154
159
static void LIS3DSH_init (void )
155
160
{
156
- int intRegValue ;
161
+ int int_reg_value ;
157
162
158
163
/* init SPI1 */
159
164
spi_setup ();
160
165
161
166
/* get WHO AM I value */
162
- intRegValue = LIS3DSH_read_reg (ADD_REG_WHO_AM_I );
167
+ int_reg_value = LIS3DSH_read_reg (ADD_REG_WHO_AM_I );
163
168
164
169
/* if WHO AM I value is the expected one */
165
- if ( intRegValue == UC_WHO_AM_I_DEFAULT_VALUE )
166
- {
170
+ if (int_reg_value == UC_WHO_AM_I_DEFAULT_VALUE ) {
167
171
/* set output data rate to 400 Hz and enable X,Y,Z axis */
168
172
LIS3DSH_write_reg (ADD_REG_CTRL_4 , UC_ADD_REG_CTRL_4_CFG_VALUE );
169
173
/* verify written value */
170
- intRegValue = LIS3DSH_read_reg (ADD_REG_CTRL_4 );
174
+ int_reg_value = LIS3DSH_read_reg (ADD_REG_CTRL_4 );
171
175
/* if written value is different */
172
- if ( intRegValue != UC_ADD_REG_CTRL_4_CFG_VALUE )
173
- {
176
+ if (int_reg_value != UC_ADD_REG_CTRL_4_CFG_VALUE ) {
174
177
/* ERROR: stay here... */
175
- while (1 );
178
+ while (1 );
176
179
}
177
180
}
178
- else
179
- {
181
+ else {
180
182
/* ERROR: stay here... */
181
- while (1 );
183
+ while (1 );
182
184
}
183
185
}
184
186
@@ -199,42 +201,40 @@ static void LIS3DSH_write_reg(int reg, int data)
199
201
/* Function to read a register from LIS3DSH through SPI */
200
202
static int LIS3DSH_read_reg (int reg )
201
203
{
202
- int regValue ;
204
+ int reg_value ;
203
205
/* set CS low */
204
206
gpio_clear (GPIOE , GPIO3 );
205
- regValue = spi_xfer (SPI1 , SET_READ_SINGLE_CMD (reg ));
206
- regValue = spi_xfer (SPI1 , 0xFF );
207
+ reg_value = spi_xfer (SPI1 , SET_READ_SINGLE_CMD (reg ));
208
+ reg_value = spi_xfer (SPI1 , 0xFF );
207
209
/* set CS high */
208
210
gpio_set (GPIOE , GPIO3 );
209
211
210
- return regValue ;
212
+ return reg_value ;
211
213
}
212
214
213
215
214
216
/* Transform a two's complement value to 16-bit int value */
215
- static inline int twoComplToInt16 (int twoComplValue )
217
+ static inline int twoComplToInt16 (int two_compl_value )
216
218
{
217
- int int16Value = 0 ;
219
+ int int16_value = 0 ;
218
220
219
221
/* conversion */
220
- if (twoComplValue > 32768 )
221
- {
222
- int16Value = - (((~twoComplValue ) & 0xFFFF ) + 1 );
222
+ if (two_compl_value > 32768 ) {
223
+ int16_value = - (((~two_compl_value ) & 0xFFFF ) + 1 );
223
224
}
224
- else
225
- {
226
- int16Value = twoComplValue ;
225
+ else {
226
+ int16_value = two_compl_value ;
227
227
}
228
228
229
- return int16Value ;
229
+ return int16_value ;
230
230
}
231
231
232
232
233
233
/* Main function */
234
234
int main (void )
235
235
{
236
236
int i ;
237
- int intValueMgX , intValueMgY , intValueMgZ ;
237
+ int value_mg_x , value_mg_y , value_mg_z ;
238
238
239
239
/* setup all GPIOs */
240
240
gpio_setup ();
@@ -243,70 +243,66 @@ int main(void)
243
243
LIS3DSH_init ();
244
244
245
245
/* infinite loop */
246
- while (1 )
247
- {
246
+ while (1 ) {
248
247
/* get X, Y, Z values */
249
- intValueMgX = ((LIS3DSH_read_reg (ADD_REG_OUT_X_H ) << 8 ) | LIS3DSH_read_reg (ADD_REG_OUT_X_L ));
250
- intValueMgY = ((LIS3DSH_read_reg (ADD_REG_OUT_Y_H ) << 8 ) | LIS3DSH_read_reg (ADD_REG_OUT_Y_L ));
251
- intValueMgZ = ((LIS3DSH_read_reg (ADD_REG_OUT_Z_H ) << 8 ) | LIS3DSH_read_reg (ADD_REG_OUT_Z_L ));
248
+ value_mg_x = ((LIS3DSH_read_reg (ADD_REG_OUT_X_H ) << 8 ) |
249
+ LIS3DSH_read_reg (ADD_REG_OUT_X_L ));
250
+ value_mg_y = ((LIS3DSH_read_reg (ADD_REG_OUT_Y_H ) << 8 ) |
251
+ LIS3DSH_read_reg (ADD_REG_OUT_Y_L ));
252
+ value_mg_z = ((LIS3DSH_read_reg (ADD_REG_OUT_Z_H ) << 8 ) |
253
+ LIS3DSH_read_reg (ADD_REG_OUT_Z_L ));
252
254
253
255
/* transform X value from two's complement to 16-bit int */
254
- intValueMgX = twoComplToInt16 (intValueMgX );
256
+ value_mg_x = twoComplToInt16 (value_mg_x );
255
257
/* convert X absolute value to mg value */
256
- intValueMgX = intValueMgX * SENS_2G_RANGE_MG_PER_DIGIT ;
258
+ value_mg_x = value_mg_x * SENS_2G_RANGE_MG_PER_DIGIT ;
257
259
258
260
/* transform Y value from two's complement to 16-bit int */
259
- intValueMgY = twoComplToInt16 (intValueMgY );
261
+ value_mg_y = twoComplToInt16 (value_mg_y );
260
262
/* convert Y absolute value to mg value */
261
- intValueMgY = intValueMgY * SENS_2G_RANGE_MG_PER_DIGIT ;
263
+ value_mg_y = value_mg_y * SENS_2G_RANGE_MG_PER_DIGIT ;
262
264
263
265
/* transform Z value from two's complement to 16-bit int */
264
- intValueMgZ = twoComplToInt16 (intValueMgZ );
266
+ value_mg_z = twoComplToInt16 (value_mg_z );
265
267
/* convert Z absolute value to mg value */
266
- intValueMgZ = intValueMgZ * SENS_2G_RANGE_MG_PER_DIGIT ;
268
+ value_mg_z = value_mg_z * SENS_2G_RANGE_MG_PER_DIGIT ;
267
269
268
270
/* set X related LEDs according to specified threshold */
269
- if (intValueMgX >= LED_TH_MG )
270
- {
271
+ if (value_mg_x >= LED_TH_MG ) {
271
272
LED_BLUE_OFF ();
272
273
LED_ORANGE_OFF ();
273
274
LED_GREEN_OFF ();
274
275
LED_RED_ON ();
275
276
}
276
- else if (intValueMgX <= - LED_TH_MG )
277
- {
277
+ else if (value_mg_x <= - LED_TH_MG ) {
278
278
LED_BLUE_OFF ();
279
279
LED_ORANGE_OFF ();
280
280
LED_RED_OFF ();
281
281
LED_GREEN_ON ();
282
282
}
283
283
284
284
/* set Y related LEDs according to specified threshold */
285
- if (intValueMgY >= LED_TH_MG )
286
- {
285
+ if (value_mg_y >= LED_TH_MG ) {
287
286
LED_BLUE_OFF ();
288
287
LED_RED_OFF ();
289
288
LED_GREEN_OFF ();
290
289
LED_ORANGE_ON ();
291
290
}
292
- else if (intValueMgY <= - LED_TH_MG )
293
- {
291
+ else if (value_mg_y <= - LED_TH_MG ) {
294
292
LED_RED_OFF ();
295
293
LED_GREEN_OFF ();
296
294
LED_ORANGE_OFF ();
297
295
LED_BLUE_ON ();
298
296
}
299
297
300
298
/* set Z related LEDs according to specified threshold */
301
- if (intValueMgZ >= LED_TH_MG )
302
- {
299
+ if (value_mg_z >= LED_TH_MG ) {
303
300
LED_BLUE_ON ();
304
301
LED_ORANGE_ON ();
305
302
LED_RED_ON ();
306
303
LED_GREEN_ON ();
307
304
}
308
- else if (intValueMgZ <= - LED_TH_MG )
309
- {
305
+ else if (value_mg_z <= - LED_TH_MG ) {
310
306
LED_BLUE_OFF ();
311
307
LED_ORANGE_OFF ();
312
308
LED_RED_OFF ();
0 commit comments