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

Vista: 7780|Resposta: 0

Jornada Zigbee (4): Vários experimentos básicos importantes do CC2430 - interrupção do temporizador

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

No artigo anterior, aprendemos juntos sobre a implementação de interrupções externas simples. Agora que temos experiência prática com interrupções, vamos falar sobre interrupções de temporizador nesta seção. O CC2430 possui um total de 4 temporizadores, que podem ser divididos em 3 categorias: cronômetro 1, cronômetro 2, cronômetro 3/4 (o uso de 3 e 4 é o mesmo).

Como o autor também é novo no CC2430 e praticamente não tem experiência prática em projetos envolvendo temporizadores, não pretendo (e não posso fazer nada) analisar o temporizador em profundidade. Este artigo oferece apenas uma breve exploração experimental do uso do temporizador 1 em interrupções de contagem de overflow, e não menciona suas funções de captura de entrada/comparação de saída/PWM. Temporizador 2 e Temporizador 3/4 são apenas introduções simples de funções. Depois que as habilidades do autor atingirem certo nível de intensidade, estarei no auge da experiência prática de Zigbee para aprimorar este ensaio.

2. Temporizador 1

O temporizador 1 é um temporizador de 16 bits com modulação de largura de temporizador/contador/pulso. Possui 3 canais de captura e saída de entrada programáveis individualmente, cada um dos quais pode ser usado como saída PWM ou como tempo de borda para capturar o sinal de entrada (para informações sobre o que é a comparação captura/saída de entrada e como implementar saída PWM, os leitores podem consultar o manual chinês CC2430).

Os temporizadores têm um conceito muito importante:Modo de operação

Os modos de operação incluem: Modo de operação livre (Corrida livre), modo de molde (módulo) e Contagem Positiva/Modo Contagem Regressiva (Para cima-baixo)。

A seguir está um trecho do manual chinês CC2430 para a introdução dos 3 modos:



Comparando os três modos, pode-se ver que o valor de overflow do modo de operação livre 0xFFFF é inalterável; Os outros dois modos permitem o controle preciso do valor de overflow do temporizador, atribuindo um valor ao T1CC0. Este experimento utiliza esse recurso para acionar uma interrupção a cada 1s pelo temporizador através de um T1CC0 específico, de modo a controlar com precisão o intervalo de piscação da luz do LED para 1s.

(1) Introdução ao experimento

No modo módulo do temporizador, o intervalo de piscar da luz LED é controlado precisamente por 1s, ou seja: 0,5s brilhante → 0,5s escuro → 0,5s brilhante → 0,5s fraco ...... → 0,5s claro → 0,5s escuro (ou seja, o intervalo de tempo do escuro para o claro é 1s). A inversão luz/escuridão é alcançada por interrupções excessivas.

(2) Fluxograma de programas

(3) Cálculos relevantes

Como mencionado anteriormente, o status da luz LED é: brilhante 0,5s → escuro 0,5s → brilhante 0,5s → fraco 0,5s ...... → 0,5s de luz → 0,5s de escuro, e precisa ser implementado com interrupções de overflow, então o período de overflow do temporizador deve ser de 0,5s. Para isso, o valor correspondente de overflow precisa ser calculado (temporariamente definido como N).

A frequência de clock do sistema é selecionada como 32MHz, e a frequência de clock dada é 16MHz por padrão (ambos são determinados por registradores de função especiais).CLKCONPara detalhes, consulte o manual chinês CC2430).

Para o Timer 1, ajuste o crossover do relógio para 128 divisões.

Para resumir, a lista é a seguinte:

Para encontrar N=62500, seu hexadecimal é 0xF424, ou seja, você precisa definir T1CC0H=0xF4, T1CC0L=0x24 .

(4) Código-fonte experimental e análise/*
    Descrição do experimento: Experimento Timer Timer1, transbordamento de contagem de temporizador, LED1 piscando
*/

#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;
}

/*T1初始化
-------------------------------------------------------*/
vaziotimer1_init(vazio)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modo módulo (0x0000->T1CC0); Comece a correr;
  T1SE=0;           Limpe o sinal de interrupção  
}

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

  enquanto(1);            //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vetor=T1_VECTOR
__interruptvazioT1_ISR(vazio)
{
  EA=0;               //关中断
  
  liderou1 = !liderou1;      //LED灯反转

  EA=1;               //开中断
  
  T1CTL &= ~0x10;     //清中断标志
}

Ok, compilo o programa e depuro online, o LED1 na placa de desenvolvimento pisca conforme o programado, e parece que o intervalo de flash é cerca de 1s. Mas isso não é suficiente para provar o sucesso do experimento, se o intervalo puder ser estritamente determinado como 1s, será perfeito~ Então liguei o relógio do WIN 7 (clique no tempo no lado direito da barra de tarefas). Enquanto olhava para o ponteiro dos segundos, ele observou o piscar do LED1 pelo canto do olho. O resultado: em dois minutos, o ritmo dos dois é basicamente o mesmo (essa precisão é tolerável~). Neste ponto, pode-se dizer que o experimento está basicamente concluído, hehe~

3. Temporizador 2

Timer 2 também é chamado de Timer 2Temporizador MAC, foi especificamente projetado para suportar o protocolo de rastreamento de eventos no IEEE 802.15.4 MAC. O temporizador possui um contador de overflow de 8 dígitos que pode ser usado para registrar o número de ciclos ocorridos; Há um registrador de captura de 16 bits que registra o momento exato em que um quadro começa a receber/enviar ou o momento exato em que a transmissão é concluída. Ele também contém um registrador de comparação de saída de 16 bits que gera vários sinais de comando (início de aceitação, início de envio, etc.) para o módulo sem fio em um momento específico.

4. Temporizador 3/4

Timer 3/4 é um temporizador de 8 bits com função de temporizador/contador/PWM. T3/T4 possui 2 canais de comparação de saída, cada um dos quais pode ser usado como saída PWM.

5. Conclusão

Esta seção aprende principalmente o método da interrupção de contagem de transbordamento do temporizador 1, e realiza o controle preciso do intervalo de piscação da luz LED de 1s. Só alguns outros temporizadores são apenas um traço, e voltarei para adicioná-los depois. Na próxima seção, apresentaremos a comunicação da porta serial CC2430.






Anterior:Jornada Zigbee (3): Vários experimentos básicos importantes do CC2430 - interrupção externa
Próximo:Jornada Zigbee (5): Vários experimentos básicos importantes do CC2430 - comunicação serial
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