mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-06 16:58:48 +08:00
i2c1 error counter telemetry added
increased i2c1 startup delay to 2 seconds
This commit is contained in:
@@ -1515,6 +1515,16 @@
|
||||
<field name="zeta_r" type="float" />
|
||||
</message>
|
||||
|
||||
<message name="I2C_ERRORS" id="253">
|
||||
<field name="Acknowledge_failure" type="uint8"/>
|
||||
<field name="Misplaced_Start_or_Stop" type="uint8"/>
|
||||
<field name="Arbitration_lost" type="uint8"/>
|
||||
<field name="Overrun_or_Underrun" type="uint8"/>
|
||||
<field name="PEC_Error_in_reception" type="uint8"/>
|
||||
<field name="Timeout_or_Tlow_error" type="uint8"/>
|
||||
<field name="SMBus_alert" type="uint8"/>
|
||||
</message>
|
||||
|
||||
</class>
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
<message name="BOOZ2_CAM" period="1."/>
|
||||
<message name="BOOZ2_GPS" period=".25"/>
|
||||
<message name="BOOZ_INS" period=".25"/>
|
||||
<message name="I2C_ERRORS" period=".25"/>
|
||||
</mode>
|
||||
|
||||
<mode name="ppm">
|
||||
|
||||
@@ -114,7 +114,8 @@ void actuators_set(bool_t motors_on) {
|
||||
}
|
||||
#else /* ! ACTUATORS_ASCTEC_V2_PROTOCOL */
|
||||
void actuators_set(bool_t motors_on) {
|
||||
if (!cpu_time_sec) return; // FIXME
|
||||
// if (!cpu_time_sec) return; // FIXME
|
||||
if (cpu_time_sec < 2) return; // FIXME
|
||||
supervision_run(motors_on, FALSE, booz2_commands);
|
||||
#ifdef KILL_MOTORS
|
||||
DeviceBuf[0] = 0;
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
#include "booz2_ins.h"
|
||||
#include "booz_ahrs.h"
|
||||
|
||||
#include "i2c_hw.h"
|
||||
|
||||
extern uint8_t telemetry_mode_Main_DefaultChannel;
|
||||
|
||||
#ifdef USE_GPS
|
||||
@@ -752,6 +754,18 @@ extern uint8_t telemetry_mode_Main_DefaultChannel;
|
||||
); \
|
||||
}
|
||||
|
||||
#define PERIODIC_SEND_I2C_ERRORS(_chan) { \
|
||||
DOWNLINK_SEND_I2C_ERRORS(_chan, \
|
||||
&i2c_errc_ack_fail, \
|
||||
&i2c_errc_miss_start_stop, \
|
||||
&i2c_errc_arb_lost, \
|
||||
&i2c_errc_over_under, \
|
||||
&i2c_errc_pec_recep, \
|
||||
&i2c_errc_timeout_tlow, \
|
||||
&i2c_errc_smbus_alert \
|
||||
); \
|
||||
}
|
||||
|
||||
//TODO replace by BOOZ_EXTRA_ADC
|
||||
#ifdef BOOZ2_SONAR
|
||||
#define PERIODIC_SEND_BOOZ2_SONAR(_chan) DOWNLINK_SEND_BOOZ2_SONAR(_chan,&booz2_adc_1,&booz2_adc_2,&booz2_adc_3,&booz2_adc_4);
|
||||
|
||||
@@ -41,6 +41,14 @@ static const uint8_t i2c2_direction = I2C_TRANSMITTER;
|
||||
\
|
||||
}
|
||||
|
||||
uint16_t i2c_errc_ack_fail = 0;
|
||||
uint16_t i2c_errc_miss_start_stop = 0;
|
||||
uint16_t i2c_errc_arb_lost = 0;
|
||||
uint16_t i2c_errc_over_under = 0;
|
||||
uint16_t i2c_errc_pec_recep = 0;
|
||||
uint16_t i2c_errc_timeout_tlow = 0;
|
||||
uint16_t i2c_errc_smbus_alert = 0;
|
||||
|
||||
void i2c1_hw_init(void) {
|
||||
|
||||
DEBUG_SERVO1_INIT();
|
||||
@@ -198,30 +206,39 @@ void i2c1_ev_irq_handler(void) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void i2c1_er_irq_handler(void) {
|
||||
|
||||
DEBUG_S1_TOGGLE();
|
||||
|
||||
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_AF)) { /* Acknowledge failure */
|
||||
i2c_errc_ack_fail++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_AF);
|
||||
I2C_GenerateSTOP(I2C1, ENABLE);
|
||||
}
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_BERR)) { /* Misplaced Start or Stop condition */
|
||||
i2c_errc_miss_start_stop++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_BERR);
|
||||
}
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_ARLO)) { /* Arbitration lost */
|
||||
i2c_errc_arb_lost++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_ARLO);
|
||||
}
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_OVR)) { /* Overrun/Underrun */
|
||||
i2c_errc_over_under++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_OVR);
|
||||
}
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_PECERR)) { /* PEC Error in reception */
|
||||
i2c_errc_pec_recep++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_PECERR);
|
||||
}
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_TIMEOUT)) { /* Timeout or Tlow error */
|
||||
i2c_errc_timeout_tlow++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_TIMEOUT);
|
||||
}
|
||||
if (I2C_GetITStatus(I2C1, I2C_IT_SMBALERT)) { /* SMBus alert */
|
||||
i2c_errc_smbus_alert++;
|
||||
I2C_ClearITPendingBit(I2C1, I2C_IT_SMBALERT);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,14 @@ extern void i2c1_hw_init(void);
|
||||
extern void i2c1_ev_irq_handler(void);
|
||||
extern void i2c1_er_irq_handler(void);
|
||||
|
||||
extern uint16_t i2c_errc_ack_fail;
|
||||
extern uint16_t i2c_errc_miss_start_stop;
|
||||
extern uint16_t i2c_errc_arb_lost;
|
||||
extern uint16_t i2c_errc_over_under;
|
||||
extern uint16_t i2c_errc_pec_recep;
|
||||
extern uint16_t i2c_errc_timeout_tlow;
|
||||
extern uint16_t i2c_errc_smbus_alert;
|
||||
|
||||
|
||||
#define I2c1SendStart() { I2C_GenerateSTART(I2C1, ENABLE); I2C_ITConfig(I2C1, I2C_IT_EVT, ENABLE);}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user