Move DMA start for tx/rx into the gap where SCL is still stretched so that there is no risk of receiving the first byte before DMA starts.

This commit is contained in:
px4dev 2013-01-25 21:35:32 -08:00
parent 24f6c6b121
commit 82f72b96de

View File

@ -158,6 +158,9 @@ i2c_interrupt(int irq, FAR void *context)
if (sr1 & I2C_SR1_ADDR) {
stm32_dmastart(tx_dma, NULL, NULL, false);
stm32_dmastart(rx_dma, NULL, NULL, false);
/* clear ADDR to ack our selection and get direction */
(void)rSR1; /* as recommended, re-read SR1 */
uint16_t sr2 = rSR2;
@ -166,13 +169,11 @@ i2c_interrupt(int irq, FAR void *context)
/* we are the transmitter */
direction = DIR_TX;
stm32_dmastart(tx_dma, NULL, NULL, false);
} else {
/* we are the receiver */
direction = DIR_RX;
stm32_dmastart(rx_dma, NULL, NULL, false);
}
}