Gast
#3932264
Hallo,
habe folgendes Problem:
Ich will den MPU6050 über DMA auslesen, der Controller hängt nach dem
zweiten DMA-Durchlauf (sprint aus der externen [EXTI0] Interruptroutine
hinein) beim Ausdruck:
/* While the bus is busy */
while(I2C_GetFlagStatus(MPU6050_I2C, I2C_FLAG_BUSY));
Jetzt habe ich bereits gesehen, dass es ähnliche Probleme damit gab,
deren Lösungen unterschiedlich waren.
Allerdings funktioniert das Auslesen ohne dem DMA-Block über
MPU6050_I2C_BufferRead(...) gut.
Der einzige Unterschied, der mir aufgefallen ist, ist, dass beim
einfachen Auslesen des letzten Bytes das Acknowledge vorher deaktiviert
wird und eine Stop-Condition gesendet wird:
if (NumByteToRead == 1)
{
/* Disable Acknowledgement */
I2C_AcknowledgeConfig(MPU6050_I2C, DISABLE);
/* Send STOP Condition */
I2C_GenerateSTOP(MPU6050_I2C, ENABLE);
}
Fällt jemanden etwas dazu ein?
Gibt es eine einfache Problemlösung?
(main-File im Anhang; DMA-Auslesen angelehnt an:
http://letanphuc.net/2014/06/stm32-mpu6050-dma-i2c/)