Necesito sincronizar el flanco ascendente de un PWM con el flanco descendente de otro pulso de señal en un LPC1114FN28 (tratando de manejar un TCD1304DG ), pero no estoy logrando esto hasta ahora. He intentado lo siguiente:
while (LPC_GPIO0->MASKED_ACCESS[ClockMask]); //wait for the clock to go low
while (!(LPC_GPIO0->MASKED_ACCESS[ClockMask])); //wait for the start of PWM cycle
LPC_GPIO0->MASKED_ACCESS[ICGMask] = 0x0; //make the ICG pin go low
donde ClockMask
es una máscara del pin PWM correspondiente, que se ejecuta a una frecuencia de 1MHz, 50% de ciclo de trabajo y ICGMask
una máscara del pin que estoy intentando sincronizar con el PWM.
El extraño problema que encontré es que uno de los dos while
s parece que se bloquea para siempre por alguna razón y cualquier código después de ellos no se ejecuta. Cuando los quito, funciona bien.
Esto podría deberse probablemente a que las instrucciones para while
duran lo mismo que en el período de PWM y, por lo tanto, la condición siempre vería el pin en el mismo estado, pero me parece bastante improbable ...
Estoy ejecutando el chip a 48MHz desde el IRC y el PWM medido con mi osciloscopio es prácticamente impecable.
Entonces, ¿qué podría estar haciendo mal? ¿Hay alguna manera mejor de hacer esto? ¿Escribir esta parte del código en ensamblador ayudaría con los tiempos (deben ser bastante precisos)? Si es así, ¿hay algún tutorial para esto?
¡Gracias de antemano por cualquier respuesta!
Editar:
Incluso utilizando interrupciones no pude obtener resultados suficientemente invariables: el tiempo de la interrupción después de que cambia el pulso. Intentaré más métodos ...
Otros métodos no funcionaron en absoluto. Probablemente esto no sea fácil de conseguir, pero no sé, ¿qué otra cosa podría estar haciendo mal si no es el momento (ya que el CCD de Toshiba aún no responde)?