MSP430FR6989 Ver temporizador de perro

0

Estoy intentando aprender sobre el periférico Watch Dog Timer de MSP430FR6989 ( enlace a MSP430 ).

Es periférico Watch Watch Timer WDT_A tiene un registro de control de 16 bits (WDTCTL), para realizar una operación de escritura, necesitamos cargar 0x5A en su byte superior.

Si queremos realizar una operación de lectura, leemos 0x69 al byte superior.

( Guía del usuario página 635)

  

los accesos de escritura deben incluir la contraseña de escritura 05Ah en el byte superior.   Una escritura a WDTCTL con cualquier valor distinto de 05Ah en el byte superior es   una violación de la contraseña y provoca un reinicio del sistema PUC, independientemente de   modo temporizador. Cualquier lectura de WDTCTL lee 069h en el byte superior.

Este es mi código:

#include <msp430.h> 

int main(void)
{
    WDTCTL = 0x5A80;
    PM5CTL0 = 0xFFFE;//Line A

    //rest of the code

    while(1);

    return 0;
}

Cuando, lo construyo y lo depuro, y el depurador alcanza la línea A, esperaba WDTCTL = 0x5A80 , no WDTCTL = 0x6980 (imagen de abajo).

Entiendo, si tengo una declaración como if(WDTCTL == number) , encontraríamos WDTCTL = 0x69XX , pero ¿por qué veo 0x6980 en la ventana de Vigilancia del Registro, cuando acabo de asignarle 0x5A80 ?

    
pregunta Forat

1 respuesta

2

Este es un registro especial. El byte superior no es como un registro regular donde establecerlo en 0x5Ann se leerá como 0x5Ann. La guía del usuario le dice explícitamente que se leerá como 0x69nn. En cuanto al hardware en el diagrama de bloques para el perro guardián, ve que el byte superior es un bloque EQU de comparación de contraseñas. Así que nunca escribes 0x5A en el byte superior, va al mecanismo de comparación.

El 0x5A es un mecanismo de seguridad. El depurador está leyendo el registro real en lugar de seguir su código. El byte superior siempre leerá 0x69 en el depurador.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas