i2c1 error counter telemetry added

increased i2c1 startup delay to 2 seconds
This commit is contained in:
Greg Horn
2010-06-21 19:24:03 +00:00
parent 8e76ae4cf1
commit 183ccd50b6
6 changed files with 53 additions and 2 deletions
+10
View File
@@ -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>
+1
View File
@@ -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;
+14
View File
@@ -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);
+18 -1
View File
@@ -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);
}
+8
View File
@@ -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);}