Pregunta bastante simple, pero no pude encontrar ninguna instrucción al respecto. Estoy usando un STM32G070
Estoy interactuando con un ADS1231 que usa DOUT / ~DRDY en el mismo pin, y me pregunto si también hay una manera de usar el pin de interrupción como entrada. Esencialmente lo que quiero hacer:
[Dentro de la ISR:]
Encontré una respuesta interesante en otro hilo, usando la misma parte ( https://electronics.stackexchange.com/a/339742/281491 )
Yo lo haría completamente de otra manera.
Configure el pin SPI2 MISO como entrada GPIO. Configure la interrupción EXTI (flanco descendente) en este pin
En la interrupción EXTI: deshabilite EXTI, cambie este pin a MISO AF e inicie la transacción DMA de 3 bytes (envíe 3 bytes ficticios según sea necesario para generar el reloj para el ADS).
En la transferencia DMA, cambie el pin de interrupción completa a la entrada GPIO. Habilitar EXTI
Los pasos 2 y 3 se repetirán automáticamente en cada conversión.
¿Alguien puede dar más detalles sobre cómo haría las partes en negrita o cualquier otra solución?
Gracias
Hay tantas maneras de hacerlo como la gente puede pensar.
Su forma funcionará bien, aunque no es muy sofisticada ya que la MCU estará sentada en la interrupción esperando que se transfieran los bytes antes de salir de la interrupción. Si eso es todo lo que se necesita, es simple y efectivo.
La otra solución que encontraste es una de las soluciones más complejas, aunque las bibliotecas lo hacen fácil de hacer. Simplemente deshabilita la interrupción EXTI e inicia una transferencia impulsada por DMA e inmediatamente sale de la interrupción para volver a hacer lo que estaba haciendo. Los datos se transfieren en segundo plano y cuando se terminan los bytes, la interrupción de transferencia completa volverá a habilitar la interrupción EXTI.
Una solución entre estas podría iniciar una transferencia SPI impulsada por interrupción en EXTI y volver a habilitar EXTI cuando se transfieran bytes.
También hay muchas otras soluciones, solo elija una que se adapte al flujo de su programa y haga el trabajo sin agregar demasiada complejidad.
Su enfoque debería funcionar. El enfoque en el otro hilo es cuestionable, en mi humilde opinión. Con una velocidad de reloj de 5 MHz, usar DMA no tiene sentido, considerando que MCU es solo 64 MHz.
Kartman