|
|
|
|
|
|
|
|
// TODO: is this correct if the prior use didn't send stop? |
|
|
// TODO: is this correct if the prior use didn't send stop? |
|
|
port->MSR = LPI2C_MSR_PLTF | LPI2C_MSR_ALF | LPI2C_MSR_NDF | LPI2C_MSR_SDF | LPI2C_MSR_FEF; // clear flags |
|
|
port->MSR = LPI2C_MSR_PLTF | LPI2C_MSR_ALF | LPI2C_MSR_NDF | LPI2C_MSR_SDF | LPI2C_MSR_FEF; // clear flags |
|
|
|
|
|
|
|
|
|
|
|
// these delays are an ugly kludge for BNO080 |
|
|
|
|
|
// https://forum.pjrc.com/threads/58268 |
|
|
|
|
|
// TODO: need more robust error recovery!! |
|
|
|
|
|
if (status & (LPI2C_MSR_ALF | LPI2C_MSR_NDF)) { |
|
|
|
|
|
delayMicroseconds(300); // min=120 |
|
|
|
|
|
} else if (status & (LPI2C_MSR_PLTF | LPI2C_MSR_FEF)) { |
|
|
|
|
|
delayMicroseconds(60); // min=30 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//printf("MSR=%lX, MCR:%lx, MFSR=%lX\n", status, port->MCR, port->MFSR); |
|
|
//printf("MSR=%lX, MCR:%lx, MFSR=%lX\n", status, port->MCR, port->MFSR); |
|
|
|
|
|
|
|
|
// Wonder if MFSR we should maybe clear it? |
|
|
// Wonder if MFSR we should maybe clear it? |