Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 9306|Respuesta: 0

Zigbee Journey (8): Varios experimentos básicos importantes de CC2430 - watchdogs

[Copiar enlace]
Publicado en 30/10/2014 23:23:37 | | | |
1. Conexión entre los niveles superior e inferior

No importa lo bueno que sea el sistema operativo, ya sea el Win7 actual o el futuro Win8 y Win9, siempre habrá una pantalla azul, sin mencionar un microcontrolador pequeño~ Razones impredecibles como ruido eléctrico, corte de energía, descarga electrostática, etc., pueden causar un funcionamiento anormal del sistema embebido.

El Watch Dog, para ser precisos, debería ser un temporizador watchdog, que es una estructura de circuito especialmente utilizada para monitorizar el estado de ejecución del programa microcontrolador. El principio básico es: tras iniciar el temporizador watchdog, empezará a contar desde 0; si el programa no lo borra a tiempo dentro del intervalo especificado, el temporizador watchdog reiniciará el sistema (equivalente a reiniciar el ordenador), como se muestra en la figura siguiente (dibujado en Word, el dibujo es más bien un huevo doloroso~):

Vamos a presentar un método sencillo de aplicación de perro guardián: ¿Cómo dejar ir a un perro? ¿Cómo alimentar? ¿Qué pasará si no le das de comer?

2. La historia del vigilante(1) Introducción al experimento

Si el perro está alimentado, el sistema funciona con normalidad; Si no alimentas al perro, el sistema sigue reiniciándose.

(2) Diagrama de flujo del programa

(3) Código fuente experimental y análisis/*
    Descripción del experimento: En el experimento watchdog, si el perro no es alimentado, el sistema se reinicia constantemente.
*/

#include

#define lideró P1_0         
#define P1_1 LED2         
#define led3 P1_2         
#define led4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
Vacíoxtal_init(Vacío)
{
  SUEÑO &= ~0x04;            //都上电
  mientras(! (SUEÑO &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Elige un oscilador de cristal de 32MHz
  SUEÑO |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Vacíoled_init(Vacío)
{
  P1SEL =0x00;              P1 es el puerto normal de E/S
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3 salida
  
  liderado1 =1;                  //关闭所有LED
  Liderado2 =1;
  liderado3 =1;
  Liderado4 =1;
}

/*看门狗初始化
-------------------------------------------------------*/
Vacíowatchdog_Init(Vacío)   
{
  WDCTL =0x00;              //看门狗模式,时间间隔一秒
  WDCTL |=0x08;            //启动看门狗
}

/*喂狗程序
-------------------------------------------------------*/
VacíoFeetDog(Vacío)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
VacíoRetraso(Vacío)
{
  sin firmar intn;
  para(n=50000; n>0; n--);
  para(n=50000; n>0; n--);
  para(n=50000; n>0; n--);
  para(n=50000; n>0; n--);
  para(n=50000; n>0; n--);
  para(n=50000; n>0; n--);
  para(n=50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
Vacíomain(Vacío)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Retraso();
  liderado1 =0;         //点亮led1
  
  mientras(1)
  {
    FeetDog();      Comando de alimentación para perro (el sistema no se reinicia tras unirse, y la pequeña luz no parpadea; Si se anota, el sistema seguirá reiniciándose y la pequeña luz parpadeará cada 1 segundo)
  }
}

Como puedes ver en el código fuente anterior, el método de operación de Watch Dog es muy sencillo, y todo el proceso implica solo un nuevo SFR, es decir,WDCTL。A continuación se presenta una descripción específica de CC2430 en el manual chino:

El uso de los watchdogs puede resumirse así:Selecciona modo → selecciona intervalo de temporizador → pon al perro → alimentar al perro

(1) Modo de selección:

El temporizador watchdog tiene dos modos, a saber, "modo watchdog" y modo "timer".

En modo temporizador, es equivalente a un temporizador normal, y cuando se alcanza el intervalo del temporizador, produce una interrupción (puedes encontrarla en el archivo ioCC2430.h con un vector de interrupción de WDT_VECTOR); En modo watchdog, cuando se alcanza un intervalo programado, no hay interrupción, sino que se envía una señal de reinicio al sistema.

En este experimento, fue aprobadoWDCTL. MODO=0para seleccionar el modo guardián.

  (2) Seleccionar el intervalo programado:

Como se muestra en la figura anterior, hay cuatro periodos de reloj para elegir, y para facilitar la prueba, elegimos el intervalo de tiempo de 1s (es decir, el orden).WDCTL.INT=00)。

  (3) Liberar al perro:

OrdenWDCTL.EN=1para iniciar el temporizador watchdog.

  (4) Alimentar al perro:

Una vez que empieza el temporizador, empieza a contar desde cero. Antes de que su recuento alcance 32.768 (es decir, <1), si alimentamos al perro con el siguiente código:

  WDCTL =0xa0;
  WDCTL =0x50;  

Entonces el valor de conteo del temporizador se borrará hasta 0, y entonces empezará a contar desde 0x0000 de nuevo, lo que impide que envíe una señal de reinicio, que se manifiesta en la placa de desarrollo: el LED1 siempre estará encendido y no parpadea;

Si no alimentamos al perro (es decir, comentamos este código), cuando el conteo de temporizadores llegue a 32768, se emitirá una señal de reinicio y el programa se ejecutará desde cero, lo cual se manifiesta en la placa de desarrollo: LED1 parpadea constantemente y el intervalo de parpadeo es de 1s. (Nota: El programa de alimentación para perros debe ser estrictamente coherente con el código anterior, y el orden de ser invertido/incorrecto/escrito menos no influirá en la eliminación del 0.) )

Consejos CC2430
Dos notas adicionales:
(1) EnModo perro vigilanteSi el temporizador watchdog ha sido habilitado, poner 0 en WDCTL.EN es inválido (es decir, este bit no puede desempeñar la función de detener el temporizador);
(2) EnModo temporizador, puedes escribir 1 en WDCTL.CLR[0] para limpiar el temporizador; Escribir 0 en el bit de habilitación WDCTL.EN detendrá el temporizador, mientras que escribir 1 en el bit de habilitación reiniciará el temporizador desde 0x0000 en adelante.


(4) Resultados experimentales:

Si añades la función FeedDog, ejecutas el código y ves que LED1 siempre está encendido (el sistema no se reinicia);

Si comentas la función FeedDog, ejecuta el código y descubre que LED1 parpadea cada 1 segundo (el sistema se reinicia cada 1 segundo).

3. Conclusión

Esta sección describe el principio y el uso de los circuitos de temporización watchdog. En aplicaciones prácticas, si se requiere alta fiabilidad, el watchdog puede utilizarse en el sistema. Cuando el sistema se cae por alguna razón (ya no puede alimentar al perro), el perro al que nadie alimenta ladrará: "¡Maestro, hay una anomalía, hay una anomalía! ”

Para una red de sensores inalámbricos, su consumo de energía en tiempo de funcionamiento es un aspecto crítico de la evaluación del rendimiento. En la siguiente sección, hablaremos del sueño del sistema CC2430 y su llamada de despertar interrumpida.






Anterior:Zigbee Journey (7): Varios experimentos básicos importantes de CC2430 - Transmisión DMA
Próximo:Zigbee Journey (9): Varios experimentos básicos importantes con CC2430: sueño sistemático y vigilia interrumpida
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com