mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-12-01 09:24:10 +01:00
OP-1275 move implementation specific enums out of common pios_i2c_priv.h
This commit is contained in:
parent
5986e72a29
commit
cd7c76aa13
@ -68,6 +68,7 @@ extern int32_t PIOS_I2C_Transfer(uint32_t i2c_id, const struct pios_i2c_txn txn_
|
|||||||
extern int32_t PIOS_I2C_Transfer_Callback(uint32_t i2c_id, const struct pios_i2c_txn txn_list[], uint32_t num_txns, void *callback);
|
extern int32_t PIOS_I2C_Transfer_Callback(uint32_t i2c_id, const struct pios_i2c_txn txn_list[], uint32_t num_txns, void *callback);
|
||||||
extern void PIOS_I2C_EV_IRQ_Handler(uint32_t i2c_id);
|
extern void PIOS_I2C_EV_IRQ_Handler(uint32_t i2c_id);
|
||||||
extern void PIOS_I2C_ER_IRQ_Handler(uint32_t i2c_id);
|
extern void PIOS_I2C_ER_IRQ_Handler(uint32_t i2c_id);
|
||||||
|
extern void PIOS_I2C_IRQ_Handler(uint32_t i2c_id);
|
||||||
extern void PIOS_I2C_GetDiagnostics(struct pios_i2c_fault_history *data, uint8_t *error_counts);
|
extern void PIOS_I2C_GetDiagnostics(struct pios_i2c_fault_history *data, uint8_t *error_counts);
|
||||||
|
|
||||||
#endif /* PIOS_I2C_H */
|
#endif /* PIOS_I2C_H */
|
||||||
|
@ -42,42 +42,6 @@ struct pios_i2c_adapter_cfg {
|
|||||||
struct stm32_irq error;
|
struct stm32_irq error;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum i2c_adapter_state {
|
|
||||||
I2C_STATE_FSM_FAULT = 0, /* Must be zero so undefined transitions land here */
|
|
||||||
|
|
||||||
I2C_STATE_BUS_ERROR,
|
|
||||||
|
|
||||||
I2C_STATE_STOPPED,
|
|
||||||
I2C_STATE_STOPPING,
|
|
||||||
I2C_STATE_STARTING,
|
|
||||||
|
|
||||||
I2C_STATE_R_MORE_TXN_ADDR,
|
|
||||||
I2C_STATE_R_MORE_TXN_PRE_ONE,
|
|
||||||
I2C_STATE_R_MORE_TXN_PRE_FIRST,
|
|
||||||
I2C_STATE_R_MORE_TXN_PRE_MIDDLE,
|
|
||||||
I2C_STATE_R_MORE_TXN_PRE_LAST,
|
|
||||||
I2C_STATE_R_MORE_TXN_POST_LAST,
|
|
||||||
|
|
||||||
I2C_STATE_R_LAST_TXN_ADDR,
|
|
||||||
I2C_STATE_R_LAST_TXN_PRE_ONE,
|
|
||||||
I2C_STATE_R_LAST_TXN_PRE_FIRST,
|
|
||||||
I2C_STATE_R_LAST_TXN_PRE_MIDDLE,
|
|
||||||
I2C_STATE_R_LAST_TXN_PRE_LAST,
|
|
||||||
I2C_STATE_R_LAST_TXN_POST_LAST,
|
|
||||||
|
|
||||||
I2C_STATE_W_MORE_TXN_ADDR,
|
|
||||||
I2C_STATE_W_MORE_TXN_MIDDLE,
|
|
||||||
I2C_STATE_W_MORE_TXN_LAST,
|
|
||||||
|
|
||||||
I2C_STATE_W_LAST_TXN_ADDR,
|
|
||||||
I2C_STATE_W_LAST_TXN_MIDDLE,
|
|
||||||
I2C_STATE_W_LAST_TXN_LAST,
|
|
||||||
|
|
||||||
I2C_STATE_NACK,
|
|
||||||
|
|
||||||
I2C_STATE_NUM_STATES /* Must be last */
|
|
||||||
};
|
|
||||||
|
|
||||||
enum pios_i2c_adapter_magic {
|
enum pios_i2c_adapter_magic {
|
||||||
PIOS_I2C_DEV_MAGIC = 0xa9a9b8b8,
|
PIOS_I2C_DEV_MAGIC = 0xa9a9b8b8,
|
||||||
};
|
};
|
||||||
@ -99,7 +63,7 @@ struct pios_i2c_adapter {
|
|||||||
bool bus_error;
|
bool bus_error;
|
||||||
bool nack;
|
bool nack;
|
||||||
|
|
||||||
volatile enum i2c_adapter_state curr_state;
|
volatile uint8_t curr_state;
|
||||||
const struct pios_i2c_txn *first_txn;
|
const struct pios_i2c_txn *first_txn;
|
||||||
const struct pios_i2c_txn *active_txn;
|
const struct pios_i2c_txn *active_txn;
|
||||||
const struct pios_i2c_txn *last_txn;
|
const struct pios_i2c_txn *last_txn;
|
||||||
|
@ -38,6 +38,15 @@
|
|||||||
|
|
||||||
#include <pios_i2c_priv.h>
|
#include <pios_i2c_priv.h>
|
||||||
|
|
||||||
|
// Error mask = Bus error | Arbitration lost | Overrun/Underrun
|
||||||
|
#define I2C_ISR_ERROR_MASK (I2C_ISR_BERR|I2C_ISR_ARLO|I2C_ISR_OVR)
|
||||||
|
#define I2C_ISR_ERR (I2C_IT_ERRI)
|
||||||
|
//Transfer Complete interrupt mask
|
||||||
|
#define I2C_ISR_BUF (I2C_IT_TCI)
|
||||||
|
// Stop Detection interrupt mask|Not Acknowledge received interrupt mask|
|
||||||
|
// Address Match interrupt mask|RX interrupt mask
|
||||||
|
#define I2C_ISR_EVT (I2C_IT_STOPI|I2C_IT_NACKI|I2C_IT_ADDRI|I2C_IT_RXI|I2C_IT_TXI)
|
||||||
|
|
||||||
// #define I2C_HALT_ON_ERRORS
|
// #define I2C_HALT_ON_ERRORS
|
||||||
|
|
||||||
enum i2c_adapter_event {
|
enum i2c_adapter_event {
|
||||||
@ -118,6 +127,9 @@ struct i2c_adapter_transition {
|
|||||||
enum i2c_adapter_state next_state[I2C_EVENT_NUM_EVENTS];
|
enum i2c_adapter_state next_state[I2C_EVENT_NUM_EVENTS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void i2c_irq_error_handler(struct pios_i2c_adapter *i2c_adapter);
|
||||||
|
static void i2c_irq_event_handler(struct pios_i2c_adapter *i2c_adapter);
|
||||||
|
|
||||||
static void i2c_adapter_process_auto(struct pios_i2c_adapter *i2c_adapter);
|
static void i2c_adapter_process_auto(struct pios_i2c_adapter *i2c_adapter);
|
||||||
static void i2c_adapter_inject_event(struct pios_i2c_adapter *i2c_adapter, enum i2c_adapter_event event);
|
static void i2c_adapter_inject_event(struct pios_i2c_adapter *i2c_adapter, enum i2c_adapter_event event);
|
||||||
static void i2c_adapter_fsm_init(struct pios_i2c_adapter *i2c_adapter);
|
static void i2c_adapter_fsm_init(struct pios_i2c_adapter *i2c_adapter);
|
||||||
@ -394,7 +406,7 @@ static void go_stopping(struct pios_i2c_adapter *i2c_adapter)
|
|||||||
|
|
||||||
static void go_stopped(struct pios_i2c_adapter *i2c_adapter)
|
static void go_stopped(struct pios_i2c_adapter *i2c_adapter)
|
||||||
{
|
{
|
||||||
I2C_ITConfig(i2c_adapter->cfg->regs, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR, DISABLE);
|
I2C_ITConfig(i2c_adapter->cfg->regs, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERRI, DISABLE);
|
||||||
I2C_AcknowledgeConfig(i2c_adapter->cfg->regs, ENABLE);
|
I2C_AcknowledgeConfig(i2c_adapter->cfg->regs, ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1005,6 +1017,19 @@ int32_t PIOS_I2C_Transfer(uint32_t i2c_id, const struct pios_i2c_txn txn_list[],
|
|||||||
0;
|
0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PIOS_I2C_IRQ_Handler(uint32_t i2c_id){
|
||||||
|
struct pios_i2c_adapter *i2c_adapter = (struct pios_i2c_adapter *)i2c_id;
|
||||||
|
|
||||||
|
bool valid = PIOS_I2C_validate(i2c_adapter);
|
||||||
|
|
||||||
|
PIOS_Assert(valid)
|
||||||
|
|
||||||
|
if(!(i2c_adapter->cfg->regs->ISR & I2C_ISR_ERROR_MASK)){
|
||||||
|
i2c_irq_event_handler(i2c_adapter);
|
||||||
|
} else {
|
||||||
|
i2c_irq_error_handler(i2c_adapter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PIOS_I2C_EV_IRQ_Handler(uint32_t i2c_id)
|
void PIOS_I2C_EV_IRQ_Handler(uint32_t i2c_id)
|
||||||
{
|
{
|
||||||
@ -1013,7 +1038,24 @@ void PIOS_I2C_EV_IRQ_Handler(uint32_t i2c_id)
|
|||||||
bool valid = PIOS_I2C_validate(i2c_adapter);
|
bool valid = PIOS_I2C_validate(i2c_adapter);
|
||||||
|
|
||||||
PIOS_Assert(valid)
|
PIOS_Assert(valid)
|
||||||
|
i2c_irq_event_handler(i2c_adapter );
|
||||||
|
}
|
||||||
|
|
||||||
|
void PIOS_I2C_ER_IRQ_Handler(uint32_t i2c_id)
|
||||||
|
{
|
||||||
|
struct pios_i2c_adapter *i2c_adapter = (struct pios_i2c_adapter *)i2c_id;
|
||||||
|
|
||||||
|
bool valid = PIOS_I2C_validate(i2c_adapter);
|
||||||
|
|
||||||
|
PIOS_Assert(valid)
|
||||||
|
i2c_irq_error_handler(i2c_adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void i2c_irq_event_handler(struct pios_i2c_adapter *i2c_adapter){
|
||||||
|
|
||||||
|
i2c_adapter->cfg->regs->ISR
|
||||||
uint32_t event = I2C_GetLastEvent(i2c_adapter->cfg->regs);
|
uint32_t event = I2C_GetLastEvent(i2c_adapter->cfg->regs);
|
||||||
|
|
||||||
#if defined(PIOS_I2C_DIAGNOSTICS)
|
#if defined(PIOS_I2C_DIAGNOSTICS)
|
||||||
@ -1132,14 +1174,8 @@ skip_event:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PIOS_I2C_ER_IRQ_Handler(uint32_t i2c_id)
|
void i2c_irq_error_handler(struct pios_i2c_adapter *i2c_adapter)
|
||||||
{
|
{
|
||||||
struct pios_i2c_adapter *i2c_adapter = (struct pios_i2c_adapter *)i2c_id;
|
|
||||||
|
|
||||||
bool valid = PIOS_I2C_validate(i2c_adapter);
|
|
||||||
|
|
||||||
PIOS_Assert(valid)
|
|
||||||
|
|
||||||
#if defined(PIOS_I2C_DIAGNOSTICS)
|
#if defined(PIOS_I2C_DIAGNOSTICS)
|
||||||
uint32_t event = I2C_GetLastEvent(i2c_adapter->cfg->regs);
|
uint32_t event = I2C_GetLastEvent(i2c_adapter->cfg->regs);
|
||||||
|
|
||||||
|
@ -38,6 +38,42 @@
|
|||||||
|
|
||||||
#include <pios_i2c_priv.h>
|
#include <pios_i2c_priv.h>
|
||||||
|
|
||||||
|
enum i2c_adapter_state {
|
||||||
|
I2C_STATE_FSM_FAULT = 0, /* Must be zero so undefined transitions land here */
|
||||||
|
|
||||||
|
I2C_STATE_BUS_ERROR,
|
||||||
|
|
||||||
|
I2C_STATE_STOPPED,
|
||||||
|
I2C_STATE_STOPPING,
|
||||||
|
I2C_STATE_STARTING,
|
||||||
|
|
||||||
|
I2C_STATE_R_MORE_TXN_ADDR,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_ONE,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_FIRST,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_MIDDLE,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_LAST,
|
||||||
|
I2C_STATE_R_MORE_TXN_POST_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_R_LAST_TXN_ADDR,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_ONE,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_FIRST,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_MIDDLE,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_LAST,
|
||||||
|
I2C_STATE_R_LAST_TXN_POST_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_W_MORE_TXN_ADDR,
|
||||||
|
I2C_STATE_W_MORE_TXN_MIDDLE,
|
||||||
|
I2C_STATE_W_MORE_TXN_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_W_LAST_TXN_ADDR,
|
||||||
|
I2C_STATE_W_LAST_TXN_MIDDLE,
|
||||||
|
I2C_STATE_W_LAST_TXN_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_NACK,
|
||||||
|
|
||||||
|
I2C_STATE_NUM_STATES /* Must be last */
|
||||||
|
};
|
||||||
|
|
||||||
// #define I2C_HALT_ON_ERRORS
|
// #define I2C_HALT_ON_ERRORS
|
||||||
|
|
||||||
enum i2c_adapter_event {
|
enum i2c_adapter_event {
|
||||||
|
@ -43,6 +43,42 @@
|
|||||||
|
|
||||||
#include <pios_i2c_priv.h>
|
#include <pios_i2c_priv.h>
|
||||||
|
|
||||||
|
enum i2c_adapter_state {
|
||||||
|
I2C_STATE_FSM_FAULT = 0, /* Must be zero so undefined transitions land here */
|
||||||
|
|
||||||
|
I2C_STATE_BUS_ERROR,
|
||||||
|
|
||||||
|
I2C_STATE_STOPPED,
|
||||||
|
I2C_STATE_STOPPING,
|
||||||
|
I2C_STATE_STARTING,
|
||||||
|
|
||||||
|
I2C_STATE_R_MORE_TXN_ADDR,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_ONE,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_FIRST,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_MIDDLE,
|
||||||
|
I2C_STATE_R_MORE_TXN_PRE_LAST,
|
||||||
|
I2C_STATE_R_MORE_TXN_POST_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_R_LAST_TXN_ADDR,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_ONE,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_FIRST,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_MIDDLE,
|
||||||
|
I2C_STATE_R_LAST_TXN_PRE_LAST,
|
||||||
|
I2C_STATE_R_LAST_TXN_POST_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_W_MORE_TXN_ADDR,
|
||||||
|
I2C_STATE_W_MORE_TXN_MIDDLE,
|
||||||
|
I2C_STATE_W_MORE_TXN_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_W_LAST_TXN_ADDR,
|
||||||
|
I2C_STATE_W_LAST_TXN_MIDDLE,
|
||||||
|
I2C_STATE_W_LAST_TXN_LAST,
|
||||||
|
|
||||||
|
I2C_STATE_NACK,
|
||||||
|
|
||||||
|
I2C_STATE_NUM_STATES /* Must be last */
|
||||||
|
};
|
||||||
|
|
||||||
// #define I2C_HALT_ON_ERRORS
|
// #define I2C_HALT_ON_ERRORS
|
||||||
|
|
||||||
enum i2c_adapter_event {
|
enum i2c_adapter_event {
|
||||||
|
Loading…
Reference in New Issue
Block a user