mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-30 11:37:06 +08:00
Merge branch 'master' into arduimu
This commit is contained in:
+18
-5
@@ -99,12 +99,13 @@ LDSCRIPT = $($(TARGET).LDSCRIPT)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
UNAME = $(shell uname -s)
|
#UNAME = $(shell uname -s)
|
||||||
|
MULTILIB = $(shell if $(CC) --print-multi-lib | grep thumb2 > /dev/null ; then echo "yes"; else echo "no"; fi)
|
||||||
|
|
||||||
CFLAGS = -I. -I./$(ARCH) $(INCLUDES) -D__thumb2__ -Wall -msoft-float -O$(OPT)
|
CFLAGS = -I. -I./$(ARCH) $(INCLUDES) -D__thumb2__ -Wall -msoft-float -O$(OPT)
|
||||||
CFLAGS += -Wl,gc-sections
|
CFLAGS += -Wl,gc-sections
|
||||||
CFLAGS += -mcpu=$(MCU) -mthumb -ansi
|
CFLAGS += -mcpu=$(MCU) -mthumb -ansi
|
||||||
ifeq ("$(UNAME)","Darwin")
|
ifeq ("$(MULTILIB)","yes")
|
||||||
CFLAGS += -mfix-cortex-m3-ldrd
|
CFLAGS += -mfix-cortex-m3-ldrd
|
||||||
endif
|
endif
|
||||||
CFLAGS += -std=gnu99
|
CFLAGS += -std=gnu99
|
||||||
@@ -126,12 +127,12 @@ CFLAGS += -Wswitch-default
|
|||||||
CFLAGS += $($(TARGET).CFLAGS)
|
CFLAGS += $($(TARGET).CFLAGS)
|
||||||
|
|
||||||
AFLAGS = -ahls -mapcs-32
|
AFLAGS = -ahls -mapcs-32
|
||||||
ifeq ("$(UNAME)","Darwin")
|
ifeq ("$(MULTILIB)","yes")
|
||||||
AFLAGS += -mcpu=$(MCU) -mthumb
|
AFLAGS += -mcpu=$(MCU) -mthumb
|
||||||
endif
|
endif
|
||||||
AFLAGS += -x assembler-with-cpp -Wa,-adhlns=$(OBJDIR)/$(<:.S=.lst),--g$(DEBUG)
|
AFLAGS += -x assembler-with-cpp -Wa,-adhlns=$(OBJDIR)/$(<:.S=.lst),--g$(DEBUG)
|
||||||
|
|
||||||
ifeq ("$(UNAME)","Darwin")
|
ifeq ("$(MULTILIB)","yes")
|
||||||
LDFLAGS = -T$(LDSCRIPT) -nostartfiles -O$(OPT) --gc-sections -mthumb -march=armv7 -mfix-cortex-m3-ldrd -msoft-float
|
LDFLAGS = -T$(LDSCRIPT) -nostartfiles -O$(OPT) --gc-sections -mthumb -march=armv7 -mfix-cortex-m3-ldrd -msoft-float
|
||||||
else
|
else
|
||||||
LDFLAGS = -D__thumb2__ -T$(LDSCRIPT) -nostartfiles -L$(GCC_LIB_DIR) -O$(OPT) --gc-sections
|
LDFLAGS = -D__thumb2__ -T$(LDSCRIPT) -nostartfiles -L$(GCC_LIB_DIR) -O$(OPT) --gc-sections
|
||||||
@@ -148,7 +149,7 @@ ODFLAGS = -S
|
|||||||
|
|
||||||
|
|
||||||
# Default target.
|
# Default target.
|
||||||
all: printcommands sizebefore build sizeafter
|
all: printcommands printmultilib sizebefore build sizeafter
|
||||||
|
|
||||||
printcommands:
|
printcommands:
|
||||||
@echo "Using CC = $(CC)"
|
@echo "Using CC = $(CC)"
|
||||||
@@ -158,6 +159,18 @@ printcommands:
|
|||||||
@echo "Using NM = $(NM)"
|
@echo "Using NM = $(NM)"
|
||||||
@echo "Using SIZE = $(SIZE)"
|
@echo "Using SIZE = $(SIZE)"
|
||||||
@echo "Using OOCD = $(OOCD)"
|
@echo "Using OOCD = $(OOCD)"
|
||||||
|
@echo "GCC version:"
|
||||||
|
@$(CC) --version
|
||||||
|
@echo "OOCD version:"
|
||||||
|
@$(OOCD) --version
|
||||||
|
|
||||||
|
ifeq ("$(MULTILIB)","yes")
|
||||||
|
printmultilib:
|
||||||
|
@echo "*** Using multilib ***"
|
||||||
|
else
|
||||||
|
printmultilib:
|
||||||
|
@echo "*** NOT using multilib ***"
|
||||||
|
endif
|
||||||
|
|
||||||
build: elf bin hex
|
build: elf bin hex
|
||||||
# lss sym
|
# lss sym
|
||||||
|
|||||||
@@ -0,0 +1,244 @@
|
|||||||
|
<!-- this is an asctec frame equiped with Lisa/M and generic china pwm motor controllers -->
|
||||||
|
|
||||||
|
<airframe name="lisa_asctec">
|
||||||
|
|
||||||
|
<servos min="0" neutral="0" max="0xff">
|
||||||
|
<servo name="FRONT" no="0" min="1000" neutral="1000" max="2000"/>
|
||||||
|
<servo name="BACK" no="1" min="1000" neutral="1000" max="2000"/>
|
||||||
|
<servo name="LEFT" no="2" min="1000" neutral="1000" max="2000"/>
|
||||||
|
<servo name="RIGHT" no="3" min="1000" neutral="1000" max="2000"/>
|
||||||
|
</servos>
|
||||||
|
|
||||||
|
<commands>
|
||||||
|
<axis name="PITCH" failsafe_value="0"/>
|
||||||
|
<axis name="ROLL" failsafe_value="0"/>
|
||||||
|
<axis name="YAW" failsafe_value="0"/>
|
||||||
|
<axis name="THRUST" failsafe_value="0"/>
|
||||||
|
</commands>
|
||||||
|
|
||||||
|
<command_laws>
|
||||||
|
<!--<let var="aileron" value="@ROLL * AILEVON_AILERON_RATE"/>
|
||||||
|
<let var="elevator" value="@PITCH * AILEVON_ELEVATOR_RATE"/>
|
||||||
|
<set servo="MOTOR" value="@THROTTLE"/>
|
||||||
|
<set servo="AILEVON_LEFT" value="$elevator + $aileron"/>
|
||||||
|
<set servo="AILEVON_RIGHT" value="$elevator - $aileron"/>
|
||||||
|
-->
|
||||||
|
<set servo="FRONT" value="0"/>
|
||||||
|
<set servo="BACK" value="1"/>
|
||||||
|
<set servo="LEFT" value="2"/>
|
||||||
|
<set servo="RIGHT" value="3"/>
|
||||||
|
|
||||||
|
</command_laws>
|
||||||
|
|
||||||
|
<!-- for the sim -->
|
||||||
|
<section name="ACTUATORS_MKK" prefix="ACTUATORS_MKK_">
|
||||||
|
<define name="NB" value="4"/>
|
||||||
|
<define name="ADDR" value="{ 0x52, 0x54, 0x56, 0x58 }"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section name="SUPERVISION" prefix="SUPERVISION_">
|
||||||
|
<define name="MIN_MOTOR" value="1090"/>
|
||||||
|
<define name="MAX_MOTOR" value="2000"/>
|
||||||
|
<define name="TRIM_A" value="0"/>
|
||||||
|
<define name="TRIM_E" value="0"/>
|
||||||
|
<define name="TRIM_R" value="0"/>
|
||||||
|
<define name="NB_MOTOR" value="4"/>
|
||||||
|
<define name="SCALE" value="256"/>
|
||||||
|
<define name="ROLL_COEF" value="{ 0 , 0, 256, -256 }"/>
|
||||||
|
<define name="PITCH_COEF" value="{ 256, -256, 0, 0 }"/>
|
||||||
|
<define name="YAW_COEF" value="{ -256, -256, 256, 256 }"/>
|
||||||
|
<define name="THRUST_COEF" value="{ 256, 256, 256, 256 }"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="IMU" prefix="IMU_">
|
||||||
|
<define name="GYRO_P_NEUTRAL" value="27"/>
|
||||||
|
<define name="GYRO_Q_NEUTRAL" value="-10"/>
|
||||||
|
<define name="GYRO_R_NEUTRAL" value="20"/>
|
||||||
|
<define name="GYRO_P_SENS" value="5.0" integer="16"/>
|
||||||
|
<define name="GYRO_Q_SENS" value="5.0" integer="16"/>
|
||||||
|
<define name="GYRO_R_SENS" value="5.0" integer="16"/>
|
||||||
|
<define name="GYRO_PQ_SENS" value="0.0" integer="16"/>
|
||||||
|
<define name="GYRO_PR_SENS" value="0.0" integer="16"/>
|
||||||
|
<define name="GYRO_QR_SENS" value="0.0" integer="16"/>
|
||||||
|
|
||||||
|
<define name="ACCEL_X_NEUTRAL" value="4"/>
|
||||||
|
<define name="ACCEL_Y_NEUTRAL" value="-14"/>
|
||||||
|
<define name="ACCEL_Z_NEUTRAL" value="-5"/>
|
||||||
|
<define name="ACCEL_X_SENS" value="39" integer="16"/>
|
||||||
|
<define name="ACCEL_Y_SENS" value="39" integer="16"/>
|
||||||
|
<define name="ACCEL_Z_SENS" value="39" integer="16"/>
|
||||||
|
<define name="ACCEL_XY_SENS" value="0.0" integer="16"/>
|
||||||
|
<define name="ACCEL_XZ_SENS" value="0.0" integer="16"/>
|
||||||
|
<define name="ACCEL_YZ_SENS" value="0.0" integer="16"/>
|
||||||
|
|
||||||
|
<define name="MAG_X_NEUTRAL" value="0"/>
|
||||||
|
<define name="MAG_Y_NEUTRAL" value="0"/>
|
||||||
|
<define name="MAG_Z_NEUTRAL" value="0"/>
|
||||||
|
<define name="MAG_X_SENS" value="1." integer="16"/>
|
||||||
|
<define name="MAG_Y_SENS" value="1." integer="16"/>
|
||||||
|
<define name="MAG_Z_SENS" value="1." integer="16"/>
|
||||||
|
<define name="MAG_XY_SENS" value="0.0" integer="16"/>
|
||||||
|
<define name="MAG_XZ_SENS" value="0.0" integer="16"/>
|
||||||
|
<define name="MAG_YZ_SENS" value="0.0" integer="16"/>
|
||||||
|
|
||||||
|
<define name="BODY_TO_IMU_PHI" value="RadOfDeg( 0. )"/>
|
||||||
|
<define name="BODY_TO_IMU_THETA" value="RadOfDeg( 0. )"/>
|
||||||
|
<define name="BODY_TO_IMU_PSI" value="RadOfDeg( 45. )"/>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="AUTOPILOT">
|
||||||
|
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
|
||||||
|
<define name="MODE_AUTO1" value="AP_MODE_ATTITUDE_Z_HOLD"/>
|
||||||
|
<define name="MODE_AUTO2" value="AP_MODE_HOVER_Z_HOLD"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="BAT">
|
||||||
|
<define name="MILLIAMP_PER_PERCENT" value="0.86"/>
|
||||||
|
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
|
||||||
|
<define name="BATTERY_SENS" value="0.48" integer="16"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
|
||||||
|
|
||||||
|
<define name="SP_MAX_P" value="10000"/>
|
||||||
|
<define name="SP_MAX_Q" value="10000"/>
|
||||||
|
<define name="SP_MAX_R" value="10000"/>
|
||||||
|
|
||||||
|
<define name="GAIN_P" value="-400"/>
|
||||||
|
<define name="GAIN_Q" value="-400"/>
|
||||||
|
<define name="GAIN_R" value="-350"/>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
|
||||||
|
|
||||||
|
<!-- setpoints -->
|
||||||
|
<define name="SP_MAX_PHI" value="RadOfDeg(45.)"/>
|
||||||
|
<define name="SP_MAX_THETA" value="RadOfDeg(45.)"/>
|
||||||
|
<define name="SP_MAX_R" value="RadOfDeg(90.)"/>
|
||||||
|
<define name="DEADBAND_R" value="250"/>
|
||||||
|
|
||||||
|
<!-- reference -->
|
||||||
|
<define name="REF_OMEGA_P" value="RadOfDeg(600)"/>
|
||||||
|
<define name="REF_ZETA_P" value="0.85"/>
|
||||||
|
<define name="REF_MAX_P" value="RadOfDeg(400.)"/>
|
||||||
|
<define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
|
||||||
|
|
||||||
|
<define name="REF_OMEGA_Q" value="RadOfDeg(600)"/>
|
||||||
|
<define name="REF_ZETA_Q" value="0.85"/>
|
||||||
|
<define name="REF_MAX_Q" value="RadOfDeg(400.)"/>
|
||||||
|
<define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
|
||||||
|
|
||||||
|
<define name="REF_OMEGA_R" value="RadOfDeg(500)"/>
|
||||||
|
<define name="REF_ZETA_R" value="0.85"/>
|
||||||
|
<define name="REF_MAX_R" value="RadOfDeg(180.)"/>
|
||||||
|
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
|
||||||
|
|
||||||
|
<!-- feedback -->
|
||||||
|
<define name="PHI_PGAIN" value="-550"/>
|
||||||
|
<define name="PHI_DGAIN" value="-210"/>
|
||||||
|
<define name="PHI_IGAIN" value="-200"/>
|
||||||
|
|
||||||
|
<define name="THETA_PGAIN" value="-550"/>
|
||||||
|
<define name="THETA_DGAIN" value="-210"/>
|
||||||
|
<define name="THETA_IGAIN" value="-200"/>
|
||||||
|
|
||||||
|
<define name="PSI_PGAIN" value="-600"/>
|
||||||
|
<define name="PSI_DGAIN" value="-200"/>
|
||||||
|
<define name="PSI_IGAIN" value="-10"/>
|
||||||
|
|
||||||
|
<!-- feedforward -->
|
||||||
|
<define name="PHI_DDGAIN" value=" 200"/>
|
||||||
|
<define name="THETA_DDGAIN" value=" 200"/>
|
||||||
|
<define name="PSI_DDGAIN" value=" 200"/>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="INS" prefix="INS_">
|
||||||
|
<define name="BARO_SENS" value="10." integer="16"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
|
||||||
|
<define name="MIN_ERR_Z" value="POS_BFP_OF_REAL(-10.)"/>
|
||||||
|
<define name="MAX_ERR_Z" value="POS_BFP_OF_REAL( 10.)"/>
|
||||||
|
<define name="MIN_ERR_ZD" value="SPEED_BFP_OF_REAL(-10.)"/>
|
||||||
|
<define name="MAX_ERR_ZD" value="SPEED_BFP_OF_REAL( 10.)"/>
|
||||||
|
<define name="MAX_SUM_ERR" value="2000000"/>
|
||||||
|
<define name="HOVER_KP" value="-500"/>
|
||||||
|
<define name="HOVER_KD" value="-200"/>
|
||||||
|
<define name="HOVER_KI" value="-100"/>
|
||||||
|
<!-- 1.5m/s for full stick : BOOZ_SPEED_I_OF_F(1.5) / (MAX_PPRZ/2) -->
|
||||||
|
<define name="RC_CLIMB_COEF" value ="163"/>
|
||||||
|
<!-- BOOZ_SPEED_I_OF_F(1.5) * 20% -->
|
||||||
|
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
|
||||||
|
<define name="INV_M" value ="0.2"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
|
||||||
|
<define name="PGAIN" value="-100"/>
|
||||||
|
<define name="DGAIN" value="-100"/>
|
||||||
|
<define name="IGAIN" value="-0"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="MISC">
|
||||||
|
<define name="FACE_REINJ_1" value="1024"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
<define name="ACTUATOR_NAMES" value="{"front_motor", "back_motor", "right_motor", "left_motor"}"/>
|
||||||
|
<define name="INITIAL_CONDITITONS" value=""reset00""/>
|
||||||
|
<define name="SENSORS_PARAMS" value=""nps_sensors_params_booz2_a1.h""/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<modules main_freq="512">
|
||||||
|
<load name="vehicle_interface_overo_link.xml"/>
|
||||||
|
</modules>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<firmware name="rotorcraft">
|
||||||
|
<target name="ap" board="lisa_m_1.0">
|
||||||
|
<!-- <define name="BOOZ_START_DELAY" value="1"/> -->
|
||||||
|
<subsystem name="radio_control" type="spektrum"/>
|
||||||
|
<subsystem name="actuators" type="pwm_supervision"/>
|
||||||
|
<subsystem name="telemetry" type="transparent"/>
|
||||||
|
<define name="SERVO_HZ" value="400"/>
|
||||||
|
<define name="RADIO_MODE" value="RADIO_AUX2"/>
|
||||||
|
<define name="RADIO_KILL_SWITCH" value="RADIO_GEAR"/>
|
||||||
|
<define name="RADIO_CONTROL_SPEKTRUM_SIGNS" value="\{1,1,-1,1,-1,-1,-1,1,1,1,1,1\}"/>
|
||||||
|
</target>
|
||||||
|
<target name="sim" board="pc">
|
||||||
|
<subsystem name="fdm" type="nps"/>
|
||||||
|
<subsystem name="radio_control" type="ppm"/>
|
||||||
|
<subsystem name="actuators" type="mkk"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<subsystem name="imu" type="aspirin"/>
|
||||||
|
<subsystem name="gps" type="ublox"/>
|
||||||
|
<subsystem name="ahrs" type="cmpl"/>
|
||||||
|
</firmware>
|
||||||
|
|
||||||
|
|
||||||
|
<firmware name="lisa_m_test_progs">
|
||||||
|
<target name="test_led" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_uart_lisam" board="lisa_m_1.0"/>
|
||||||
|
<!--target name="test_servos" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_telemetry" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_baro" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_imu" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_rc_spektrum" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_rc_ppm" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_adc" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_hmc5843" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_itg3200" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_adxl345" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_esc_mkk_simple" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_esc_asctecv1_simple" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_actuators_mkk" board="lisa_m_1.0"/>
|
||||||
|
<target name="test_actuators_asctecv1" board="lisa_m_1.0"/-->
|
||||||
|
</firmware>
|
||||||
|
</airframe>
|
||||||
@@ -210,6 +210,8 @@
|
|||||||
<define name="RADIO_MODE" value="RADIO_AUX2"/>
|
<define name="RADIO_MODE" value="RADIO_AUX2"/>
|
||||||
<define name="RADIO_KILL_SWITCH" value="RADIO_GEAR"/>
|
<define name="RADIO_KILL_SWITCH" value="RADIO_GEAR"/>
|
||||||
<define name="RADIO_CONTROL_SPEKTRUM_SIGNS" value="\{1,1,-1,1,-1,-1,-1,1,1,1,1,1\}"/>
|
<define name="RADIO_CONTROL_SPEKTRUM_SIGNS" value="\{1,1,-1,1,-1,-1,-1,1,1,1,1,1\}"/>
|
||||||
|
<define name = "RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT" value = "UART5"/>
|
||||||
|
<define name = "OVERRIDE_UART5_IRQ_HANDLER"/>
|
||||||
</target>
|
</target>
|
||||||
<target name="sim" board="pc">
|
<target name="sim" board="pc">
|
||||||
<subsystem name="fdm" type="nps"/>
|
<subsystem name="fdm" type="nps"/>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
|||||||
|
<firmware name="lisa_m_test_progs" boards="lisa_m_1.0"
|
||||||
|
description="test programs for lisa_m boards">
|
||||||
|
|
||||||
|
<!--target name="test telemetry" description="Sends ALIVE telemetry messages">
|
||||||
|
<param name="MODEM_PORT" values="UART1,UART2,UART3" default="UART2"/>
|
||||||
|
<param name="MODEM_BAUD" values="B9600,B57600,B115200" default="B57600"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="test baro" description="reads barometers and sends values over telemetry">
|
||||||
|
<param name="MODEM_PORT" values="UART1,UART2,UART3" default="UART2"/>
|
||||||
|
<param name="MODEM_BAUD" values="B9600,B57600,B115200" default="B57600"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="test imu b2" description="reads imu values over telemetry">
|
||||||
|
<param name="MODEM_PORT" values="UART1,UART2,UART3" default="UART2"/>
|
||||||
|
<param name="MODEM_BAUD" values="B9600,B57600,B115200" default="B57600"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="test spektrum" description="sends RADIO_CONTROL messages on telemetry">
|
||||||
|
<param name="MODEM_PORT" values="UART1,UART2,UART3" default="UART2"/>
|
||||||
|
<param name="MODEM_BAUD" values="B9600,B57600,B115200" default="B57600"/>
|
||||||
|
<param name="RADIO_CONTROL_LINK" values="UART1,UART2,UART3|UART5" default="UART3"/>
|
||||||
|
</target-->
|
||||||
|
|
||||||
|
</firmware>
|
||||||
@@ -2,7 +2,11 @@
|
|||||||
# Fixed point complementary filter using euler angles for attitude estimation
|
# Fixed point complementary filter using euler angles for attitude estimation
|
||||||
#
|
#
|
||||||
|
|
||||||
|
ifdef AHRS_ALIGNER_LED
|
||||||
ap.CFLAGS += -DUSE_AHRS_CMPL -DAHRS_ALIGNER_LED=$(AHRS_ALIGNER_LED) -DAHRS_FIXED_POINT
|
ap.CFLAGS += -DUSE_AHRS_CMPL -DAHRS_ALIGNER_LED=$(AHRS_ALIGNER_LED) -DAHRS_FIXED_POINT
|
||||||
|
else
|
||||||
|
ap.CFLAGS += -DUSE_AHRS_CMPL -DAHRS_FIXED_POINT
|
||||||
|
endif
|
||||||
ap.srcs += $(SRC_SUBSYSTEMS)/ahrs.c
|
ap.srcs += $(SRC_SUBSYSTEMS)/ahrs.c
|
||||||
ap.srcs += $(SRC_SUBSYSTEMS)/ahrs/ahrs_aligner.c
|
ap.srcs += $(SRC_SUBSYSTEMS)/ahrs/ahrs_aligner.c
|
||||||
ap.srcs += $(SRC_SUBSYSTEMS)/ahrs/ahrs_int_cmpl_euler.c
|
ap.srcs += $(SRC_SUBSYSTEMS)/ahrs/ahrs_int_cmpl_euler.c
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ endif
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
SYS_TIME_LED = 2
|
SYS_TIME_LED = 1
|
||||||
|
|
||||||
RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT = UART3
|
RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT = UART3
|
||||||
RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT = UART5
|
RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT = UART5
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
<makefile target="ap">
|
<makefile target="ap">
|
||||||
<file name="ins_arduimu_modified.c"/>
|
<file name="ins_arduimu_modified.c"/>
|
||||||
</makefile>
|
</makefile>
|
||||||
<!--makefile target="sim">
|
<makefile target="sim">
|
||||||
<file name="sim_MPPT.c"/>
|
<file_arch name="ins_arduimu.c"/>
|
||||||
</makefile-->
|
</makefile>
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,18 @@ SECTIONS
|
|||||||
} > ROM
|
} > ROM
|
||||||
*****/
|
*****/
|
||||||
|
|
||||||
|
. = ALIGN (4);
|
||||||
|
|
||||||
|
.ARM.exidx :
|
||||||
|
{
|
||||||
|
__exidx_start = .;
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
__exidx_end = .;
|
||||||
|
|
||||||
|
} >ROM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
/* .ctors .dtors are used for c++ constructors/destructors */
|
/* .ctors .dtors are used for c++ constructors/destructors */
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#include "interrupt_hw.h"
|
#include "interrupt_hw.h"
|
||||||
#include BOARD_CONFIG
|
#include BOARD_CONFIG
|
||||||
|
|
||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
// I2C Automaton //
|
// I2C Automaton //
|
||||||
///////////////////
|
///////////////////
|
||||||
@@ -56,22 +55,18 @@ __attribute__ ((always_inline)) static inline void I2cEndOfTransaction(struct i2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__ ((always_inline)) static inline void I2cFinished(struct i2c_periph* p, struct i2c_transaction* t) {
|
__attribute__ ((always_inline)) static inline void I2cSendStop(struct i2c_periph* p, struct i2c_transaction* t) {
|
||||||
|
((i2cRegs_t *)(p->reg_addr))->conset = _BV(STO);
|
||||||
// transaction finished with success
|
// transaction finished with success
|
||||||
t->status = I2CTransSuccess;
|
t->status = I2CTransSuccess;
|
||||||
I2cEndOfTransaction(p);
|
I2cEndOfTransaction(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__ ((always_inline)) static inline void I2cSendStop(struct i2c_periph* p, struct i2c_transaction* t) {
|
|
||||||
((i2cRegs_t *)(p->reg_addr))->conset = _BV(STO);
|
|
||||||
I2cFinished(p,t);
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((always_inline)) static inline void I2cFail(struct i2c_periph* p, struct i2c_transaction* t) {
|
__attribute__ ((always_inline)) static inline void I2cFail(struct i2c_periph* p, struct i2c_transaction* t) {
|
||||||
((i2cRegs_t *)(p->reg_addr))->conset = _BV(STO);
|
((i2cRegs_t *)(p->reg_addr))->conset = _BV(STO);
|
||||||
|
// transaction failed
|
||||||
t->status = I2CTransFailed;
|
t->status = I2CTransFailed;
|
||||||
p->status = I2CFailed;
|
// FIXME I2C should be reseted here ?
|
||||||
// FIXME I2C should be reseted here
|
|
||||||
I2cEndOfTransaction(p);
|
I2cEndOfTransaction(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,35 +114,7 @@ __attribute__ ((always_inline)) static inline void I2cAutomaton(int32_t state, s
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* error , we should have got NACK */
|
/* error , we should have got NACK */
|
||||||
I2cSendStop(p,trans);
|
I2cFail(p,trans);
|
||||||
}
|
|
||||||
break;
|
|
||||||
case I2C_MR_SLA_ACK: /* At least one char */
|
|
||||||
/* Wait and reply with ACK or NACK */
|
|
||||||
I2cReceive(p->reg_addr,p->idx_buf < trans->len_r - 1);
|
|
||||||
break;
|
|
||||||
case I2C_MR_SLA_NACK:
|
|
||||||
case I2C_MT_SLA_NACK:
|
|
||||||
I2cSendStart(p);
|
|
||||||
break;
|
|
||||||
case I2C_MT_SLA_ACK:
|
|
||||||
case I2C_MT_DATA_ACK:
|
|
||||||
if (p->idx_buf < trans->len_w) {
|
|
||||||
I2cSendByte(p->reg_addr,trans->buf[p->idx_buf]);
|
|
||||||
p->idx_buf++;
|
|
||||||
} else {
|
|
||||||
if (trans->type == I2CTransTxRx) {
|
|
||||||
trans->type = I2CTransRx; /* FIXME should not change type */
|
|
||||||
p->idx_buf = 0;
|
|
||||||
trans->slave_addr |= 1;
|
|
||||||
I2cSendStart(p);
|
|
||||||
} else {
|
|
||||||
if (trans->stop_after_transmit) {
|
|
||||||
I2cSendStop(p,trans);
|
|
||||||
} else {
|
|
||||||
I2cFinished(p,trans);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case I2C_MR_DATA_NACK:
|
case I2C_MR_DATA_NACK:
|
||||||
@@ -156,9 +123,33 @@ __attribute__ ((always_inline)) static inline void I2cAutomaton(int32_t state, s
|
|||||||
}
|
}
|
||||||
I2cSendStop(p,trans);
|
I2cSendStop(p,trans);
|
||||||
break;
|
break;
|
||||||
|
case I2C_MR_SLA_ACK: /* At least one char */
|
||||||
|
/* Wait and reply with ACK or NACK */
|
||||||
|
I2cReceive(p->reg_addr,p->idx_buf < trans->len_r - 1);
|
||||||
|
break;
|
||||||
|
case I2C_MR_SLA_NACK:
|
||||||
|
case I2C_MT_SLA_NACK:
|
||||||
|
/* Slave is not responding, transaction is failed */
|
||||||
|
I2cFail(p,trans);
|
||||||
|
break;
|
||||||
|
case I2C_MT_SLA_ACK:
|
||||||
|
case I2C_MT_DATA_ACK:
|
||||||
|
if (p->idx_buf < trans->len_w) {
|
||||||
|
I2cSendByte(p->reg_addr,trans->buf[p->idx_buf]);
|
||||||
|
p->idx_buf++;
|
||||||
|
} else {
|
||||||
|
if (trans->type == I2CTransTxRx) {
|
||||||
|
//trans->type = I2CTransRx; /* FIXME should not change type */
|
||||||
|
p->idx_buf = 0;
|
||||||
|
trans->slave_addr |= 1;
|
||||||
|
I2cSendStart(p);
|
||||||
|
} else {
|
||||||
|
I2cSendStop(p,trans);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
I2cSendStop(p,trans);
|
I2cFail(p,trans);
|
||||||
//I2cFail(p,trans);
|
|
||||||
/* FIXME log error */
|
/* FIXME log error */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/** ArduIMU simulation. OCaml binding.
|
||||||
|
* Sim provides IR sensor reading and airspeed
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include "generated/airframe.h"
|
||||||
|
|
||||||
|
#include <caml/mlvalues.h>
|
||||||
|
|
||||||
|
#include "estimator.h"
|
||||||
|
|
||||||
|
// Prevent undefined reference (from estimator.c)
|
||||||
|
#include "subsystems/sensors/infrared.h"
|
||||||
|
struct Infrared infrared;
|
||||||
|
|
||||||
|
// Arduimu empty implementation
|
||||||
|
#include "modules/ins/ins_arduimu.h"
|
||||||
|
|
||||||
|
float ArduIMU_data[NB_DATA];
|
||||||
|
|
||||||
|
float ins_roll_neutral;
|
||||||
|
float ins_pitch_neutral;
|
||||||
|
|
||||||
|
//mixer
|
||||||
|
float pitch_of_throttle_gain;
|
||||||
|
float throttle_slew;
|
||||||
|
|
||||||
|
void ArduIMU_init( void ) {}
|
||||||
|
void ArduIMU_periodic( void ) {}
|
||||||
|
void ArduIMU_periodicGPS( void ) {}
|
||||||
|
void IMU_Daten_verarbeiten( void ) {}
|
||||||
|
|
||||||
|
// Updates from Ocaml sim
|
||||||
|
float sim_air_speed;
|
||||||
|
|
||||||
|
value set_ir_and_airspeed(
|
||||||
|
value roll __attribute__ ((unused)),
|
||||||
|
value front __attribute__ ((unused)),
|
||||||
|
value top __attribute__ ((unused)),
|
||||||
|
value air_speed
|
||||||
|
) {
|
||||||
|
// Feed directly the estimator
|
||||||
|
estimator_phi = atan2(Int_val(roll), Int_val(top)) - ins_roll_neutral;
|
||||||
|
estimator_theta = atan2(Int_val(front), Int_val(top)) - ins_pitch_neutral;
|
||||||
|
sim_air_speed = Double_val(air_speed);
|
||||||
|
return Val_unit;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -117,3 +117,9 @@ value set_datalink_message(value s) {
|
|||||||
dl_parse_msg();
|
dl_parse_msg();
|
||||||
return Val_unit;
|
return Val_unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Required by electrical */
|
||||||
|
void adc_buf_channel(void* a __attribute__ ((unused)),
|
||||||
|
void* b __attribute__ ((unused)),
|
||||||
|
void* c __attribute__ ((unused))) {
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,23 +16,19 @@ float sim_air_speed;
|
|||||||
void ir_gain_calib(void) {
|
void ir_gain_calib(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
value set_ir(value roll __attribute__ ((unused)),
|
value set_ir_and_airspeed(
|
||||||
value front __attribute__ ((unused)),
|
value roll __attribute__ ((unused)),
|
||||||
value top __attribute__ ((unused)),
|
value front __attribute__ ((unused)),
|
||||||
value air_speed
|
value top __attribute__ ((unused)),
|
||||||
) {
|
value air_speed
|
||||||
|
) {
|
||||||
// INFRARED_TELEMETRY : Stupid hack to use with modules
|
// INFRARED_TELEMETRY : Stupid hack to use with modules
|
||||||
#if defined USE_INFRARED || USE_INFRARED_TELEMETRY
|
//#if defined USE_INFRARED || USE_INFRARED_TELEMETRY
|
||||||
infrared.roll = Int_val(roll);
|
infrared.roll = Int_val(roll);
|
||||||
infrared.pitch = Int_val(front);
|
infrared.pitch = Int_val(front);
|
||||||
infrared.top = Int_val(top);
|
infrared.top = Int_val(top);
|
||||||
#endif
|
//#endif
|
||||||
sim_air_speed = Double_val(air_speed);
|
sim_air_speed = Double_val(air_speed);
|
||||||
return Val_unit;
|
return Val_unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Required by infrared.c:ir_init() */
|
|
||||||
void adc_buf_channel(void* a __attribute__ ((unused)),
|
|
||||||
void* b __attribute__ ((unused)),
|
|
||||||
void* c __attribute__ ((unused))) {
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -42,10 +42,12 @@
|
|||||||
#define _LED_GPIO_CLK(i) i
|
#define _LED_GPIO_CLK(i) i
|
||||||
#define _LED_GPIO(i) i
|
#define _LED_GPIO(i) i
|
||||||
#define _LED_GPIO_PIN(i) i
|
#define _LED_GPIO_PIN(i) i
|
||||||
|
#define _LED_AFIO_REMAP(i) i
|
||||||
|
|
||||||
#define LED_GPIO_CLK(i) _LED_GPIO_CLK(LED_ ## i ## _GPIO_CLK)
|
#define LED_GPIO_CLK(i) _LED_GPIO_CLK(LED_ ## i ## _GPIO_CLK)
|
||||||
#define LED_GPIO(i) _LED_GPIO(LED_ ## i ## _GPIO)
|
#define LED_GPIO(i) _LED_GPIO(LED_ ## i ## _GPIO)
|
||||||
#define LED_GPIO_PIN(i) _LED_GPIO_PIN(LED_ ## i ## _GPIO_PIN)
|
#define LED_GPIO_PIN(i) _LED_GPIO_PIN(LED_ ## i ## _GPIO_PIN)
|
||||||
|
#define LED_AFIO_REMAP(i) _LED_AFIO_REMAP(LED_ ## i ## _AFIO_REMAP)
|
||||||
|
|
||||||
/* set pin as output */
|
/* set pin as output */
|
||||||
#define LED_INIT(i) { \
|
#define LED_INIT(i) { \
|
||||||
@@ -55,10 +57,11 @@
|
|||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; \
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; \
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \
|
||||||
GPIO_Init(LED_GPIO(i), &GPIO_InitStructure); \
|
GPIO_Init(LED_GPIO(i), &GPIO_InitStructure); \
|
||||||
|
LED_AFIO_REMAP(i); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LED_ON(i) { LED_GPIO(i)->BRR = LED_GPIO_PIN(i);}
|
#define LED_ON(i) {LED_GPIO(i)->BSRR = LED_GPIO_PIN(i);}
|
||||||
#define LED_OFF(i) {LED_GPIO(i)->BSRR = LED_GPIO_PIN(i);}
|
#define LED_OFF(i) { LED_GPIO(i)->BRR = LED_GPIO_PIN(i);}
|
||||||
#define LED_TOGGLE(i) { LED_GPIO(i)->ODR ^= LED_GPIO_PIN(i);}
|
#define LED_TOGGLE(i) { LED_GPIO(i)->ODR ^= LED_GPIO_PIN(i);}
|
||||||
|
|
||||||
#define LED_PERIODIC() {}
|
#define LED_PERIODIC() {}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
void mcu_arch_init(void) {
|
void mcu_arch_init(void) {
|
||||||
|
|
||||||
#ifdef HSE_TYPE_EXT_CLK
|
#ifdef HSE_TYPE_EXT_CLK
|
||||||
|
#warning Using external clock
|
||||||
/* Setup the microcontroller system.
|
/* Setup the microcontroller system.
|
||||||
* Initialize the Embedded Flash Interface,
|
* Initialize the Embedded Flash Interface,
|
||||||
* initialize the PLL and update the SystemFrequency variable.
|
* initialize the PLL and update the SystemFrequency variable.
|
||||||
@@ -43,7 +44,7 @@ void mcu_arch_init(void) {
|
|||||||
/* RCC system reset(for debug purpose) */
|
/* RCC system reset(for debug purpose) */
|
||||||
RCC_DeInit();
|
RCC_DeInit();
|
||||||
/* Enable HSE with external clock ( HSE_Bypass ) */
|
/* Enable HSE with external clock ( HSE_Bypass ) */
|
||||||
RCC_HSEConfig( RCC_HSE_Bypass );
|
RCC_HSEConfig( STM32_RCC_MODE );
|
||||||
/* Wait till HSE is ready */
|
/* Wait till HSE is ready */
|
||||||
ErrorStatus HSEStartUpStatus = RCC_WaitForHSEStartUp();
|
ErrorStatus HSEStartUpStatus = RCC_WaitForHSEStartUp();
|
||||||
if (HSEStartUpStatus != SUCCESS) {
|
if (HSEStartUpStatus != SUCCESS) {
|
||||||
@@ -62,7 +63,7 @@ void mcu_arch_init(void) {
|
|||||||
/* PCLK1 = HCLK/2 */
|
/* PCLK1 = HCLK/2 */
|
||||||
RCC_PCLK1Config(RCC_HCLK_Div2);
|
RCC_PCLK1Config(RCC_HCLK_Div2);
|
||||||
/* PLLCLK = 8MHz * 9 = 72 MHz */
|
/* PLLCLK = 8MHz * 9 = 72 MHz */
|
||||||
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
|
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, STM32_PLL_MULT);
|
||||||
/* Enable PLL */
|
/* Enable PLL */
|
||||||
RCC_PLLCmd(ENABLE);
|
RCC_PLLCmd(ENABLE);
|
||||||
/* Wait till PLL is ready */
|
/* Wait till PLL is ready */
|
||||||
@@ -73,6 +74,7 @@ void mcu_arch_init(void) {
|
|||||||
while(RCC_GetSYSCLKSource() != 0x08) {}
|
while(RCC_GetSYSCLKSource() != 0x08) {}
|
||||||
}
|
}
|
||||||
#else /* HSE_TYPE_EXT_CLK */
|
#else /* HSE_TYPE_EXT_CLK */
|
||||||
|
#warning Using normal system clock setup
|
||||||
SystemInit();
|
SystemInit();
|
||||||
#endif /* HSE_TYPE_EXT_CLK */
|
#endif /* HSE_TYPE_EXT_CLK */
|
||||||
/* Set the Vector Table base location at 0x08000000 */
|
/* Set the Vector Table base location at 0x08000000 */
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "mcu_periph/can_arch.h"
|
||||||
#include "mcu_periph/can.h"
|
#include "mcu_periph/can.h"
|
||||||
|
|
||||||
#include <stm32/rcc.h>
|
#include <stm32/rcc.h>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -85,7 +85,10 @@ typedef struct SpektrumStateStruct SpektrumStateType;
|
|||||||
|
|
||||||
SpektrumStateType PrimarySpektrumState = {1,0,0,0,0,0,0,0,0};
|
SpektrumStateType PrimarySpektrumState = {1,0,0,0,0,0,0,0,0};
|
||||||
#ifdef RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT
|
#ifdef RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT
|
||||||
|
#warning "Using secondary spektrum receiver."
|
||||||
SpektrumStateType SecondarySpektrumState = {1,0,0,0,0,0,0,0,0};
|
SpektrumStateType SecondarySpektrumState = {1,0,0,0,0,0,0,0,0};
|
||||||
|
#else
|
||||||
|
#warning "NOT using secondary spektrum receiver."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int16_t SpektrumBuf[SPEKTRUM_CHANNELS_PER_FRAME*MAX_SPEKTRUM_FRAMES];
|
int16_t SpektrumBuf[SPEKTRUM_CHANNELS_PER_FRAME*MAX_SPEKTRUM_FRAMES];
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
#ifndef CONFIG_LISA_V1_0_H
|
#ifndef CONFIG_LISA_V1_0_H
|
||||||
#define CONFIG_LISA_V1_0_H
|
#define CONFIG_LISA_V1_0_H
|
||||||
|
|
||||||
|
#define BOARD_LISA_L
|
||||||
|
|
||||||
#define AHB_CLK 72000000
|
#define AHB_CLK 72000000
|
||||||
|
|
||||||
/* Lisa uses an external clock instead of a crystal */
|
/* Lisa uses an external clock instead of a crystal */
|
||||||
#define HSE_TYPE_EXT_CLK
|
#define HSE_TYPE_EXT_CLK
|
||||||
|
#define STM32_RCC_MODE RCC_HSE_Bypass
|
||||||
|
#define STM32_PLL_MULT RCC_PLLMul_9
|
||||||
|
|
||||||
/* Onboard LEDs */
|
/* Onboard LEDs */
|
||||||
#define LED_1_BANK
|
#define LED_1_BANK
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
|
||||||
|
#include "subsystems/sensors/baro.h"
|
||||||
|
|
||||||
|
struct Baro baro;
|
||||||
|
struct BaroBoard baro_board;
|
||||||
|
struct i2c_transaction baro_trans;
|
||||||
|
|
||||||
|
|
||||||
|
static inline void baro_board_write_to_register(uint8_t baro_addr, uint8_t reg_addr, uint8_t val_msb, uint8_t val_lsb);
|
||||||
|
static inline void baro_board_read_from_register(uint8_t baro_addr, uint8_t reg_addr);
|
||||||
|
static inline void baro_board_set_current_register(uint8_t baro_addr, uint8_t reg_addr);
|
||||||
|
static inline void baro_board_read_from_current_register(uint8_t baro_addr);
|
||||||
|
|
||||||
|
// absolute
|
||||||
|
#define BARO_ABS_ADDR 0x90
|
||||||
|
// differential
|
||||||
|
#define BARO_DIFF_ADDR 0x92
|
||||||
|
|
||||||
|
void baro_init(void) {
|
||||||
|
baro.status = BS_UNINITIALIZED;
|
||||||
|
baro.absolute = 0;
|
||||||
|
baro.differential = 0;
|
||||||
|
baro_board.status = LBS_UNINITIALIZED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void baro_periodic(void) {
|
||||||
|
// check i2c_done
|
||||||
|
if (!i2c_idle(&i2c2)) return;
|
||||||
|
switch (baro_board.status) {
|
||||||
|
case LBS_UNINITIALIZED:
|
||||||
|
baro_board_send_reset();
|
||||||
|
baro_board.status = LBS_RESETED;
|
||||||
|
break;
|
||||||
|
case LBS_RESETED:
|
||||||
|
baro_board_send_config_abs();
|
||||||
|
baro_board.status = LBS_INITIALIZING_ABS;
|
||||||
|
break;
|
||||||
|
case LBS_INITIALIZING_ABS:
|
||||||
|
baro_board_set_current_register(BARO_ABS_ADDR, 0x00);
|
||||||
|
baro_board.status = LBS_INITIALIZING_ABS_1;
|
||||||
|
break;
|
||||||
|
case LBS_INITIALIZING_ABS_1:
|
||||||
|
baro_board_send_config_diff();
|
||||||
|
baro_board.status = LBS_INITIALIZING_DIFF;
|
||||||
|
break;
|
||||||
|
case LBS_INITIALIZING_DIFF:
|
||||||
|
baro_board_set_current_register(BARO_DIFF_ADDR, 0x00);
|
||||||
|
baro_board.status = LBS_INITIALIZING_DIFF_1;
|
||||||
|
// baro_board.status = LBS_UNINITIALIZED;
|
||||||
|
break;
|
||||||
|
case LBS_INITIALIZING_DIFF_1:
|
||||||
|
baro.status = BS_RUNNING;
|
||||||
|
case LBS_READ_DIFF:
|
||||||
|
baro_board_read_from_current_register(BARO_ABS_ADDR);
|
||||||
|
baro_board.status = LBS_READING_ABS;
|
||||||
|
break;
|
||||||
|
case LBS_READ_ABS:
|
||||||
|
baro_board_read_from_current_register(BARO_DIFF_ADDR);
|
||||||
|
baro_board.status = LBS_READING_DIFF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void baro_board_send_config_abs(void) {
|
||||||
|
baro_board_write_to_register(BARO_ABS_ADDR, 0x01, 0x86, 0x83);
|
||||||
|
}
|
||||||
|
|
||||||
|
void baro_board_send_config_diff(void) {
|
||||||
|
baro_board_write_to_register(BARO_DIFF_ADDR, 0x01, 0x84, 0x83);
|
||||||
|
}
|
||||||
|
|
||||||
|
void baro_board_send_reset(void) {
|
||||||
|
baro_trans.type = I2CTransTx;
|
||||||
|
baro_trans.slave_addr = 0x00;
|
||||||
|
baro_trans.len_w = 1;
|
||||||
|
baro_trans.buf[0] = 0x06;
|
||||||
|
i2c_submit(&i2c2,&baro_trans);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void baro_board_write_to_register(uint8_t baro_addr, uint8_t reg_addr, uint8_t val_msb, uint8_t val_lsb) {
|
||||||
|
baro_trans.type = I2CTransTx;
|
||||||
|
baro_trans.slave_addr = baro_addr;
|
||||||
|
baro_trans.len_w = 3;
|
||||||
|
baro_trans.buf[0] = reg_addr;
|
||||||
|
baro_trans.buf[1] = val_msb;
|
||||||
|
baro_trans.buf[2] = val_lsb;
|
||||||
|
i2c_submit(&i2c2,&baro_trans);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void baro_board_read_from_register(uint8_t baro_addr, uint8_t reg_addr) {
|
||||||
|
baro_trans.type = I2CTransTxRx;
|
||||||
|
baro_trans.slave_addr = baro_addr;
|
||||||
|
baro_trans.len_w = 1;
|
||||||
|
baro_trans.len_r = 2;
|
||||||
|
baro_trans.buf[0] = reg_addr;
|
||||||
|
i2c_submit(&i2c2,&baro_trans);
|
||||||
|
// i2c2.buf[0] = reg_addr;
|
||||||
|
// i2c2_transceive(baro_addr, 1, 2, &baro_board.i2c_done);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void baro_board_set_current_register(uint8_t baro_addr, uint8_t reg_addr) {
|
||||||
|
baro_trans.type = I2CTransTx;
|
||||||
|
baro_trans.slave_addr = baro_addr;
|
||||||
|
baro_trans.len_w = 1;
|
||||||
|
baro_trans.buf[0] = reg_addr;
|
||||||
|
i2c_submit(&i2c2,&baro_trans);
|
||||||
|
// i2c2.buf[0] = reg_addr;
|
||||||
|
// i2c2_transmit(baro_addr, 1, &baro_board.i2c_done);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void baro_board_read_from_current_register(uint8_t baro_addr) {
|
||||||
|
baro_trans.type = I2CTransRx;
|
||||||
|
baro_trans.slave_addr = baro_addr;
|
||||||
|
baro_trans.len_r = 2;
|
||||||
|
i2c_submit(&i2c2,&baro_trans);
|
||||||
|
// i2c2_receive(baro_addr, 2, &baro_board.i2c_done);
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* board specific fonctions for the lisa_m board
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOARDS_LISA_L_BARO_H
|
||||||
|
#define BOARDS_LISA_L_BARO_H
|
||||||
|
|
||||||
|
#include "std.h"
|
||||||
|
#include "mcu_periph/i2c.h"
|
||||||
|
|
||||||
|
enum LisaBaroStatus {
|
||||||
|
LBS_UNINITIALIZED,
|
||||||
|
LBS_RESETED,
|
||||||
|
LBS_INITIALIZING_ABS,
|
||||||
|
LBS_INITIALIZING_ABS_1,
|
||||||
|
LBS_INITIALIZING_DIFF,
|
||||||
|
LBS_INITIALIZING_DIFF_1,
|
||||||
|
LBS_IDLE,
|
||||||
|
LBS_READING_ABS,
|
||||||
|
LBS_READ_ABS,
|
||||||
|
LBS_READING_DIFF,
|
||||||
|
LBS_READ_DIFF
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BaroBoard {
|
||||||
|
enum LisaBaroStatus status;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct BaroBoard baro_board;
|
||||||
|
extern struct i2c_transaction baro_trans;
|
||||||
|
|
||||||
|
extern void baro_board_send_reset(void);
|
||||||
|
extern void baro_board_send_config_abs(void);
|
||||||
|
extern void baro_board_send_config_diff(void);
|
||||||
|
|
||||||
|
#define BaroEvent(_b_abs_handler, _b_diff_handler) { \
|
||||||
|
if (baro_board.status == LBS_READING_ABS && \
|
||||||
|
baro_trans.status != I2CTransPending) { \
|
||||||
|
baro_board.status = LBS_READ_ABS; \
|
||||||
|
if (baro_trans.status == I2CTransSuccess) { \
|
||||||
|
int16_t tmp = baro_trans.buf[0]<<8 | baro_trans.buf[1]; \
|
||||||
|
baro.absolute = tmp; \
|
||||||
|
_b_abs_handler(); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
else if (baro_board.status == LBS_READING_DIFF && \
|
||||||
|
baro_trans.status != I2CTransPending) { \
|
||||||
|
baro_board.status = LBS_READ_DIFF; \
|
||||||
|
if (baro_trans.status == I2CTransSuccess) { \
|
||||||
|
int16_t tmp = baro_trans.buf[0]<<8 | baro_trans.buf[1]; \
|
||||||
|
baro.differential = tmp; \
|
||||||
|
_b_diff_handler(); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* BOARDS_LISA_L_BARO_H */
|
||||||
@@ -1,19 +1,22 @@
|
|||||||
#ifndef CONFIG_LISA_M_1_0_H
|
#ifndef CONFIG_LISA_M_1_0_H
|
||||||
#define CONFIG_LISA_M_1_0_H
|
#define CONFIG_LISA_M_1_0_H
|
||||||
|
|
||||||
|
#define BOARD_LISA_M
|
||||||
|
|
||||||
#define AHB_CLK 72000000
|
#define AHB_CLK 72000000
|
||||||
|
|
||||||
/* Onboard LEDs */
|
/* Onboard LEDs */
|
||||||
#define LED_1_BANK
|
#define LED_1_BANK
|
||||||
#define LED_1_GPIO GPIOB
|
#define LED_1_GPIO GPIOB
|
||||||
#define LED_1_GPIO_CLK RCC_APB2Periph_GPIOB
|
#define LED_1_GPIO_CLK RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO
|
||||||
#define LED_1_GPIO_PIN GPIO_Pin_4
|
#define LED_1_GPIO_PIN GPIO_Pin_4
|
||||||
|
#define LED_1_AFIO_REMAP GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE)
|
||||||
|
|
||||||
#define LED_2_BANK
|
#define LED_2_BANK
|
||||||
#define LED_2_GPIO GPIOC
|
#define LED_2_GPIO GPIOC
|
||||||
#define LED_2_GPIO_CLK RCC_APB2Periph_GPIOC
|
#define LED_2_GPIO_CLK RCC_APB2Periph_GPIOC
|
||||||
#define LED_2_GPIO_PIN GPIO_Pin_13
|
#define LED_2_GPIO_PIN GPIO_Pin_13
|
||||||
|
#define LED_2_AFIO_REMAP ((void)0)
|
||||||
|
|
||||||
/* configuration for aspirin - and more generaly IMUs */
|
/* configuration for aspirin - and more generaly IMUs */
|
||||||
#define IMU_ACC_DRDY_RCC_GPIO RCC_APB2Periph_GPIOB
|
#define IMU_ACC_DRDY_RCC_GPIO RCC_APB2Periph_GPIOB
|
||||||
@@ -23,5 +26,10 @@
|
|||||||
#define ADC_CHANNEL_VSUPPLY 4
|
#define ADC_CHANNEL_VSUPPLY 4
|
||||||
#define DefaultVoltageOfAdc(adc) (0.01787109375*adc)
|
#define DefaultVoltageOfAdc(adc) (0.01787109375*adc)
|
||||||
|
|
||||||
|
#define BOARD_HAS_BARO
|
||||||
|
|
||||||
|
#define HSE_TYPE_EXT_CLK
|
||||||
|
#define STM32_RCC_MODE RCC_HSE_ON
|
||||||
|
#define STM32_PLL_MULT RCC_PLLMul_6
|
||||||
|
|
||||||
#endif /* CONFIG_LISA_M_1_0_H */
|
#endif /* CONFIG_LISA_M_1_0_H */
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ void actuators_init(void) {
|
|||||||
actuators_mkk.trans[i].type = I2CTransTx;
|
actuators_mkk.trans[i].type = I2CTransTx;
|
||||||
actuators_mkk.trans[i].len_w = 1;
|
actuators_mkk.trans[i].len_w = 1;
|
||||||
actuators_mkk.trans[i].slave_addr = actuators_addr[i];
|
actuators_mkk.trans[i].slave_addr = actuators_addr[i];
|
||||||
actuators_mkk.trans[i].stop_after_transmit = TRUE;
|
|
||||||
actuators_mkk.trans[i].status = I2CTransSuccess;
|
actuators_mkk.trans[i].status = I2CTransSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,9 @@ void autopilot_init(void) {
|
|||||||
autopilot_flight_time = 0;
|
autopilot_flight_time = 0;
|
||||||
autopilot_rc = TRUE;
|
autopilot_rc = TRUE;
|
||||||
autopilot_power_switch = FALSE;
|
autopilot_power_switch = FALSE;
|
||||||
|
#ifdef POWER_SWITCH_LED
|
||||||
LED_ON(POWER_SWITCH_LED); // POWER OFF
|
LED_ON(POWER_SWITCH_LED); // POWER OFF
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -95,11 +95,17 @@ extern uint16_t autopilot_flight_time;
|
|||||||
else autopilot_motors_on = TRUE; \
|
else autopilot_motors_on = TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef POWER_SWITCH_LED
|
||||||
#define autopilot_SetPowerSwitch(_v) { \
|
#define autopilot_SetPowerSwitch(_v) { \
|
||||||
autopilot_power_switch = _v; \
|
autopilot_power_switch = _v; \
|
||||||
if (_v) { LED_OFF(POWER_SWITCH_LED); } \
|
if (_v) { LED_OFF(POWER_SWITCH_LED); } \
|
||||||
else { LED_ON(POWER_SWITCH_LED); } \
|
else { LED_ON(POWER_SWITCH_LED); } \
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
#define autopilot_SetPowerSwitch(_v) { \
|
||||||
|
autopilot_power_switch = _v; \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef TRESHOLD_GROUND_DETECT
|
#ifndef TRESHOLD_GROUND_DETECT
|
||||||
#define TRESHOLD_GROUND_DETECT ACCEL_BFP_OF_REAL(15.)
|
#define TRESHOLD_GROUND_DETECT ACCEL_BFP_OF_REAL(15.)
|
||||||
|
|||||||
@@ -29,12 +29,62 @@
|
|||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
|
||||||
void Delay(__IO uint32_t nCount);
|
void Delay(__IO uint32_t nCount);
|
||||||
|
void led_on(int i);
|
||||||
|
void led_off(int i);
|
||||||
|
|
||||||
|
#ifdef BOARD_LISA_L
|
||||||
#define LED_PROGRAM_SIZE 26
|
#define LED_PROGRAM_SIZE 26
|
||||||
|
|
||||||
const int LED_PROG_ON[LED_PROGRAM_SIZE] = { 3, 5, 7, 1, -1, -1, -1, -1, 2, 4, 6, 0, 3, 5, 7, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
|
const int LED_PROG_ON[LED_PROGRAM_SIZE] = { 3, 5, 7, 1, -1, -1, -1, -1, 2, 4, 6, 0, 3, 5, 7, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
|
||||||
const int LED_PROG_OFF[LED_PROGRAM_SIZE] = {-1, -1, -1, -1, 3, 5, 7, 1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 5, 7, 1, 2, 4, 6, 0, -1, -1 };
|
const int LED_PROG_OFF[LED_PROGRAM_SIZE] = {-1, -1, -1, -1, 3, 5, 7, 1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 5, 7, 1, 2, 4, 6, 0, -1, -1 };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOARD_LISA_M
|
||||||
|
#define LED_PROGRAM_SIZE 10
|
||||||
|
|
||||||
|
const int LED_PROG_ON[LED_PROGRAM_SIZE] = { 1, 2, -1, -1, -1, 2, 1, -1, -1, -1 };
|
||||||
|
const int LED_PROG_OFF[LED_PROGRAM_SIZE] = { -1, -1, 1, 2, -1, -1, -1, 2, 1, -1 };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void led_on(int i) {
|
||||||
|
#ifdef BOARD_LISA_L
|
||||||
|
LED_ON(i);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOARD_LISA_M
|
||||||
|
switch (i) {
|
||||||
|
case 1:
|
||||||
|
LED_ON(1);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LED_ON(2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* ignore as we only have 2 led's for now on lisa/m */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_off(int i) {
|
||||||
|
#ifdef BOARD_LISA_L
|
||||||
|
LED_OFF(i);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOARD_LISA_M
|
||||||
|
switch (i) {
|
||||||
|
case 1:
|
||||||
|
LED_OFF(1);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LED_OFF(2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* ignore as we only have 2 led's for now on lisa/m */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -43,11 +93,11 @@ int main(void) {
|
|||||||
for (i=0; i< LED_PROGRAM_SIZE; i++)
|
for (i=0; i< LED_PROGRAM_SIZE; i++)
|
||||||
{
|
{
|
||||||
if (LED_PROG_ON[i] >= 0)
|
if (LED_PROG_ON[i] >= 0)
|
||||||
LED_ON(LED_PROG_ON[i]);
|
led_on(LED_PROG_ON[i]);
|
||||||
LED_PERIODIC();
|
LED_PERIODIC();
|
||||||
Delay(2000000);
|
Delay(2000000);
|
||||||
if (LED_PROG_OFF[i] >= 0)
|
if (LED_PROG_OFF[i] >= 0)
|
||||||
LED_OFF(LED_PROG_OFF[i]);
|
led_off(LED_PROG_OFF[i]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Antoine Drouin <poinix@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of paparazzi.
|
||||||
|
*
|
||||||
|
* paparazzi is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* paparazzi is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with paparazzi; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stm32/rcc.h>
|
||||||
|
#include <stm32/gpio.h>
|
||||||
|
|
||||||
|
#include <stm32/flash.h>
|
||||||
|
#include <stm32/misc.h>
|
||||||
|
|
||||||
|
#include BOARD_CONFIG
|
||||||
|
#include "mcu.h"
|
||||||
|
#include "mcu_periph/uart.h"
|
||||||
|
#include "sys_time.h"
|
||||||
|
|
||||||
|
static inline void main_init( void );
|
||||||
|
static inline void main_periodic( void );
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
|
||||||
|
main_init();
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (sys_time_periodic())
|
||||||
|
main_periodic();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void main_init( void ) {
|
||||||
|
mcu_init();
|
||||||
|
sys_time_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void main_periodic( void ) {
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
Uart1Transmit('a');
|
||||||
|
Uart2Transmit('b');
|
||||||
|
Uart3Transmit('c');
|
||||||
|
|
||||||
|
LED_OFF(1);
|
||||||
|
LED_OFF(2);
|
||||||
|
|
||||||
|
if (Uart1ChAvailable()) {
|
||||||
|
ch = Uart1Getch();
|
||||||
|
if (ch == 'a') {
|
||||||
|
LED_ON(1);
|
||||||
|
} else {
|
||||||
|
LED_ON(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Uart2ChAvailable()) {
|
||||||
|
ch = Uart2Getch();
|
||||||
|
if (ch == 'b') {
|
||||||
|
LED_ON(1);
|
||||||
|
} else {
|
||||||
|
LED_ON(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Uart3ChAvailable()) {
|
||||||
|
ch = Uart3Getch();
|
||||||
|
if (ch == 'c') {
|
||||||
|
LED_ON(1);
|
||||||
|
} else {
|
||||||
|
LED_ON(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -43,7 +43,6 @@ struct i2c_transaction {
|
|||||||
uint8_t slave_addr;
|
uint8_t slave_addr;
|
||||||
uint16_t len_r;
|
uint16_t len_r;
|
||||||
uint8_t len_w;
|
uint8_t len_w;
|
||||||
bool_t stop_after_transmit;
|
|
||||||
volatile uint8_t buf[I2C_BUF_LEN];
|
volatile uint8_t buf[I2C_BUF_LEN];
|
||||||
volatile enum I2CTransactionStatus status;
|
volatile enum I2CTransactionStatus status;
|
||||||
};
|
};
|
||||||
@@ -61,6 +60,10 @@ struct i2c_periph {
|
|||||||
volatile enum I2CStatus status;
|
volatile enum I2CStatus status;
|
||||||
volatile uint8_t idx_buf;
|
volatile uint8_t idx_buf;
|
||||||
void* reg_addr;
|
void* reg_addr;
|
||||||
|
void *init_struct;
|
||||||
|
uint16_t scl_pin;
|
||||||
|
uint16_t sda_pin;
|
||||||
|
struct i2c_errors *errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -132,40 +135,28 @@ extern bool_t i2c_idle(struct i2c_periph* p);
|
|||||||
extern bool_t i2c_submit(struct i2c_periph* p, struct i2c_transaction* t);
|
extern bool_t i2c_submit(struct i2c_periph* p, struct i2c_transaction* t);
|
||||||
|
|
||||||
#define I2CReceive(_p, _t, _s_addr, _len) { \
|
#define I2CReceive(_p, _t, _s_addr, _len) { \
|
||||||
_t.type = I2CTransRx; \
|
_t.type = I2CTransRx; \
|
||||||
_t.slave_addr = _s_addr; \
|
_t.slave_addr = _s_addr; \
|
||||||
_t.len_r = _len; \
|
_t.len_r = _len; \
|
||||||
_t.len_w = 0; \
|
_t.len_w = 0; \
|
||||||
_t.stop_after_transmit = TRUE; \
|
i2c_submit(&(_p),&(_t)); \
|
||||||
i2c_submit(&(_p),&(_t)); \
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#define I2CTransmit(_p, _t, _s_addr, _len) { \
|
#define I2CTransmit(_p, _t, _s_addr, _len) { \
|
||||||
_t.type = I2CTransTx; \
|
_t.type = I2CTransTx; \
|
||||||
_t.slave_addr = _s_addr; \
|
_t.slave_addr = _s_addr; \
|
||||||
_t.len_r = 0; \
|
_t.len_r = 0; \
|
||||||
_t.len_w = _len; \
|
_t.len_w = _len; \
|
||||||
_t.stop_after_transmit = TRUE; \
|
i2c_submit(&(_p),&(_t)); \
|
||||||
i2c_submit(&(_p),&(_t)); \
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#define I2CTransmitNoStop(_p, _t, _s_addr, _len) { \
|
#define I2CTransceive(_p, _t, _s_addr, _len_w, _len_r) { \
|
||||||
_t.type = I2CTransTx; \
|
_t.type = I2CTransTxRx; \
|
||||||
_t.slave_addr = _s_addr; \
|
_t.slave_addr = _s_addr; \
|
||||||
_t.len_r = 0; \
|
_t.len_r = _len_r; \
|
||||||
_t.len_w = _len; \
|
_t.len_w = _len_w; \
|
||||||
_t.stop_after_transmit = FALSE; \
|
i2c_submit(&(_p),&(_t)); \
|
||||||
i2c_submit(&(_p),&(_t)); \
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#define I2CTransceive(_p, _t, _s_addr, _len_w, _len_r) { \
|
|
||||||
_t.type = I2CTransTxRx; \
|
|
||||||
_t.slave_addr = _s_addr; \
|
|
||||||
_t.len_r = _len_r; \
|
|
||||||
_t.len_w = _len_w; \
|
|
||||||
_t.stop_after_transmit = TRUE; \
|
|
||||||
i2c_submit(&(_p),&(_t)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* I2C_H */
|
#endif /* I2C_H */
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ void ami601_init( void ) {
|
|||||||
}
|
}
|
||||||
ami601_i2c_trans.status = I2CTransSuccess;
|
ami601_i2c_trans.status = I2CTransSuccess;
|
||||||
ami601_i2c_trans.slave_addr = AMI601_SLAVE_ADDR;
|
ami601_i2c_trans.slave_addr = AMI601_SLAVE_ADDR;
|
||||||
ami601_i2c_trans.stop_after_transmit = TRUE;
|
|
||||||
ami601_nb_err = 0;
|
ami601_nb_err = 0;
|
||||||
ami601_status = AMI601_IDLE;
|
ami601_status = AMI601_IDLE;
|
||||||
|
|
||||||
@@ -26,7 +25,7 @@ void ami601_init( void ) {
|
|||||||
void ami601_read( void ) {
|
void ami601_read( void ) {
|
||||||
if (ami601_status != AMI601_IDLE) {
|
if (ami601_status != AMI601_IDLE) {
|
||||||
ami601_nb_err++;
|
ami601_nb_err++;
|
||||||
ami601_status == AMI601_IDLE;
|
ami601_status = AMI601_IDLE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ami601_status = AMI601_SENDING_REQ;
|
ami601_status = AMI601_SENDING_REQ;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ void hmc5843_init(void)
|
|||||||
{
|
{
|
||||||
hmc5843.i2c_trans.status = I2CTransSuccess;
|
hmc5843.i2c_trans.status = I2CTransSuccess;
|
||||||
hmc5843.i2c_trans.slave_addr = HMC5843_ADDR;
|
hmc5843.i2c_trans.slave_addr = HMC5843_ADDR;
|
||||||
hmc5843.i2c_trans.stop_after_transmit = TRUE;
|
|
||||||
|
|
||||||
hmc5843_arch_init();
|
hmc5843_arch_init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ static inline void main_periodic_task( void ) {
|
|||||||
trans.buf[0] = 0x04;
|
trans.buf[0] = 0x04;
|
||||||
trans.len_w = 1;
|
trans.len_w = 1;
|
||||||
trans.slave_addr = 0x58;
|
trans.slave_addr = 0x58;
|
||||||
trans.stop_after_transmit = TRUE;
|
|
||||||
i2c_submit(&ACTUATORS_MKK_DEV,&trans);
|
i2c_submit(&ACTUATORS_MKK_DEV,&trans);
|
||||||
|
|
||||||
LED_PERIODIC();
|
LED_PERIODIC();
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
|
|||||||
"GSpeed", scale gps.gspeed 1e2;
|
"GSpeed", scale gps.gspeed 1e2;
|
||||||
"Heading", scale (deg_of_rad gps.course) 1e5]
|
"Heading", scale (deg_of_rad gps.course) 1e5]
|
||||||
|
|
||||||
let infrared = fun ir_left ir_front ir_top _air_speed ->
|
let infrared_and_airspeed = fun ir_left ir_front ir_top _air_speed ->
|
||||||
try
|
try
|
||||||
DatalinkPprz.message_send "hitl" "HITL_INFRARED"
|
DatalinkPprz.message_send "hitl" "HITL_INFRARED"
|
||||||
["ac_id",Pprz.Int !my_id;
|
["ac_id",Pprz.Int !my_id;
|
||||||
|
|||||||
+2
-2
@@ -61,7 +61,7 @@ module type AIRCRAFT =
|
|||||||
val commands : pprz_t array -> unit
|
val commands : pprz_t array -> unit
|
||||||
(** Called once at init *)
|
(** Called once at init *)
|
||||||
|
|
||||||
val infrared : float -> float -> float -> float -> unit
|
val infrared_and_airspeed : float -> float -> float -> float -> unit
|
||||||
(** [infrared ir_left ir_front ir_top air_speed] Called on timer *)
|
(** [infrared ir_left ir_front ir_top air_speed] Called on timer *)
|
||||||
|
|
||||||
val gps : Gps.state -> unit
|
val gps : Gps.state -> unit
|
||||||
@@ -207,7 +207,7 @@ module Make(AircraftItl : AIRCRAFT_ITL) = struct
|
|||||||
let ir_left = sin phi_sensor *. !infrared_contrast
|
let ir_left = sin phi_sensor *. !infrared_contrast
|
||||||
and ir_front = sin theta_sensor *. !infrared_contrast
|
and ir_front = sin theta_sensor *. !infrared_contrast
|
||||||
and ir_top = cos phi_sensor *. cos theta_sensor *. !infrared_contrast in
|
and ir_top = cos phi_sensor *. cos theta_sensor *. !infrared_contrast in
|
||||||
Aircraft.infrared ir_left ir_front ir_top (FlightModel.get_air_speed !state)
|
Aircraft.infrared_and_airspeed ir_left ir_front ir_top (FlightModel.get_air_speed !state)
|
||||||
|
|
||||||
and gps_task = fun () ->
|
and gps_task = fun () ->
|
||||||
let (x,y,z) = FlightModel.get_xyz !state in
|
let (x,y,z) = FlightModel.get_xyz !state in
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ module type AIRCRAFT =
|
|||||||
val init : int -> GPack.box -> unit
|
val init : int -> GPack.box -> unit
|
||||||
val boot : Stdlib.value -> unit
|
val boot : Stdlib.value -> unit
|
||||||
val commands : Stdlib.pprz_t array -> unit
|
val commands : Stdlib.pprz_t array -> unit
|
||||||
val infrared : float -> float -> float -> float -> unit
|
val infrared_and_airspeed : float -> float -> float -> float -> unit
|
||||||
val gps : Gps.state -> unit
|
val gps : Gps.state -> unit
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -189,10 +189,10 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
|
|||||||
(* Functions called by the simulator *)
|
(* Functions called by the simulator *)
|
||||||
let commands = fun s -> rcommands := s
|
let commands = fun s -> rcommands := s
|
||||||
|
|
||||||
external set_ir : int -> int -> int -> float -> unit = "set_ir"
|
external set_ir_and_airspeed : int -> int -> int -> float -> unit = "set_ir_and_airspeed"
|
||||||
let infrared = fun ir_left ir_front ir_top air_speed ->
|
let infrared_and_airspeed = fun ir_left ir_front ir_top air_speed ->
|
||||||
(** ADC neutral is not taken into account in the soft sim (c.f. sim_ir.c)*)
|
(** ADC neutral is not taken into account in the soft sim (c.f. sim_ir.c)*)
|
||||||
set_ir (truncate ir_left) (truncate ir_front) (truncate ir_top) air_speed
|
set_ir_and_airspeed (truncate ir_left) (truncate ir_front) (truncate ir_top) air_speed
|
||||||
|
|
||||||
external use_gps_pos: int -> int -> int -> float -> float -> float -> float -> float -> bool -> float -> float -> unit = "sim_use_gps_pos_bytecode" "sim_use_gps_pos"
|
external use_gps_pos: int -> int -> int -> float -> float -> float -> float -> float -> bool -> float -> float -> unit = "sim_use_gps_pos_bytecode" "sim_use_gps_pos"
|
||||||
let gps = fun gps ->
|
let gps = fun gps ->
|
||||||
|
|||||||
Reference in New Issue
Block a user