mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-31 03:57:45 +08:00
*** empty log message ***
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
|
||||
|
||||
#include "std.h"
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/signal.h>
|
||||
#include "3dmg.h"
|
||||
#include "uart.h"
|
||||
|
||||
volatile bool_t _3dmg_data_ready;
|
||||
int16_t _3dmg_roll, _3dmg_pitch, _3dmg_yaw;
|
||||
int16_t _3dmg_roll_dot, _3dmg_pitch_dot, _3dmg_yaw_dot;
|
||||
uint16_t _3dmg_timer_tick;
|
||||
uint8_t type, state;
|
||||
uint16_t checksum_read, checksum_comp;
|
||||
|
||||
void _3dmg_set_continuous_mode ( void ) {
|
||||
#define REQ_CONT_LEN 5
|
||||
uint8_t msg[REQ_CONT_LEN] = { 0x10, 0x00, 0x31, 0x00, 0x41};
|
||||
uint8_t i;
|
||||
for (i=0; i<REQ_CONT_LEN; i++)
|
||||
uart_transmit(msg[i]);
|
||||
}
|
||||
|
||||
void _3dmg_capture_neutral ( void ) {
|
||||
#define CAP_GYR_LEN 3
|
||||
uint8_t msg[REQ_CONT_LEN] = { 0x06, 0x00, 0x06};
|
||||
uint8_t i;
|
||||
for (i=0; i<CAP_GYR_LEN; i++)
|
||||
uart_transmit(msg[i]);
|
||||
}
|
||||
|
||||
|
||||
#define READ_MSB(my_short, my_char) { \
|
||||
{ \
|
||||
my_short = (((int16_t)my_char)<<8)&0xFF00; \
|
||||
state++; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define READ_LSB(my_short, my_char) { \
|
||||
{ \
|
||||
my_short += (((int16_t)my_char)&0x00FF); \
|
||||
checksum_comp += (uint16_t)my_short; \
|
||||
state++; \
|
||||
} \
|
||||
}
|
||||
|
||||
static inline void on_3dmg_receive(uint8_t c) {
|
||||
int16_t foo = 0;
|
||||
switch(state) {
|
||||
case 0:
|
||||
_3dmg_data_ready = FALSE ;
|
||||
if(c==0x31) {
|
||||
type = c;
|
||||
checksum_comp = (int16_t)type;
|
||||
state++ ;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
READ_MSB(_3dmg_roll, c);
|
||||
break ;
|
||||
case 2:
|
||||
READ_LSB(_3dmg_roll, c);
|
||||
break ;
|
||||
case 3:
|
||||
READ_MSB(_3dmg_pitch, c);
|
||||
break ;
|
||||
case 4:
|
||||
READ_LSB(_3dmg_pitch, c);
|
||||
break ;
|
||||
case 5:
|
||||
READ_MSB(_3dmg_yaw, c);
|
||||
break ;
|
||||
case 6:
|
||||
READ_LSB(_3dmg_yaw, c);
|
||||
break ;
|
||||
case 7:
|
||||
READ_MSB(foo, c);
|
||||
/* accel_x_msb */
|
||||
break ;
|
||||
case 8:
|
||||
READ_LSB(foo, c);
|
||||
/* accel_x_lsb */
|
||||
break ;
|
||||
case 9:
|
||||
READ_MSB(foo, c);
|
||||
/* accel_y_msb */
|
||||
break ;
|
||||
case 10:
|
||||
READ_LSB(foo, c);
|
||||
/* accel_y_lsb */
|
||||
break ;
|
||||
case 11:
|
||||
READ_MSB(foo, c);
|
||||
/* accel_z_msb */
|
||||
break ;
|
||||
case 12:
|
||||
READ_LSB(foo, c);
|
||||
/* accel_z_lsb */
|
||||
break ;
|
||||
case 13:
|
||||
READ_MSB(_3dmg_roll_dot, c);
|
||||
break ;
|
||||
case 14:
|
||||
READ_LSB(_3dmg_roll_dot, c);
|
||||
break ;
|
||||
case 15:
|
||||
READ_MSB(_3dmg_pitch_dot, c);
|
||||
break ;
|
||||
case 16:
|
||||
READ_LSB(_3dmg_pitch_dot, c);
|
||||
break ;
|
||||
case 17:
|
||||
READ_MSB(_3dmg_yaw_dot, c);
|
||||
break ;
|
||||
case 18:
|
||||
READ_LSB(_3dmg_yaw_dot, c);
|
||||
break ;
|
||||
case 19:
|
||||
READ_MSB(_3dmg_timer_tick, c);
|
||||
break ;
|
||||
case 20:
|
||||
READ_LSB(_3dmg_timer_tick, c);
|
||||
break ;
|
||||
case 21:
|
||||
checksum_read = (((uint16_t)c)&0x00FF)<<8;
|
||||
state++;
|
||||
break ;
|
||||
case 22:
|
||||
checksum_read += ((uint16_t)c)&0x00FF;
|
||||
state = 0 ;
|
||||
// if (checksum_read == checksum_comp)
|
||||
_3dmg_data_ready = TRUE ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ReceiveUart(on_3dmg_receive);
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef _3DMG_G
|
||||
#define _3DMG_G
|
||||
|
||||
#include <inttypes.h>
|
||||
#include "std.h"
|
||||
|
||||
void _3dmg_capture_gyro_bias ( void );
|
||||
void _3dmg_set_continuous_mode ( void );
|
||||
extern volatile bool_t _3dmg_data_ready;
|
||||
extern int16_t _3dmg_roll, _3dmg_pitch, _3dmg_yaw;
|
||||
extern int16_t _3dmg_roll_dot, _3dmg_pitch_dot, _3dmg_yaw_dot;
|
||||
|
||||
#endif /* _3DMG_G */
|
||||
@@ -55,7 +55,9 @@ $(TARGET).srcs = \
|
||||
spi.c \
|
||||
uart.c \
|
||||
adc_fbw.c \
|
||||
|
||||
3dmg.c \
|
||||
imu.c \
|
||||
control.c \
|
||||
|
||||
include ../../../conf/Makefile.local
|
||||
include ../../../conf/Makefile.avr
|
||||
|
||||
Reference in New Issue
Block a user