He configurado un módulo RTC en un uC para generar interrupciones cada segundo (~ 32 kHz de reloj del módulo con un preescalador 0x7FFF entre el contador y el reloj; espero que así sea, parece que ~ 32k es el valor predeterminado, y sería una pena si el error surge de un reloj incorrecto que se conecta al módulo). Sin embargo, parece que el registro del contador de segundos se incrementa cada vez que se lleva a cabo una sola instrucción de ensamblaje (a veces cada dos instrucciones de ensamblaje), generando interrupciones a una velocidad sorprendentemente rápida. ¿Cuál podría ser la causa de este comportamiento? Y si tuviera que solucionarlo sin poder hacer esta pregunta en foros como lo estoy haciendo, ¿cómo buscaría el problema?
En respuesta a los comentarios, el reloj RTC solo puede conectarse a osciladores internos o externos, ambos oscilando a ~ 32 kHz. El uC es una serie Infineon XMC con procesador Cortex M-4. Casi no puedo pensar en ninguna sección de mi código que pueda publicar, ya que es una configuración de registro simple que (a) Habilita eventos RTC periódicos, (b) Habilita SCU (Unidad de control del sistema - a cargo de los relojes, dominio de hibernación y encendido / reinicio dominios, etc.) interrupciones periódicas RTC, (c) Configurar las propiedades de NVIC. Como he señalado en uno de los comentarios; La parte que más me confunde de este problema es que el valor de 'segundos' parece ser correcto cuando se pasa a un hiperterminal, pero la frecuencia de actualización (el terminal de masilla se actualiza cada vez que se maneja una interrupción) es muy rápida, pero los segundos el conteo parece incrementarse cada segundo, lo que significa que el cronometraje es correcto.
Una pequeña actualización más sobre el problema. Parece que el temporizador RTC está funcionando correctamente e incluso se las arregla para mantenerse al día con la vida real durante al menos una hora cuando lo dejo en segundo plano. Sin embargo, lo que sucede es que la secuencia de interrupción se atasca en un bucle de tiempo sin ninguna razón en particular: si configuro las interrupciones para que se activen cada minuto en lugar de cada segundo, entonces el programa emitirá una interrupción un minuto después de que empiece a ejecutarlo, y luego ejecute esa interrupción una y otra vez, parpadeando el terminal muy rápido.