Estoy intentando generar una señal para interactuar con un controlador Nintendo 64 usando mi STM32F4-DISC1 (STM32F429). La señal que estoy intentando generar por ahora es solo 1us alta seguida por 1us baja (repetición ad infinitum).
Hay dos problemas a los que me enfrento:
-
Parece que no consigo que funcione la sincronización correcta. El reloj principal debe ser de 180 MHz (según lo informado por la función "obtener relojes", perdoné el nombre completo). Esto debería significar que hay 180 ciclos por microsegundo, ¿verdad? Pero cuando configuro el GPIO a alto, espere 180 ciclos (180 nops) y luego lo establezca a bajo nuevamente, 3.5us han pasado. ¿Qué me estoy perdiendo aquí?
-
La señal que estoy generando usando el siguiente código funciona bien después de un tiempo, pero no al principio. Si lo observo con un analizador lógico, la primera captura siempre tendrá este aspecto:
Comopuedeverarriba,laseñalesaltasoloporuntiempomuycorto(alrededorde0.17us).Sinembargo,sinmodificarelcódigo,soloalcapturardenuevo,laseñalcambiaaesto:
Enamboscasos,elcódigonohacambiadoyespera180ciclos.Siesrelevante,estoyusandoOpenBenchLogicAnalyzeraunafrecuenciademuestreode200MHz.
Códigodeinicialización
Códigodegeneracióndeseñal
Nota: 0xE0001004
es la dirección del contador de ciclos, que se actualiza automáticamente. Por lo tanto, no es necesario modificar r6
en el ciclo de espera.
También tenga en cuenta que he intentado la espera usando diferentes técnicas, incluyendo solo usar 180 NOP. Esto tuvo principalmente el mismo resultado.