Básicamente, tengo un programa que incrementa el contador cada vez que recibo una interrupción. El código es algo como esto:
void ISR(void)
{
static int counter=0;
counter++;
GPIO_SET(PIN1); // set the gpio pin
DELAY(10); // some short delay so that we can see it in scope nicely
GPIO_RESET(PIN1);//reset the pin
clearFlag();
}
El evento (en realidad es un temporizador) que dispara este ISR también desencadena algunas otras cosas (DMA, básicamente cada 8 eventos debería recibir una interrupción DMA, esto es por diseño del código)
En el código ISR de DMA, tengo otra configuración / restablecimiento de pin GPIO. Ahora:
-
Cuando miro los eventos (salida del temporizador en un pin y conmutador DMA), en el alcance veo que 8 eventos corresponden a cada ciclo DMA. Hasta ahora tan bueno.
-
Cuando veo el PIN1 en el alcance, solo veo 6 eventos, dos de ellos se pierden y esto es muy consistente, siempre es el mismo 2.
No tengo nada que lleve mucho tiempo en el ISR y estoy sorprendido por el hecho de que la rutina ISR no se recibe cada vez que recibo el evento.
Espero que este sea un problema de configuración por mi parte, cualquier idea sobre dónde buscar. Esto es algo tan básico que debería funcionar. Este es un nuevo procesador de ST, por lo tanto, existe la posibilidad de que sea un error, pero me niego a creer que algo de lo básico no funciona.
La parte es nueva STM32F2 ... El compilador es Crossworks ... Sin optimizaciones, código de depuración ... ejecutar la configuración de la fábrica, nada de lujos.
Realmente estoy buscando un indicador de dónde buscar ... No espero que ustedes se depuren por mí ... ¿Qué causaría esto? Bajo diferentes circunstancias, asumiría que el tiempo de ISR es el problema, pero deshabilito el código ISR con #if 0 para evitar estos problemas de tiempo. Por lo tanto, no es tiempo. ¿Qué más podría ser?