Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 9306|Resposta: 0

Zigbee Journey (8): Vários experimentos básicos importantes do CC2430 - watchdogs

[Copiar link]
Publicado em 30/10/2014 23:23:37 | | | |
1. Conectando os níveis superior e inferior

Não importa o quão bom seja o sistema operacional, seja o atual Win7 ou o futuro Win8 e Win9, sempre haverá uma BlueScreen, sem falar em um pequeno microcontrolador~ Razões imprevisíveis como ruído elétrico, queda de energia, descarga eletrostática, etc., podem causar o funcionamento anormal do sistema embarcado.

O Watch Dog, para ser preciso, deveria ser um temporizador watchdog, que é uma estrutura de circuito especialmente usada para monitorar o status de funcionamento do programa do microcontrolador. O princípio básico é: após iniciar o temporizador watchdog, ele começará a contar a partir de 0; se o programa não apagar o tempo dentro do intervalo de tempo especificado, o timer watchdog reiniciará o sistema (equivalente a reiniciar o computador), como mostrado na figura abaixo (desenhado no Word, o desenho é mais uma dor de ovos~):

Vamos apresentar um método simples de aplicação de cão de guarda: Como soltar um cachorro? Como alimentar? O que vai acontecer se você não alimentar?

2. A história do cão de guarda(1) Introdução ao experimento

Se o cachorro for alimentado, o sistema está funcionando normalmente; Se você não alimentar o cachorro, o sistema continua reiniciando.

(2) Fluxograma de programas

(3) Código-fonte experimental e análise/*
    Descrição do experimento: No experimento watchdog, se o cachorro não for alimentado, o sistema continua reiniciando.
*/

#include

#define liderou1 P1_0         
#define P1_1 liderado2         
#define liderou 3 P1_2         
#define P1_3 Led4   

/*系统时钟初始化
-------------------------------------------------------*/
vazioxtal_init(vazio)
{
  SONO &= ~0x04;            //都上电
  enquanto(! (SONO &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Escolha um oscilador de cristal de 32MHz
  SONO |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
vazioled_init(vazio)
{
  P1SEL =0x00;              P1 é a porta normal de E/S
  P1DIR |=0x0F;              Saída P1.0 P1.1 P1.2 P1.3
  
  liderado1 =1;                  //关闭所有LED
  liderado2 =1;
  Liderado3 =1;
  liderado4 =1;
}

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

/*喂狗程序
-------------------------------------------------------*/
vazioFeetDog(vazio)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
vazioAtraso(vazio)
{
  sem assinatura 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--);
}

/*主函数
-------------------------------------------------------*/
vaziomain(vazio)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Atraso();
  liderado1 =0;         //点亮led1
  
  enquanto(1)
  {
    FeetDog();      Comando de alimentação para cães (o sistema não reinicia após a ligação, e a pequena luz não pisca; Se anotado, o sistema continuará a resetar, e a pequena luz piscará a cada 1 segundo)
  }
}

Como você pode ver no código-fonte acima, o método de operação do Watch Dog é muito simples, e todo o processo envolve apenas um novo SFR, ou seja,WDCTL。A seguir está uma descrição específica do CC2430 no manual chinês:

O uso de watchdogs pode ser resumido como:Selecione o modo → selecione o intervalo do temporizador → coloque o cachorro → alimentar o cachorro

(1) Modo seleção:

O temporizador watchdog possui dois modos, a saber, "modo watchdog" e modo "timer".

No modo temporizador, é equivalente a um temporizador normal, e quando o intervalo do temporizador é atingido, ele gera uma interrupção (você pode encontrá-la no arquivo ioCC2430.h com um vetor de interrupção de WDT_VECTOR); No modo watchdog, quando um intervalo programado é atingido, não há interrupção, em vez disso, um sinal de reset é enviado ao sistema.

Neste experimento, passouWDCTL. MODO=0para selecionar o modo guardião.

  (2) Selecione o intervalo programado:

Como mostrado na figura acima, há quatro períodos de relógio para escolher, e para facilitar o teste, escolhemos o intervalo de tempo de 1s (ou seja, a ordem).WDCTL.INT=00)。

  (3) Libertar o cachorro:

OrdemWDCTL.EN=1para iniciar o cronômetro de vigilância.

  (4) Alimente o cachorro:

Quando o cronômetro começa, ele começa a contar a partir de 0. Antes que sua contagem atinja 32.768 (ou seja, <1s), se alimentarmos o cachorro com o seguinte código:

  WDCTL =0xa0;
  WDCTL =0x50;  

Então o valor de contagem do temporizador será apagado até 0, e então ele começará a contar a partir de 0x0000 novamente, o que impede que envie um sinal de reset, que é manifestado na placa de desenvolvimento: LED1 estará sempre ligado e não piscará;

Se não alimentarmos o cachorro (ou seja, comentarmos este código), quando a contagem do temporizador chegar a 32768, um sinal de reset será emitido, e o programa rodará do zero, o que se manifesta na placa de desenvolvimento: LED1 está piscando constantemente e o intervalo de piscar é 1s. (Nota: O programa de alimentação para cães deve ser estritamente consistente com o código acima, e a ordem reversa/errada/escrita menos não terá papel na eliminação do 0.) )

Dicas CC2430
Duas observações adicionais:
(1) EmModo cão de guardaSe o temporizador watchdog foi ativado, definir 0 para WDCTL.EN é inválido (ou seja, esse bit não pode desempenhar o papel de parar o temporizador);
(2) EmModo temporizador, você pode escrever 1 em WDCTL.CLR[0] para limpar o temporizador; Escrever 0 no bit de habilitação WDCTL.EN para o temporizador, enquanto escrever 1 no bit de habilitação reinicia o timer a partir de 0x0000.


(4) Resultados experimentais:

Se você adicionar a função FeedDog, rodar o código e descobrir que LED1 está sempre ligado (o sistema não reseta);

Se você comentar a função FeedDog, execute o código e veja que LED1 pisca em intervalos de 1s (o sistema reinicia a cada 1s).

3. Conclusão

Esta seção descreve o princípio e o uso dos circuitos de temporização watchdog. Em aplicações práticas, se for necessária alta confiabilidade, o watchdog pode ser usado no sistema. Quando o sistema cai por algum motivo (não consegue mais alimentar o cachorro), o cachorro que ninguém alimenta vai latir: "Mestre, existe uma anomalia, existe uma anomalia! ”

Para uma rede de sensores sem fio, seu consumo de energia em tempo de funcionamento é um aspecto crítico da avaliação de desempenho. Na próxima seção, discutiremos o sono do sistema CC2430 e seu despertar interrompido.






Anterior:Zigbee Journey (7): Vários experimentos básicos importantes do CC2430 - transmissão DMA
Próximo:Zigbee Journey (9): Vários experimentos básicos importantes com CC2430 - sono sistemático e vigília interrompida
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com