Calibración y captura de la CPU

2

El siguiente código es para MSP430. ¿Alguien me puede ayudar? ¿Cuál es el propósito de atrapar la CPU? ¿Cómo procederá el programa si la CPU está atrapada allí?

Running the CPU of DCO and the crystal.

We want the MCLK sourced from DCO and ACLK to be sourced from VLO or 32KHz crystal. 
The ACLK is sourced from LFXT1 by default.   

#include <msp430g2553.h>

//This small set of code takes care of an inconsistency between g2553 and g2231. It should be present.

#ifndef TIMER0_A1_VECTOR
#define TIMER0_A1_VECTOR TIMERA1_VECTOR
#define TIMER0_A0_VECTOR TIMERA0_VECTOR
#endif

void main(void)
{
 //code goes here

WDTCTL = WDTPW + WDTHOLD;  //disables the watchdog timer by sending the  password (WDTPW) and hold command (WDTHOLD)

  //calibration starts here..           
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)  //trapping the CPU                          
{  
  while(1);  // If cal constants erased, trap CPU!!
} 

 .//rest of the code for calibration...
 .
 .
    
pregunta gpuguy

2 respuestas

4

El comentario lo deja bastante claro: si las constantes de calibración se han borrado (cualquiera de las dos es igual a 0xFF), no tiene sentido continuar. Las constantes deberán ser reprogramadas antes de que el chip pueda hacer algo útil.

    
respondido por el Dave Tweed
2

Una trampa en el contexto de la programación es una rutina de software que debe ejecutarse si se detecta una condición inesperada o anómala. Algunos ejemplos generales de trampas son:

  • Desbordamiento de pila (empujando más datos de los que puede contener la pila definida)
  • Error de dirección (un salto al espacio de memoria no implementado)
  • error de división por cero

El hardware de la CPU desencadena automáticamente algunas trampas, algo así como interrupciones, sin necesidad de verificación manual.

Muy a menudo, la rutina de captura realiza algún tipo de informe de error (enciende un LED o establece una señal de estado, informe a través de UART, escribe un registro de fallas) y luego reinicia o detiene la ejecución.

En su ejemplo, la comprobación de la trampa se realiza manualmente, y está detectando la ausencia o pérdida de dos constantes particulares (lo más probable es que los valores de ajuste del oscilador interno programados por la fábrica), ya que la memoria flash se borra por defecto a todas.

La trampa en este caso es un bucle while infinito (1): la ejecución no se interrumpirá desde el bucle while a menos que se reinicie la CPU. (Es probable que este producto no tenga ningún medio de detención que no sea un bucle sin fin).

Por supuesto, si reinicias sin solucionar el problema original, el código se ejecutará y volverá a caer en la trampa.

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas