mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-05 23:49:00 +08:00
updated test_itg3200 for new I2C interface
This commit is contained in:
@@ -209,6 +209,7 @@
|
||||
<target name="test_rc_ppm" board="lisa_l_1.0"/>
|
||||
<target name="test_adc" board="lisa_l_1.0"/>
|
||||
<target name="test_hmc5843" board="lisa_l_1.0"/>
|
||||
<target name="test_itg3200" board="lisa_l_1.0"/>
|
||||
</firmware>
|
||||
|
||||
<firmware name="lisa_passthrough">
|
||||
|
||||
@@ -303,4 +303,34 @@ test_hmc5843.srcs += downlink.c pprz_transport.c
|
||||
test_hmc5843.CFLAGS += -DUSE_I2C2
|
||||
test_hmc5843.srcs += i2c.c $(SRC_ARCH)/i2c_hw.c
|
||||
test_hmc5843.CFLAGS += -DIMU_OVERRIDE_CHANNELS
|
||||
test_hmc5843.CFLAGS += -DUSE_EXTI9_5_IRQ # Mag Int on PB5
|
||||
test_hmc5843.CFLAGS += -DUSE_EXTI9_5_IRQ # Mag Int on PB5
|
||||
|
||||
|
||||
#
|
||||
# test ITG3200
|
||||
#
|
||||
test_itg3200.ARCHDIR = $(ARCHI)
|
||||
test_itg3200.TARGET = test_itg3200
|
||||
test_itg3200.TARGETDIR = test_itg3200
|
||||
test_itg3200.CFLAGS = -I$(SRC_LISA) -I$(ARCHI) -I$(SRC_BOOZ) -I$(SRC_BOOZ_ARCH) -DPERIPHERALS_AUTO_INIT
|
||||
test_itg3200.CFLAGS += -DBOARD_CONFIG=$(BOARD_CFG)
|
||||
test_itg3200.srcs += lisa/test/lisa_test_itg3200.c \
|
||||
$(SRC_ARCH)/stm32_exceptions.c \
|
||||
$(SRC_ARCH)/stm32_vector_table.c
|
||||
|
||||
test_itg3200.CFLAGS += -DUSE_LED
|
||||
test_itg3200.srcs += $(SRC_ARCH)/led_hw.c
|
||||
|
||||
test_itg3200.CFLAGS += -DUSE_SYS_TIME -DSYS_TIME_LED=1
|
||||
test_itg3200.CFLAGS += -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC((1./512.))'
|
||||
test_itg3200.srcs += sys_time.c $(SRC_ARCH)/sys_time_hw.c
|
||||
|
||||
test_itg3200.CFLAGS += -DUSE_UART2 -DUART2_BAUD=B57600
|
||||
test_itg3200.srcs += $(SRC_ARCH)/uart_hw.c
|
||||
|
||||
test_itg3200.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_DEVICE=Uart2
|
||||
test_itg3200.srcs += downlink.c pprz_transport.c
|
||||
|
||||
test_itg3200.CFLAGS += -DUSE_I2C2
|
||||
test_itg3200.srcs += i2c.c $(SRC_ARCH)/i2c_hw.c
|
||||
test_itg3200.CFLAGS += -DUSE_EXTI15_10_IRQ # Gyro Int on PC14
|
||||
@@ -45,7 +45,7 @@ static inline void main_init_hw(void);
|
||||
|
||||
//static uint8_t i2c_done = FALSE;
|
||||
static struct i2c_transaction i2c_trans;
|
||||
#define INITIALISZED 6
|
||||
#define INITIALIZED 6
|
||||
static uint8_t mag_state = 0;
|
||||
static volatile uint8_t mag_ready_for_read = FALSE;
|
||||
static uint8_t reading_mag = FALSE;
|
||||
@@ -118,7 +118,7 @@ static inline void main_periodic_task( void ) {
|
||||
break;
|
||||
case 5:
|
||||
break;
|
||||
case INITIALISZED:
|
||||
case INITIALIZED:
|
||||
// i2c2_receive(HMC5843_ADDR, 7, &i2c_done);
|
||||
// reading_mag = TRUE;
|
||||
break;
|
||||
@@ -128,14 +128,14 @@ static inline void main_periodic_task( void ) {
|
||||
|
||||
// if (mag_state == 4) mag_state=1;
|
||||
|
||||
if (mag_state < INITIALISZED) mag_state++;
|
||||
if (mag_state < INITIALIZED) mag_state++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void main_event_task( void ) {
|
||||
|
||||
if (mag_state == INITIALISZED && mag_ready_for_read && i2c_trans.status==I2CTransSuccess) {
|
||||
if (mag_state == INITIALIZED && mag_ready_for_read && i2c_trans.status==I2CTransSuccess) {
|
||||
/* read mag */
|
||||
i2c_trans.type = I2CTransRx;
|
||||
i2c_trans.slave_addr = HMC5843_ADDR;
|
||||
@@ -210,5 +210,5 @@ void exti9_5_irq_handler(void) {
|
||||
if(EXTI_GetITStatus(EXTI_Line5) != RESET)
|
||||
EXTI_ClearITPendingBit(EXTI_Line5);
|
||||
|
||||
if (mag_state == INITIALISZED) mag_ready_for_read = TRUE;
|
||||
if (mag_state == INITIALIZED) mag_ready_for_read = TRUE;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2009 Antoine Drouin <poinix@gmail.com>
|
||||
* Copyright (C) 2010 The Paparazzi Team
|
||||
*
|
||||
* This file is part of paparazzi.
|
||||
*
|
||||
@@ -43,8 +43,8 @@ static inline void main_event_task( void );
|
||||
|
||||
static inline void main_init_hw(void);
|
||||
|
||||
static uint8_t i2c_done = FALSE;
|
||||
#define INITIALISZED 6
|
||||
static struct i2c_transaction i2c_trans;
|
||||
#define INITIALIZED 6
|
||||
static uint8_t gyro_state = 0;
|
||||
static volatile uint8_t gyro_ready_for_read = FALSE;
|
||||
static uint8_t reading_gyro = FALSE;
|
||||
@@ -92,34 +92,50 @@ static inline void main_periodic_task( void ) {
|
||||
switch (gyro_state) {
|
||||
|
||||
case 1:
|
||||
i2c2.buf[0] = ITG3200_REG_TEMP_OUT_H;
|
||||
i2c2_transmit(ITG3200_ADDR,1, &i2c_done);
|
||||
/* dummy one byte write for testing */
|
||||
i2c_trans.type = I2CTransTx;
|
||||
i2c_trans.slave_addr = ITG3200_ADDR;
|
||||
i2c_trans.buf[0] = ITG3200_REG_TEMP_OUT_H;
|
||||
i2c_trans.len_w = 1;
|
||||
i2c_submit(&i2c2,&i2c_trans);
|
||||
break;
|
||||
case 2:
|
||||
/* set gyro range to 2000deg/s and low pass at 256Hz */
|
||||
i2c2.buf[0] = ITG3200_REG_DLPF_FS;
|
||||
i2c2.buf[1] = (0x03<<3);
|
||||
i2c2_transmit(ITG3200_ADDR, 2, &i2c_done);
|
||||
i2c_trans.type = I2CTransTx;
|
||||
i2c_trans.slave_addr = ITG3200_ADDR;
|
||||
i2c_trans.buf[0] = ITG3200_REG_DLPF_FS;
|
||||
i2c_trans.buf[1] = (0x03<<3);
|
||||
i2c_trans.len_w = 2;
|
||||
i2c_submit(&i2c2,&i2c_trans);
|
||||
break;
|
||||
case 3:
|
||||
/* set sample rate to 533Hz */
|
||||
i2c2.buf[0] = ITG3200_REG_SMPLRT_DIV;
|
||||
i2c2.buf[1] = 0x0E;
|
||||
i2c2_transmit(ITG3200_ADDR, 2, &i2c_done);
|
||||
i2c_trans.type = I2CTransTx;
|
||||
i2c_trans.slave_addr = ITG3200_ADDR;
|
||||
i2c_trans.buf[0] = ITG3200_REG_SMPLRT_DIV;
|
||||
i2c_trans.buf[1] = 0x0E;
|
||||
i2c_trans.len_w = 2;
|
||||
i2c_submit(&i2c2,&i2c_trans);
|
||||
break;
|
||||
case 4:
|
||||
/* switch to gyroX clock */
|
||||
i2c2.buf[0] = ITG3200_REG_PWR_MGM;
|
||||
i2c2.buf[1] = 0x01;
|
||||
i2c2_transmit(ITG3200_ADDR, 2, &i2c_done);
|
||||
i2c_trans.type = I2CTransTx;
|
||||
i2c_trans.slave_addr = ITG3200_ADDR;
|
||||
i2c_trans.buf[0] = ITG3200_REG_PWR_MGM;
|
||||
i2c_trans.buf[1] = 0x01;
|
||||
i2c_trans.len_w = 2;
|
||||
i2c_submit(&i2c2,&i2c_trans);
|
||||
break;
|
||||
case 5:
|
||||
/* enable interrupt on data ready, idle hight */
|
||||
i2c2.buf[0] = ITG3200_REG_INT_CFG;
|
||||
i2c2.buf[1] = (0x01 | 0x01<<7);
|
||||
i2c2_transmit(ITG3200_ADDR, 2, &i2c_done);
|
||||
i2c_trans.type = I2CTransTx;
|
||||
i2c_trans.slave_addr = ITG3200_ADDR;
|
||||
i2c_trans.buf[0] = ITG3200_REG_INT_CFG;
|
||||
i2c_trans.buf[1] = (0x01 | 0x01<<7);
|
||||
i2c_trans.len_w = 2;
|
||||
i2c_submit(&i2c2,&i2c_trans);
|
||||
break;
|
||||
case INITIALISZED:
|
||||
case INITIALIZED:
|
||||
/* reads 8 bytes from address 0x1b */
|
||||
// i2c2.buf[0] = ITG3200_REG_TEMP_OUT_H;
|
||||
// i2c2_transceive(ITG3200_ADDR,1, 8, &i2c_done);
|
||||
@@ -129,7 +145,7 @@ static inline void main_periodic_task( void ) {
|
||||
}
|
||||
|
||||
// if (gyro_state == 1) gyro_state = 0;
|
||||
if (gyro_state < INITIALISZED) gyro_state++;
|
||||
if (gyro_state < INITIALIZED) gyro_state++;
|
||||
|
||||
}
|
||||
|
||||
@@ -140,36 +156,41 @@ static inline void main_periodic_task( void ) {
|
||||
|
||||
static inline void main_event_task( void ) {
|
||||
|
||||
if (gyro_state == INITIALISZED && gyro_ready_for_read && i2c_done) {
|
||||
if (gyro_state == INITIALIZED && gyro_ready_for_read &&
|
||||
( i2c_trans.status==I2CTransSuccess || i2c_trans.status==I2CTransFailed)) {
|
||||
/* reads 8 bytes from address 0x1b */
|
||||
i2c2.buf[0] = ITG3200_REG_TEMP_OUT_H;
|
||||
i2c2_transceive(ITG3200_ADDR,1, 8, &i2c_done);
|
||||
i2c_trans.type = I2CTransTxRx;
|
||||
i2c_trans.buf[0] = ITG3200_REG_TEMP_OUT_H;
|
||||
i2c_trans.len_w = 1;
|
||||
i2c_trans.len_r = 8;
|
||||
i2c_submit(&i2c2,&i2c_trans);
|
||||
// i2c2.buf[0] = ITG3200_REG_GYRO_XOUT_H;
|
||||
// i2c2_transceive(ITG3200_ADDR,1, 6, &i2c_done);
|
||||
gyro_ready_for_read = FALSE;
|
||||
reading_gyro = TRUE;
|
||||
}
|
||||
|
||||
if (reading_gyro && i2c_done) {
|
||||
if (reading_gyro &&
|
||||
(i2c_trans.status==I2CTransSuccess || i2c_trans.status==I2CTransFailed)) {
|
||||
// DEBUG_S5_ON();
|
||||
reading_gyro = FALSE;
|
||||
int16_t tgp, tgq, tgr;
|
||||
|
||||
int16_t ttemp = i2c2.buf[0]<<8 | i2c2.buf[1];
|
||||
|
||||
int16_t ttemp = i2c_trans.buf[0]<<8 | i2c_trans.buf[1];
|
||||
#if 1
|
||||
tgp = i2c2.buf[2]<<8 | i2c2.buf[3];
|
||||
tgq = i2c2.buf[4]<<8 | i2c2.buf[5];
|
||||
tgr = i2c2.buf[6]<<8 | i2c2.buf[7];
|
||||
tgp = i2c_trans.buf[2]<<8 | i2c_trans.buf[3];
|
||||
tgq = i2c_trans.buf[4]<<8 | i2c_trans.buf[5];
|
||||
tgr = i2c_trans.buf[6]<<8 | i2c_trans.buf[7];
|
||||
#endif
|
||||
#if 0
|
||||
tgp = __REVSH(*(int16_t*)(i2c2.buf+2));
|
||||
tgq = __REVSH(*(int16_t*)(i2c2.buf+4));
|
||||
tgr = __REVSH(*(int16_t*)(i2c2.buf+6));
|
||||
tgp = __REVSH(*(int16_t*)(i2c_trans.buf+2));
|
||||
tgq = __REVSH(*(int16_t*)(i2c_trans.buf+4));
|
||||
tgr = __REVSH(*(int16_t*)(i2c_trans.buf+6));
|
||||
#endif
|
||||
#if 0
|
||||
MyByteSwap16(*(int16_t*)(i2c2.buf+2), tgp);
|
||||
MyByteSwap16(*(int16_t*)(i2c2.buf+4), tgq);
|
||||
MyByteSwap16(*(int16_t*)(i2c2.buf+6), tgr);
|
||||
MyByteSwap16(*(int16_t*)(i2c_trans.buf+2), tgp);
|
||||
MyByteSwap16(*(int16_t*)(i2c_trans.buf+4), tgq);
|
||||
MyByteSwap16(*(int16_t*)(i2c_trans.buf+6), tgr);
|
||||
#endif
|
||||
struct Int32Rates g;
|
||||
RATES_ASSIGN(g, tgp, tgq, tgr);
|
||||
@@ -178,7 +199,7 @@ static inline void main_event_task( void ) {
|
||||
DOWNLINK_SEND_IMU_GYRO_RAW(DefaultChannel, &g.p, &g.q, &g.r);
|
||||
|
||||
uint8_t tmp[8];
|
||||
memcpy(tmp, i2c2.buf, 8);
|
||||
memcpy(tmp, i2c_trans.buf, 8);
|
||||
DOWNLINK_SEND_DEBUG(DefaultChannel, 8, tmp);
|
||||
|
||||
|
||||
@@ -242,7 +263,7 @@ void exti15_10_irq_handler(void) {
|
||||
|
||||
// DEBUG_S4_TOGGLE();
|
||||
|
||||
if (gyro_state == INITIALISZED) gyro_ready_for_read = TRUE;
|
||||
if (gyro_state == INITIALIZED) gyro_ready_for_read = TRUE;
|
||||
|
||||
// DEBUG_S4_OFF();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user