mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-04 22:17:01 +08:00
[mcu_periph][i2c] add queue_full_cnt
- also set transaction status to I2CTransFailed on stm32 (like already the case on lpc21) - add I2C_ERRORS message to fixedwing
This commit is contained in:
@@ -2076,6 +2076,7 @@
|
|||||||
</message>
|
</message>
|
||||||
|
|
||||||
<message name="I2C_ERRORS" id="253">
|
<message name="I2C_ERRORS" id="253">
|
||||||
|
<field name="queue_full_cnt" type="uint16"/>
|
||||||
<field name="acknowledge_failure_cnt" type="uint16"/>
|
<field name="acknowledge_failure_cnt" type="uint16"/>
|
||||||
<field name="misplaced_start_or_stop_cnt" type="uint16"/>
|
<field name="misplaced_start_or_stop_cnt" type="uint16"/>
|
||||||
<field name="arbitration_lost_cnt" type="uint16"/>
|
<field name="arbitration_lost_cnt" type="uint16"/>
|
||||||
|
|||||||
@@ -336,8 +336,10 @@ bool_t i2c_submit(struct i2c_periph* p, struct i2c_transaction* t) {
|
|||||||
idx = p->trans_insert_idx + 1;
|
idx = p->trans_insert_idx + 1;
|
||||||
if (idx >= I2C_TRANSACTION_QUEUE_LEN) idx = 0;
|
if (idx >= I2C_TRANSACTION_QUEUE_LEN) idx = 0;
|
||||||
if (idx == p->trans_extract_idx) {
|
if (idx == p->trans_extract_idx) {
|
||||||
|
/* queue full */
|
||||||
|
periph->errors->queue_full_cnt++;
|
||||||
t->status = I2CTransFailed;
|
t->status = I2CTransFailed;
|
||||||
return FALSE; /* queue full */
|
return FALSE;
|
||||||
}
|
}
|
||||||
t->status = I2CTransPending;
|
t->status = I2CTransPending;
|
||||||
|
|
||||||
|
|||||||
@@ -1316,8 +1316,12 @@ bool_t i2c_submit(struct i2c_periph* periph, struct i2c_transaction* t) {
|
|||||||
uint8_t temp;
|
uint8_t temp;
|
||||||
temp = periph->trans_insert_idx + 1;
|
temp = periph->trans_insert_idx + 1;
|
||||||
if (temp >= I2C_TRANSACTION_QUEUE_LEN) temp = 0;
|
if (temp >= I2C_TRANSACTION_QUEUE_LEN) temp = 0;
|
||||||
if (temp == periph->trans_extract_idx)
|
if (temp == periph->trans_extract_idx) {
|
||||||
return FALSE; // queue full
|
// queue full
|
||||||
|
periph->errors->queue_full_cnt++;
|
||||||
|
t->status = I2CTransFailed;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
t->status = I2CTransPending;
|
t->status = I2CTransPending;
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,9 @@
|
|||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "generated/periodic_telemetry.h"
|
#include "generated/periodic_telemetry.h"
|
||||||
|
|
||||||
|
// I2C Error counters
|
||||||
|
#include "mcu_periph/i2c.h"
|
||||||
|
|
||||||
#if defined DOWNLINK
|
#if defined DOWNLINK
|
||||||
#define Downlink(x) x
|
#define Downlink(x) x
|
||||||
#else
|
#else
|
||||||
@@ -333,4 +336,147 @@
|
|||||||
#define PERIODIC_SEND_GX3_INFO(_trans, _dev) {}
|
#define PERIODIC_SEND_GX3_INFO(_trans, _dev) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C0
|
||||||
|
#define PERIODIC_SEND_I2C0_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c0_queue_full_cnt = i2c0.errors->queue_full_cnt; \
|
||||||
|
uint16_t i2c0_ack_fail_cnt = i2c0.errors->ack_fail_cnt; \
|
||||||
|
uint16_t i2c0_miss_start_stop_cnt = i2c0.errors->miss_start_stop_cnt; \
|
||||||
|
uint16_t i2c0_arb_lost_cnt = i2c0.errors->arb_lost_cnt; \
|
||||||
|
uint16_t i2c0_over_under_cnt = i2c0.errors->over_under_cnt; \
|
||||||
|
uint16_t i2c0_pec_recep_cnt = i2c0.errors->pec_recep_cnt; \
|
||||||
|
uint16_t i2c0_timeout_tlow_cnt = i2c0.errors->timeout_tlow_cnt; \
|
||||||
|
uint16_t i2c0_smbus_alert_cnt = i2c0.errors->smbus_alert_cnt; \
|
||||||
|
uint16_t i2c0_unexpected_event_cnt = i2c0.errors->unexpected_event_cnt; \
|
||||||
|
uint32_t i2c0_last_unexpected_event = i2c0.errors->last_unexpected_event; \
|
||||||
|
const uint8_t _bus0 = 0; \
|
||||||
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c0_queue_full_cnt, \
|
||||||
|
&i2c0_ack_fail_cnt, \
|
||||||
|
&i2c0_miss_start_stop_cnt, \
|
||||||
|
&i2c0_arb_lost_cnt, \
|
||||||
|
&i2c0_over_under_cnt, \
|
||||||
|
&i2c0_pec_recep_cnt, \
|
||||||
|
&i2c0_timeout_tlow_cnt, \
|
||||||
|
&i2c0_smbus_alert_cnt, \
|
||||||
|
&i2c0_unexpected_event_cnt, \
|
||||||
|
&i2c0_last_unexpected_event, \
|
||||||
|
&_bus0); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PERIODIC_SEND_I2C0_ERRORS(_trans, _dev) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C1
|
||||||
|
#define PERIODIC_SEND_I2C1_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c1_queue_full_cnt = i2c1.errors->queue_full_cnt; \
|
||||||
|
uint16_t i2c1_ack_fail_cnt = i2c1.errors->ack_fail_cnt; \
|
||||||
|
uint16_t i2c1_miss_start_stop_cnt = i2c1.errors->miss_start_stop_cnt; \
|
||||||
|
uint16_t i2c1_arb_lost_cnt = i2c1.errors->arb_lost_cnt; \
|
||||||
|
uint16_t i2c1_over_under_cnt = i2c1.errors->over_under_cnt; \
|
||||||
|
uint16_t i2c1_pec_recep_cnt = i2c1.errors->pec_recep_cnt; \
|
||||||
|
uint16_t i2c1_timeout_tlow_cnt = i2c1.errors->timeout_tlow_cnt; \
|
||||||
|
uint16_t i2c1_smbus_alert_cnt = i2c1.errors->smbus_alert_cnt; \
|
||||||
|
uint16_t i2c1_unexpected_event_cnt = i2c1.errors->unexpected_event_cnt; \
|
||||||
|
uint32_t i2c1_last_unexpected_event = i2c1.errors->last_unexpected_event; \
|
||||||
|
const uint8_t _bus1 = 1; \
|
||||||
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c1_queue_full_cnt, \
|
||||||
|
&i2c1_ack_fail_cnt, \
|
||||||
|
&i2c1_miss_start_stop_cnt, \
|
||||||
|
&i2c1_arb_lost_cnt, \
|
||||||
|
&i2c1_over_under_cnt, \
|
||||||
|
&i2c1_pec_recep_cnt, \
|
||||||
|
&i2c1_timeout_tlow_cnt, \
|
||||||
|
&i2c1_smbus_alert_cnt, \
|
||||||
|
&i2c1_unexpected_event_cnt, \
|
||||||
|
&i2c1_last_unexpected_event, \
|
||||||
|
&_bus1); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PERIODIC_SEND_I2C1_ERRORS(_trans, _dev) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C2
|
||||||
|
#define PERIODIC_SEND_I2C2_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c2_queue_full_cnt = i2c2.errors->queue_full_cnt; \
|
||||||
|
uint16_t i2c2_ack_fail_cnt = i2c2.errors->ack_fail_cnt; \
|
||||||
|
uint16_t i2c2_miss_start_stop_cnt = i2c2.errors->miss_start_stop_cnt; \
|
||||||
|
uint16_t i2c2_arb_lost_cnt = i2c2.errors->arb_lost_cnt; \
|
||||||
|
uint16_t i2c2_over_under_cnt = i2c2.errors->over_under_cnt; \
|
||||||
|
uint16_t i2c2_pec_recep_cnt = i2c2.errors->pec_recep_cnt; \
|
||||||
|
uint16_t i2c2_timeout_tlow_cnt = i2c2.errors->timeout_tlow_cnt; \
|
||||||
|
uint16_t i2c2_smbus_alert_cnt = i2c2.errors->smbus_alert_cnt; \
|
||||||
|
uint16_t i2c2_unexpected_event_cnt = i2c2.errors->unexpected_event_cnt; \
|
||||||
|
uint32_t i2c2_last_unexpected_event = i2c2.errors->last_unexpected_event; \
|
||||||
|
const uint8_t _bus2 = 2; \
|
||||||
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c2_queue_full_cnt, \
|
||||||
|
&i2c2_ack_fail_cnt, \
|
||||||
|
&i2c2_miss_start_stop_cnt, \
|
||||||
|
&i2c2_arb_lost_cnt, \
|
||||||
|
&i2c2_over_under_cnt, \
|
||||||
|
&i2c2_pec_recep_cnt, \
|
||||||
|
&i2c2_timeout_tlow_cnt, \
|
||||||
|
&i2c2_smbus_alert_cnt, \
|
||||||
|
&i2c2_unexpected_event_cnt, \
|
||||||
|
&i2c2_last_unexpected_event, \
|
||||||
|
&_bus2); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PERIODIC_SEND_I2C2_ERRORS(_trans, _dev) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C3
|
||||||
|
#define PERIODIC_SEND_I2C3_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c3_queue_full_cnt = i2c3.errors->queue_full_cnt; \
|
||||||
|
uint16_t i2c3_ack_fail_cnt = i2c3.errors->ack_fail_cnt; \
|
||||||
|
uint16_t i2c3_miss_start_stop_cnt = i2c3.errors->miss_start_stop_cnt; \
|
||||||
|
uint16_t i2c3_arb_lost_cnt = i2c3.errors->arb_lost_cnt; \
|
||||||
|
uint16_t i2c3_over_under_cnt = i2c3.errors->over_under_cnt; \
|
||||||
|
uint16_t i2c3_pec_recep_cnt = i2c3.errors->pec_recep_cnt; \
|
||||||
|
uint16_t i2c3_timeout_tlow_cnt = i2c3.errors->timeout_tlow_cnt; \
|
||||||
|
uint16_t i2c3_smbus_alert_cnt = i2c3.errors->smbus_alert_cnt; \
|
||||||
|
uint16_t i2c3_unexpected_event_cnt = i2c3.errors->unexpected_event_cnt; \
|
||||||
|
uint32_t i2c3_last_unexpected_event = i2c3.errors->last_unexpected_event; \
|
||||||
|
const uint8_t _bus3 = 3; \
|
||||||
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c3_queue_full_cnt, \
|
||||||
|
&i2c3_ack_fail_cnt, \
|
||||||
|
&i2c3_miss_start_stop_cnt, \
|
||||||
|
&i2c3_arb_lost_cnt, \
|
||||||
|
&i2c3_over_under_cnt, \
|
||||||
|
&i2c3_pec_recep_cnt, \
|
||||||
|
&i2c3_timeout_tlow_cnt, \
|
||||||
|
&i2c3_smbus_alert_cnt, \
|
||||||
|
&i2c3_unexpected_event_cnt, \
|
||||||
|
&i2c3_last_unexpected_event, \
|
||||||
|
&_bus3); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PERIODIC_SEND_I2C3_ERRORS(_trans, _dev) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SITL
|
||||||
|
#define PERIODIC_SEND_I2C_ERRORS(_trans, _dev) { \
|
||||||
|
static uint8_t _i2c_nb_cnt = 0; \
|
||||||
|
switch (_i2c_nb_cnt) { \
|
||||||
|
case 0: \
|
||||||
|
PERIODIC_SEND_I2C0_ERRORS(_trans, _dev); break; \
|
||||||
|
case 1: \
|
||||||
|
PERIODIC_SEND_I2C1_ERRORS(_trans, _dev); break; \
|
||||||
|
case 2: \
|
||||||
|
PERIODIC_SEND_I2C2_ERRORS(_trans, _dev); break; \
|
||||||
|
case 3: \
|
||||||
|
PERIODIC_SEND_I2C3_ERRORS(_trans, _dev); break; \
|
||||||
|
default: \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
_i2c_nb_cnt++; \
|
||||||
|
if (_i2c_nb_cnt == 3) \
|
||||||
|
_i2c_nb_cnt = 0; \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PERIODIC_SEND_I2C_ERRORS(_trans, _dev) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* AP_DOWNLINK_H */
|
#endif /* AP_DOWNLINK_H */
|
||||||
|
|||||||
@@ -774,6 +774,7 @@
|
|||||||
|
|
||||||
#ifdef USE_I2C0
|
#ifdef USE_I2C0
|
||||||
#define PERIODIC_SEND_I2C0_ERRORS(_trans, _dev) { \
|
#define PERIODIC_SEND_I2C0_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c0_queue_full_cnt = i2c0.errors->queue_full_cnt; \
|
||||||
uint16_t i2c0_ack_fail_cnt = i2c0.errors->ack_fail_cnt; \
|
uint16_t i2c0_ack_fail_cnt = i2c0.errors->ack_fail_cnt; \
|
||||||
uint16_t i2c0_miss_start_stop_cnt = i2c0.errors->miss_start_stop_cnt; \
|
uint16_t i2c0_miss_start_stop_cnt = i2c0.errors->miss_start_stop_cnt; \
|
||||||
uint16_t i2c0_arb_lost_cnt = i2c0.errors->arb_lost_cnt; \
|
uint16_t i2c0_arb_lost_cnt = i2c0.errors->arb_lost_cnt; \
|
||||||
@@ -785,6 +786,7 @@
|
|||||||
uint32_t i2c0_last_unexpected_event = i2c0.errors->last_unexpected_event; \
|
uint32_t i2c0_last_unexpected_event = i2c0.errors->last_unexpected_event; \
|
||||||
const uint8_t _bus0 = 0; \
|
const uint8_t _bus0 = 0; \
|
||||||
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c0_queue_full_cnt, \
|
||||||
&i2c0_ack_fail_cnt, \
|
&i2c0_ack_fail_cnt, \
|
||||||
&i2c0_miss_start_stop_cnt, \
|
&i2c0_miss_start_stop_cnt, \
|
||||||
&i2c0_arb_lost_cnt, \
|
&i2c0_arb_lost_cnt, \
|
||||||
@@ -802,6 +804,7 @@
|
|||||||
|
|
||||||
#ifdef USE_I2C1
|
#ifdef USE_I2C1
|
||||||
#define PERIODIC_SEND_I2C1_ERRORS(_trans, _dev) { \
|
#define PERIODIC_SEND_I2C1_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c1_queue_full_cnt = i2c1.errors->queue_full_cnt; \
|
||||||
uint16_t i2c1_ack_fail_cnt = i2c1.errors->ack_fail_cnt; \
|
uint16_t i2c1_ack_fail_cnt = i2c1.errors->ack_fail_cnt; \
|
||||||
uint16_t i2c1_miss_start_stop_cnt = i2c1.errors->miss_start_stop_cnt; \
|
uint16_t i2c1_miss_start_stop_cnt = i2c1.errors->miss_start_stop_cnt; \
|
||||||
uint16_t i2c1_arb_lost_cnt = i2c1.errors->arb_lost_cnt; \
|
uint16_t i2c1_arb_lost_cnt = i2c1.errors->arb_lost_cnt; \
|
||||||
@@ -813,6 +816,7 @@
|
|||||||
uint32_t i2c1_last_unexpected_event = i2c1.errors->last_unexpected_event; \
|
uint32_t i2c1_last_unexpected_event = i2c1.errors->last_unexpected_event; \
|
||||||
const uint8_t _bus1 = 1; \
|
const uint8_t _bus1 = 1; \
|
||||||
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c1_queue_full_cnt, \
|
||||||
&i2c1_ack_fail_cnt, \
|
&i2c1_ack_fail_cnt, \
|
||||||
&i2c1_miss_start_stop_cnt, \
|
&i2c1_miss_start_stop_cnt, \
|
||||||
&i2c1_arb_lost_cnt, \
|
&i2c1_arb_lost_cnt, \
|
||||||
@@ -830,6 +834,7 @@
|
|||||||
|
|
||||||
#ifdef USE_I2C2
|
#ifdef USE_I2C2
|
||||||
#define PERIODIC_SEND_I2C2_ERRORS(_trans, _dev) { \
|
#define PERIODIC_SEND_I2C2_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c2_queue_full_cnt = i2c2.errors->queue_full_cnt; \
|
||||||
uint16_t i2c2_ack_fail_cnt = i2c2.errors->ack_fail_cnt; \
|
uint16_t i2c2_ack_fail_cnt = i2c2.errors->ack_fail_cnt; \
|
||||||
uint16_t i2c2_miss_start_stop_cnt = i2c2.errors->miss_start_stop_cnt; \
|
uint16_t i2c2_miss_start_stop_cnt = i2c2.errors->miss_start_stop_cnt; \
|
||||||
uint16_t i2c2_arb_lost_cnt = i2c2.errors->arb_lost_cnt; \
|
uint16_t i2c2_arb_lost_cnt = i2c2.errors->arb_lost_cnt; \
|
||||||
@@ -841,6 +846,7 @@
|
|||||||
uint32_t i2c2_last_unexpected_event = i2c2.errors->last_unexpected_event; \
|
uint32_t i2c2_last_unexpected_event = i2c2.errors->last_unexpected_event; \
|
||||||
const uint8_t _bus2 = 2; \
|
const uint8_t _bus2 = 2; \
|
||||||
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c2_queue_full_cnt, \
|
||||||
&i2c2_ack_fail_cnt, \
|
&i2c2_ack_fail_cnt, \
|
||||||
&i2c2_miss_start_stop_cnt, \
|
&i2c2_miss_start_stop_cnt, \
|
||||||
&i2c2_arb_lost_cnt, \
|
&i2c2_arb_lost_cnt, \
|
||||||
@@ -856,6 +862,36 @@
|
|||||||
#define PERIODIC_SEND_I2C2_ERRORS(_trans, _dev) {}
|
#define PERIODIC_SEND_I2C2_ERRORS(_trans, _dev) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C3
|
||||||
|
#define PERIODIC_SEND_I2C3_ERRORS(_trans, _dev) { \
|
||||||
|
uint16_t i2c3_queue_full_cnt = i2c3.errors->queue_full_cnt; \
|
||||||
|
uint16_t i2c3_ack_fail_cnt = i2c3.errors->ack_fail_cnt; \
|
||||||
|
uint16_t i2c3_miss_start_stop_cnt = i2c3.errors->miss_start_stop_cnt; \
|
||||||
|
uint16_t i2c3_arb_lost_cnt = i2c3.errors->arb_lost_cnt; \
|
||||||
|
uint16_t i2c3_over_under_cnt = i2c3.errors->over_under_cnt; \
|
||||||
|
uint16_t i2c3_pec_recep_cnt = i2c3.errors->pec_recep_cnt; \
|
||||||
|
uint16_t i2c3_timeout_tlow_cnt = i2c3.errors->timeout_tlow_cnt; \
|
||||||
|
uint16_t i2c3_smbus_alert_cnt = i2c3.errors->smbus_alert_cnt; \
|
||||||
|
uint16_t i2c3_unexpected_event_cnt = i2c3.errors->unexpected_event_cnt; \
|
||||||
|
uint32_t i2c3_last_unexpected_event = i2c3.errors->last_unexpected_event; \
|
||||||
|
const uint8_t _bus3 = 3; \
|
||||||
|
DOWNLINK_SEND_I2C_ERRORS(_trans, _dev, \
|
||||||
|
&i2c3_queue_full_cnt, \
|
||||||
|
&i2c3_ack_fail_cnt, \
|
||||||
|
&i2c3_miss_start_stop_cnt, \
|
||||||
|
&i2c3_arb_lost_cnt, \
|
||||||
|
&i2c3_over_under_cnt, \
|
||||||
|
&i2c3_pec_recep_cnt, \
|
||||||
|
&i2c3_timeout_tlow_cnt, \
|
||||||
|
&i2c3_smbus_alert_cnt, \
|
||||||
|
&i2c3_unexpected_event_cnt, \
|
||||||
|
&i2c3_last_unexpected_event, \
|
||||||
|
&_bus3); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PERIODIC_SEND_I2C3_ERRORS(_trans, _dev) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef SITL
|
#ifndef SITL
|
||||||
#define PERIODIC_SEND_I2C_ERRORS(_trans, _dev) { \
|
#define PERIODIC_SEND_I2C_ERRORS(_trans, _dev) { \
|
||||||
static uint8_t _i2c_nb_cnt = 0; \
|
static uint8_t _i2c_nb_cnt = 0; \
|
||||||
@@ -866,6 +902,8 @@
|
|||||||
PERIODIC_SEND_I2C1_ERRORS(_trans, _dev); break; \
|
PERIODIC_SEND_I2C1_ERRORS(_trans, _dev); break; \
|
||||||
case 2: \
|
case 2: \
|
||||||
PERIODIC_SEND_I2C2_ERRORS(_trans, _dev); break; \
|
PERIODIC_SEND_I2C2_ERRORS(_trans, _dev); break; \
|
||||||
|
case 3: \
|
||||||
|
PERIODIC_SEND_I2C3_ERRORS(_trans, _dev); break; \
|
||||||
default: \
|
default: \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ struct i2c_periph {
|
|||||||
|
|
||||||
|
|
||||||
struct i2c_errors {
|
struct i2c_errors {
|
||||||
|
volatile uint16_t queue_full_cnt;
|
||||||
volatile uint16_t ack_fail_cnt;
|
volatile uint16_t ack_fail_cnt;
|
||||||
volatile uint16_t miss_start_stop_cnt;
|
volatile uint16_t miss_start_stop_cnt;
|
||||||
volatile uint16_t arb_lost_cnt;
|
volatile uint16_t arb_lost_cnt;
|
||||||
@@ -126,6 +127,7 @@ struct i2c_errors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define ZEROS_ERR_COUNTER(_i2c_err) { \
|
#define ZEROS_ERR_COUNTER(_i2c_err) { \
|
||||||
|
_i2c_err.queue_full_cnt = 0; \
|
||||||
_i2c_err.ack_fail_cnt = 0; \
|
_i2c_err.ack_fail_cnt = 0; \
|
||||||
_i2c_err.miss_start_stop_cnt = 0; \
|
_i2c_err.miss_start_stop_cnt = 0; \
|
||||||
_i2c_err.arb_lost_cnt = 0; \
|
_i2c_err.arb_lost_cnt = 0; \
|
||||||
|
|||||||
Reference in New Issue
Block a user