diff --git a/conf/airframes/booz.xml b/conf/airframes/booz.xml index 7003dc6c38..f3314c51de 100644 --- a/conf/airframes/booz.xml +++ b/conf/airframes/booz.xml @@ -88,6 +88,39 @@ ctl.srcs += commands.c ctl.srcs += booz_telemetry.c + +# +# multitilt +# + +mtt.ARCHDIR = $(ARCHI) +mtt.ARCH = arm7tdmi +mtt.TARGET = mtt +mtt.TARGETDIR = mtt + +mtt.CFLAGS += -DIMU -DCONFIG=\"pprz_imu.h\" -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC(4e-3)' +mtt.srcs = main_mtt.c sys_time.c $(SRC_ARCH)/sys_time_hw.c $(SRC_ARCH)/armVIC.c + +mtt.CFLAGS += -DLED + +mtt.CFLAGS += -DUSE_UART1 -DUART1_BAUD=B57600 +mtt.srcs += $(SRC_ARCH)/uart_hw.c + +mtt.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_DEVICE=Uart1 +mtt.srcs += downlink.c pprz_transport.c + +mtt.CFLAGS += -DADC -DUSE_AD0 -DUSE_AD0_1 -DUSE_AD0_2 -DUSE_AD0_3 -DUSE_AD0_4 +mtt.srcs += $(SRC_ARCH)/adc_hw.c + +mtt.srcs += $(SRC_ARCH)/max1167.c + +mtt.srcs += imu_v3.c $(SRC_ARCH)/imu_v3_hw.c + +mtt.srcs += multitilt.c + +mtt.CFLAGS += -DIMU +mtt.srcs += link_imu.c + # # AHRS CPU # @@ -125,39 +158,6 @@ imu.CFLAGS += -DEKF_UPDATE_CONTINUOUS imu.srcs += link_imu.c -# -# multitilt -# - -mtt.ARCHDIR = $(ARCHI) -mtt.ARCH = arm7tdmi -mtt.TARGET = mtt -mtt.TARGETDIR = mtt - -mtt.CFLAGS += -DIMU -DCONFIG=\"pprz_imu.h\" -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC(4e-3)' -mtt.srcs = main_mtt.c sys_time.c $(SRC_ARCH)/sys_time_hw.c $(SRC_ARCH)/armVIC.c - -mtt.CFLAGS += -DLED - -mtt.CFLAGS += -DUSE_UART1 -DUART1_BAUD=B57600 -mtt.srcs += $(SRC_ARCH)/uart_hw.c - -mtt.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_DEVICE=Uart1 -mtt.srcs += downlink.c pprz_transport.c - -mtt.CFLAGS += -DADC -DUSE_AD0 -DUSE_AD0_1 -DUSE_AD0_2 -DUSE_AD0_3 -DUSE_AD0_4 -mtt.srcs += $(SRC_ARCH)/adc_hw.c - -mtt.srcs += $(SRC_ARCH)/max1167.c - -mtt.srcs += imu_v3.c - -mtt.srcs += multitilt.c - -mtt.CFLAGS += -DIMU -mtt.srcs += link_imu.c - - diff --git a/sw/airborne/arm7/actuators_buss_twi_blmc_hw.c b/sw/airborne/arm7/actuators_buss_twi_blmc_hw.c index bd99640489..341f61f247 100644 --- a/sw/airborne/arm7/actuators_buss_twi_blmc_hw.c +++ b/sw/airborne/arm7/actuators_buss_twi_blmc_hw.c @@ -2,8 +2,8 @@ uint8_t buss_twi_blmc_motor_power[BUSS_TWI_BLMC_NB]; volatile bool_t buss_twi_blmc_status; -volatile bool_t buss_twi_blmc_i2c_done; volatile uint8_t buss_twi_blmc_nb_err; +volatile bool_t buss_twi_blmc_i2c_done; volatile uint8_t buss_twi_blmc_idx; const uint8_t buss_twi_blmc_addr[BUSS_TWI_BLMC_NB] = { 0x52, 0x54, 0x56, 0x58 }; @@ -13,6 +13,6 @@ void actuators_init ( void ) { for (i=0; i 5) _50hz = 0; switch (_50hz) { case 0: - LED_TOGGLE(1); break; case 1: radio_control_periodic_task(); @@ -99,11 +114,14 @@ static inline void main_periodic_task( void ) { } -static inline void main_event_task( void ) { +STATIC_INLINE void booz_main_event_task( void ) { + // FIXME +#ifndef SITL DlEventCheckAndHandle(); LinkImuEventCheckAndHandle(); +#endif if (ppm_valid) { ppm_valid = FALSE; diff --git a/sw/airborne/main_booz.h b/sw/airborne/main_booz.h new file mode 100644 index 0000000000..efe7309fa8 --- /dev/null +++ b/sw/airborne/main_booz.h @@ -0,0 +1,14 @@ +#ifndef MAIN_BOOZ_H +#define MAIN_BOOZ_H + +#ifdef SITL +#define STATIC_INLINE +#else +#define STATIC_INLINE static inline +#endif + +STATIC_INLINE void booz_main_init( void ); +STATIC_INLINE void booz_main_periodic_task( void ); +STATIC_INLINE void booz_main_event_task( void ); + +#endif /* MAIN_BOOZ_H */ diff --git a/sw/airborne/main_mtt.c b/sw/airborne/main_mtt.c index 3b810e39ef..6c8f5a211d 100644 --- a/sw/airborne/main_mtt.c +++ b/sw/airborne/main_mtt.c @@ -8,7 +8,6 @@ #include "print.h" #include "adc.h" -#include "max1167.h" #include "imu_v3.h" #include "multitilt.h" @@ -32,14 +31,6 @@ static inline void main_event_task( void); static inline void ahrs_task( void ); -static void main_init_spi1( void ); - -static void SPI1_ISR(void) __attribute__((naked)); - -#define SPI_SLAVE_NONE 0 -#define SPI_SLAVE_MAX 1 - -uint8_t spi_cur_slave = SPI_SLAVE_NONE; int main( void ) { main_init(); @@ -56,9 +47,8 @@ static inline void main_init( void ) { sys_time_init(); uart1_init_tx(); adc_init(); - imu_init(); - main_init_spi1(); - max1167_init(); + imu_v3_init(); + multitilt_init(); link_imu_init(); int_enable(); @@ -105,7 +95,7 @@ static inline void ahrs_task( void ) { switch (mtt_status) { case MT_STATUS_UNINIT : { - imu_detect_vehicle_still(); + imu_v3_detect_vehicle_still(); #ifdef SEND_GYRO_RAW_AVG DOWNLINK_SEND_IMU_GYRO_RAW_AVG(&imu_vs_gyro_raw_avg[AXIS_X], &imu_vs_gyro_raw_avg[AXIS_Y], &imu_vs_gyro_raw_avg[AXIS_Z], \ &imu_vs_gyro_raw_var[AXIS_X], &imu_vs_gyro_raw_var[AXIS_Y], &imu_vs_gyro_raw_var[AXIS_Z]); @@ -144,42 +134,3 @@ static inline void ahrs_task( void ) { } } - -/* SSPCR0 settings */ -#define SSP_DDS 0x07 << 0 /* data size : 8 bits */ -#define SSP_FRF 0x00 << 4 /* frame format : SPI */ -#define SSP_CPOL 0x00 << 6 /* clock polarity : data captured on first clock transition */ -#define SSP_CPHA 0x00 << 7 /* clock phase : SCK idles low */ -#define SSP_SCR 0x0F << 8 /* serial clock rate : divide by 16 */ - -/* SSPCR1 settings */ -#define SSP_LBM 0x00 << 0 /* loopback mode : disabled */ -#define SSP_SSE 0x00 << 1 /* SSP enable : disabled */ -#define SSP_MS 0x00 << 2 /* master slave mode : master */ -#define SSP_SOD 0x00 << 3 /* slave output disable : don't care when master */ - -static void main_init_spi1( void ) { - /* setup pins for SSP (SCK, MISO, MOSI) */ - PINSEL1 |= 2 << 2 | 2 << 4 | 2 << 6; - - /* setup SSP */ - SSPCR0 = SSP_DDS | SSP_FRF | SSP_CPOL | SSP_CPHA | SSP_SCR; - SSPCR1 = SSP_LBM | SSP_MS | SSP_SOD; - SSPCPSR = 0x20; - - /* initialize interrupt vector */ - VICIntSelect &= ~VIC_BIT(VIC_SPI1); // SPI1 selected as IRQ - VICIntEnable = VIC_BIT(VIC_SPI1); // SPI1 interrupt enabled - VICVectCntl7 = VIC_ENABLE | VIC_SPI1; - VICVectAddr7 = (uint32_t)SPI1_ISR; // address of the ISR -} - -void SPI1_ISR(void) { - ISR_ENTRY(); - Max1167OnSpiInt(); - VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */ - ISR_EXIT(); -} - - - diff --git a/sw/airborne/sim/actuators_buss_twi_blmc_hw.c b/sw/airborne/sim/actuators_buss_twi_blmc_hw.c new file mode 100644 index 0000000000..bad8394983 --- /dev/null +++ b/sw/airborne/sim/actuators_buss_twi_blmc_hw.c @@ -0,0 +1,6 @@ +#include "actuators.h" + +volatile bool_t buss_twi_blmc_status; +volatile uint8_t buss_twi_blmc_nb_err; + +void actuators_init ( void ) {} diff --git a/sw/airborne/sim/actuators_buss_twi_blmc_hw.h b/sw/airborne/sim/actuators_buss_twi_blmc_hw.h new file mode 100644 index 0000000000..1106ca9725 --- /dev/null +++ b/sw/airborne/sim/actuators_buss_twi_blmc_hw.h @@ -0,0 +1,14 @@ +#ifndef ACTUATORS_BUSS_TWI_BLMC_HW_H +#define ACTUATORS_BUSS_TWI_BLMC_HW_H + +#include "std.h" + +extern volatile bool_t buss_twi_blmc_status; +extern volatile uint8_t buss_twi_blmc_nb_err; + +#define SERVOS_TICS_OF_USEC(s) SYS_TICS_OF_USEC(s) +#define ChopServo(x,a,b) Chop(x, a, b) +#define Actuator(i) actuators[i] +#define ActuatorsCommit() {} + +#endif /* ACTUATORS_BUSS_TWI_BLMC_HW_H */ diff --git a/sw/airborne/sim/adc_hw.c b/sw/airborne/sim/adc_hw.c new file mode 100644 index 0000000000..71d7901746 --- /dev/null +++ b/sw/airborne/sim/adc_hw.c @@ -0,0 +1,3 @@ +#include "adc.h" + +void adc_buf_channel(uint8_t adc_channel, struct adc_buf* s, uint8_t av_nb_sample) {} diff --git a/sw/airborne/sim/i2c_hw.c b/sw/airborne/sim/i2c_hw.c new file mode 100644 index 0000000000..386cffa0e2 --- /dev/null +++ b/sw/airborne/sim/i2c_hw.c @@ -0,0 +1,4 @@ +#include "i2c.h" + +void i2c_hw_init ( void ) {} + diff --git a/sw/airborne/sim/i2c_hw.h b/sw/airborne/sim/i2c_hw.h new file mode 100644 index 0000000000..50b2a78d00 --- /dev/null +++ b/sw/airborne/sim/i2c_hw.h @@ -0,0 +1,9 @@ +#ifndef I2C_HW_H +#define I2C_HW_H + +#define I2cSendStart() {} + +extern void i2c_hw_init(void); + + +#endif /* I2C_HW_H */ diff --git a/sw/airborne/sim/imu_v3_hw.c b/sw/airborne/sim/imu_v3_hw.c new file mode 100644 index 0000000000..d22b6ad389 --- /dev/null +++ b/sw/airborne/sim/imu_v3_hw.c @@ -0,0 +1,5 @@ +#include "imu_v3.h" + +void imu_v3_hw_init(void) { + +} diff --git a/sw/airborne/sim/imu_v3_hw.h b/sw/airborne/sim/imu_v3_hw.h new file mode 100644 index 0000000000..bfd1d52837 --- /dev/null +++ b/sw/airborne/sim/imu_v3_hw.h @@ -0,0 +1,7 @@ +#ifndef IMU_V3_HW_H +#define IMU_V3_HW_H + +extern void imu_v3_hw_init(void); + + +#endif /* IMU_V3_HW_H */ diff --git a/sw/simulator/Makefile b/sw/simulator/Makefile index 4992bdf1de..f93cffcf40 100644 --- a/sw/simulator/Makefile +++ b/sw/simulator/Makefile @@ -147,7 +147,7 @@ BOOZ_AB_SRCS += $(AB)/booz_autopilot.c BOOZ_AB_SRCS += $(AB)/commands.c CFLAGS += -DADC_CHANNEL_AX=1 -DADC_CHANNEL_AY=2 -DADC_CHANNEL_AZ=3 -DADC_CHANNEL_BAT=4 -BOOZ_AB_SRCS += $(AB)/imu_v3.c $(AB_ARCH)/imu_v3_hw.c +BOOZ_AB_SRCS += $(AB)/imu_v3.c $(AB_ARCH)/imu_v3_hw.c $(AB_ARCH)/adc_hw.c booz_sim: $(BOOZ_SIM_SRCS) $(BOOZ_AB_SRCS) diff --git a/sw/simulator/main_booz_sim.c b/sw/simulator/main_booz_sim.c index 057d792be1..23eb39c503 100644 --- a/sw/simulator/main_booz_sim.c +++ b/sw/simulator/main_booz_sim.c @@ -26,7 +26,8 @@ double disp_time; double foo_commands[] = {0., 0., 0., 0.}; -static gboolean timeout_callback(gpointer data); +static gboolean booz_sim_periodic(gpointer data); +static inline void booz_sim_display(void); #ifdef SIM_UART static void sim_uart_init(void); @@ -43,21 +44,13 @@ static void on_DL_SETTING(IvyClientPtr app, void *user_data, int argc, char *arg volatile bool_t ppm_valid; #define RPM_OF_RAD_S(a) ((a)*60./M_PI) -static gboolean timeout_callback(gpointer data) { +static gboolean booz_sim_periodic(gpointer data) { booz_flight_model_run(DT, foo_commands); booz_sensors_model_run(); sim_time += DT; - if (sim_time >= disp_time) { - disp_time+= DT_DISPLAY; - booz_flightgear_send(); - IvySendMsg("148 BOOZ_RPMS %f %f %f %f", - RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_F]), - RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_B]), - RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_L]), - RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_R]) ); - } + booz_sim_display(); booz_estimator_p = bfm.state->ve[BFMS_P]; booz_estimator_q = bfm.state->ve[BFMS_Q]; @@ -118,7 +111,7 @@ int main ( int argc, char** argv) { GMainLoop *ml = g_main_loop_new(NULL, FALSE); - g_timeout_add(TIMEOUT_PERIOD, timeout_callback, NULL); + g_timeout_add(TIMEOUT_PERIOD, booz_sim_periodic, NULL); g_main_loop_run(ml); @@ -130,6 +123,24 @@ int main ( int argc, char** argv) { // Helpers //////////////////// + +static inline void booz_sim_display(void) { + if (sim_time >= disp_time) { + disp_time+= DT_DISPLAY; + booz_flightgear_send(); + IvySendMsg("148 BOOZ_RPMS %f %f %f %f", + RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_F]), + RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_B]), + RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_L]), + RPM_OF_RAD_S(bfm.state->ve[BFMS_OM_R]) ); + } +} + + + + + + #if defined DOWNLINK_TRANSPORT && DOWNLINK_TRANSPORT == IvyTransport static void ivy_transport_init(void) {