Siphon Regulator 1.0
Nanosattelite attitude determination and control system.
Loading...
Searching...
No Matches
driver_mpu9250_interface_template.c
Go to the documentation of this file.
1
37/* Includes */
39
40#include "stm32f1xx_hal.h"
41#include "main.h"
42#include <stdio.h>
43#include <stdarg.h>
44
45/* Defines */
46#define MPU9250_CS_LOW() HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, 0)
47#define MPU9250_CS_HIGH() HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, 1)
48
49/* Extern global variables */
50extern SPI_HandleTypeDef hspi2;
51
60{
61 return 0;
62}
63
72{
73 return 0;
74}
75
87uint8_t mpu9250_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
88{
89 return 0;
90}
91
103uint8_t mpu9250_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
104{
105 return 0;
106}
107
116{
117 /* SPI is inicialized in main.c. Here only setting CS pin. */
119 return 0;
120}
121
130{
131 return 0;
132}
133
144uint8_t mpu9250_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
145{
146 /* MSB is set because I want to read */
147 uint8_t tx_reg = reg | 0x80;
148
150
151 /* Send request */
152 if (HAL_SPI_Transmit(&hspi2, &tx_reg, 1, 1000) != HAL_OK)
153 {
155 return 1;
156 }
157
158 /* Read data */
159 if (HAL_SPI_Receive(&hspi2, buf, len, 1000) != HAL_OK)
160 {
162 return 1;
163 }
164
166 return 0;
167}
168
179uint8_t mpu9250_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
180{
181 /* MSB is clear because I want to write */
182 uint8_t tx_reg = reg & 0x7F;
183
185
186 /* Send address selected register */
187 if (HAL_SPI_Transmit(&hspi2, &tx_reg, 1, 1000) != HAL_OK)
188 {
190 return 1;
191 }
192
193 /* Input data to selected register */
194 if (HAL_SPI_Transmit(&hspi2, buf, len, 1000) != HAL_OK)
195 {
197 return 1;
198 }
199
201 return 0;
202}
203
210{
211 HAL_Delay(ms);
212}
213
219void mpu9250_interface_debug_print(const char *const fmt, ...)
220{
221 va_list args;
222
223 /* Process printf with variable number of arguments */
224 va_start(args, fmt);
225 vprintf(fmt, args);
226 va_end(args);
227}
228
235{
236 switch (type)
237 {
239 {
240 mpu9250_interface_debug_print("mpu9250: irq motion.\n");
241
242 break;
243 }
245 {
246 mpu9250_interface_debug_print("mpu9250: irq fifo overflow.\n");
247
248 break;
249 }
251 {
252 mpu9250_interface_debug_print("mpu9250: irq fsync int.\n");
253
254 break;
255 }
257 {
258 mpu9250_interface_debug_print("mpu9250: irq dmp\n");
259
260 break;
261 }
263 {
264 mpu9250_interface_debug_print("mpu9250: irq data ready\n");
265
266 break;
267 }
268 default :
269 {
270 mpu9250_interface_debug_print("mpu9250: irq unknown code.\n");
271
272 break;
273 }
274 }
275}
276
283void mpu9250_interface_dmp_tap_callback(uint8_t count, uint8_t direction)
284{
285 switch (direction)
286 {
288 {
289 mpu9250_interface_debug_print("mpu9250: tap irq x up with %d.\n", count);
290
291 break;
292 }
294 {
295 mpu9250_interface_debug_print("mpu9250: tap irq x down with %d.\n", count);
296
297 break;
298 }
300 {
301 mpu9250_interface_debug_print("mpu9250: tap irq y up with %d.\n", count);
302
303 break;
304 }
306 {
307 mpu9250_interface_debug_print("mpu9250: tap irq y down with %d.\n", count);
308
309 break;
310 }
312 {
313 mpu9250_interface_debug_print("mpu9250: tap irq z up with %d.\n", count);
314
315 break;
316 }
318 {
319 mpu9250_interface_debug_print("mpu9250: tap irq z down with %d.\n", count);
320
321 break;
322 }
323 default :
324 {
325 mpu9250_interface_debug_print("mpu9250: tap irq unknown code.\n");
326
327 break;
328 }
329 }
330}
331
338{
339 switch (orientation)
340 {
342 {
343 mpu9250_interface_debug_print("mpu9250: orient irq portrait.\n");
344
345 break;
346 }
348 {
349 mpu9250_interface_debug_print("mpu9250: orient irq landscape.\n");
350
351 break;
352 }
354 {
355 mpu9250_interface_debug_print("mpu9250: orient irq reverse portrait.\n");
356
357 break;
358 }
360 {
361 mpu9250_interface_debug_print("mpu9250: orient irq reverse landscape.\n");
362
363 break;
364 }
365 default :
366 {
367 mpu9250_interface_debug_print("mpu9250: orient irq unknown code.\n");
368
369 break;
370 }
371 }
372}
driver mpu9250 interface header file
#define MPU9250_CS_LOW()
SPI_HandleTypeDef hspi2
Definition main.c:51
#define MPU9250_CS_HIGH()
@ MPU9250_INTERRUPT_MOTION
@ MPU9250_INTERRUPT_DATA_READY
@ MPU9250_INTERRUPT_FSYNC_INT
@ MPU9250_INTERRUPT_DMP
@ MPU9250_INTERRUPT_FIFO_OVERFLOW
@ MPU9250_DMP_ORIENT_REVERSE_PORTRAIT
@ MPU9250_DMP_ORIENT_REVERSE_LANDSCAPE
@ MPU9250_DMP_ORIENT_PORTRAIT
@ MPU9250_DMP_ORIENT_LANDSCAPE
@ MPU9250_DMP_TAP_X_DOWN
@ MPU9250_DMP_TAP_X_UP
@ MPU9250_DMP_TAP_Y_DOWN
@ MPU9250_DMP_TAP_Z_UP
@ MPU9250_DMP_TAP_Z_DOWN
@ MPU9250_DMP_TAP_Y_UP
void mpu9250_interface_dmp_orient_callback(uint8_t orientation)
interface dmp orient callback
void mpu9250_interface_debug_print(const char *const fmt,...)
interface print format data
void mpu9250_interface_dmp_tap_callback(uint8_t count, uint8_t direction)
interface dmp tap callback
uint8_t mpu9250_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t mpu9250_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu9250_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu9250_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t mpu9250_interface_iic_init(void)
interface iic bus init
uint8_t mpu9250_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t mpu9250_interface_spi_init(void)
interface spi bus init
void mpu9250_interface_receive_callback(uint8_t type)
interface receive callback
void mpu9250_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mpu9250_interface_spi_deinit(void)
interface spi bus deinit
: Header for main.c file. This file contains the common defines of the application.