Estoy usando TWR- S08DC-PT60 que tiene un microcontrolador MC9S08PT60.
Estoy intentando deshabilitar el temporizador de vigilancia en mi aplicación, solo por facilidad de desarrollo. Después de configurarlo en el software, se deshabilita en la primera ejecución después de la programación, según se desee. Sin embargo, después de que se produce un reinicio, ya sea mediante el botón de reinicio o el apagado, se activa automáticamente. Esto sucede cuando depuro, ejecuto o flasheo usando CodeWarrior 10.4.
Así es como lo deshabilito:
_WDOG_CS1.Bits.UPDATE = 1; // Enable changes to WDOG.
WDOG_CNT = 0xC520; // write the 1st unlock word
WDOG_CNT = 0xD928; // write the 2nd unlock word
_WDOG_CS1.Bits.EN = 0; // Kill the dog.
_WDOG_CS1.Bits.INT = 1; // Enable WDOG interrupt.
En el manual de referencia :
23.3.2.1 Reconfigurando el Watchdog
En algunos casos (como cuando se admite una función de cargador de arranque), los usuarios pueden querer reconfigurar o deshabilita el watchdog sin forzar un reinicio primero. Estableciendo el WDOG_CS1 [ACTUALIZACIÓN] bit a 1 en la configuración inicial de la Watchdog después de un reinicio, los usuarios pueden reconfigurar el watchdog en cualquier momento ejecutando una secuencia de desbloqueo. (Por el contrario, si el WDOG_CS1 [ACTUALIZACIÓN] sigue siendo 0, la única forma de reconfigurar el watchdog es iniciar un reiniciar.) La secuencia de desbloqueo es similar a la secuencia de actualización pero utiliza diferentes valores.
Cuando depuro la aplicación, puedo ver que el bit de ACTUALIZACIÓN está configurado y el temporizador de vigilancia está deshabilitado, también, se comporta como se desea cuando reinicio usando el depurador. Sin embargo, en caso de que se reinicie el botón de reinicio o se apague, el temporizador de vigilancia se habilita de nuevo y reinicia la MCU, ya que no lo introduzco en el bucle principal.
Además, no crea una interrupción antes de reiniciar la MCU, aunque su interrupción está habilitada. Puedo ver, con la ayuda del registro SYS_SRS (fuente de reinicio del sistema) que el MCU se reinicia por última vez con el temporizador de vigilancia.
Comentando la segunda y tercera línea (WDOG_CNT = ...) no ayuda.
Aquí está mi código completo: