Tengo la siguiente situación: Me dieron un AVR32UC3 (cosa muy bonita) y un dispositivo de medición. Estos dos se comunican a través de SPI, que funciona como se esperaba (después de jugar con los parámetros de SPI y así sucesivamente).
La estructura del programa es la siguiente:
- Inicia el dispositivo a través de SPI
- Iniciar la medición a través de SPI
- Espere a que se realice la medición (esto se señaliza a través de un GPIO - > Interrupt)
- Lea los datos de medición a través de SPI
- ve a 2
En este mismo momento, puedo adivinar aproximadamente cuánto tiempo tomará la medición (~ 3 ms). Actualmente ignoro la interrupción, estoy ocupado esperando en lugar de 3, luego leo los datos.
Ahora, para mi pregunta: me gustaría deshacerme de esa espera "ocupada". Por supuesto, si llega otra interrupción (de algún otro periférico), el código ejecutará esa interrupción de todos modos, pero el código de mi bucle principal no se procesará durante la espera. ¿Cómo puedo hacer esto "limpio" utilizando la propia interrupción?
La idea sería:
- Configuración de la fuente de interrupción + condiciones
- Comience la medición
- Ocurre la interrupción
- Recoger donde me fui
¿Cómo se ve el código fuente (pseudo-código) para algo como esto? ¿Cómo se hace esto CORRECTAMENTE?