架构师_程序员_码农网

N Recuperar palavra-passe
Registar

QQ登录

Apenas um passo para começar

Pesquisar
Ver:5109|Representação: 0
打印 上一主题 下一主题

[Translate] Zigbee Journey (IV): Algumas experiências básicas importantes do CC2430 - interrupção do temporizador

[Copiar link]
L 跳转到指定楼层
o proprietário do edifício
发表于 2014-10-30 23:17:29|只看该作者回帖奖励|ReverseBrowse|Read Mode
I. Continuação do artigo anterior

  Na secção anterior, aprendemos sobre a implementação de interrupções externas simples em conjunto. O CC2430 tem 4 temporizadores, que podem ser divididos em 3 categorias: Temporizador1, Temporizador2, Temporizador3/4 (a utilização do 3 e do 4 é a mesma).

  Uma vez que o autor também está apenas a tocar no CC2430, o projeto que envolve a experiência do temporizador é basicamente zero, por isso não pretendo (e não posso ajudar) uma análise aprofundada do temporizador. Este artigo apenas se refere ao uso da interrupção por estouro de contagem do timer 1 para fazer uma exploração experimental simples, pois sua função de captura de entrada/comparação de saída/PWM é omitida. O temporizador 2 e o temporizador 3/4 também são apresentados apenas brevemente. Esperando que o poder do autor atinja um certo nível de fogo, e depois ficar no auge da experiência de combate Zigbee para melhorar este ensaio.

Temporizador 1

  O Timer1 é um temporizador de 16 bits com funções de temporizador/contador/modulação de largura de pulso. Ele tem três canais de comparação de captura/saída de entrada programáveis individualmente, cada um dos quais pode ser usado como uma saída PWM ou usado para capturar o tempo de borda do sinal de entrada (para obter mais informações sobre o que é a comparação de captura/saída de entrada e como implementar saídas PWM, os leitores podem consultar o manual chinês do CC2430 por conta própria).

  O temporizador tem um conceito muito importante: o modo de funcionamento.

  Os modos de funcionamento incluem: funcionamento livre, módulo e up-down.

  A seguir, apresentamos a introdução dos três modos do manual chinês do CC2430:



  Comparando os três modos, pode-se ver que: o valor de estouro do modo de execução livre é 0xFFFF que não é alterável; enquanto os outros dois modos podem ser controlados com precisão, atribuindo um valor a T1CC0, a fim de controlar com precisão o valor de estouro do temporizador. Esta experiência utiliza esta caraterística para fazer com que o temporizador dispare uma interrupção a cada 1s através do valor específico T1CC0, de modo a controlar com precisão o intervalo de 1s em que o LED pisca.

(1) Introdução à experiência

  No modo módulo do temporizador, o intervalo de intermitência do LED é controlado com precisão para ser de 1s, ou seja: claro 0.5s → escuro 0.5s → claro 0.5s → escuro 0.5s ...... → claro 0,5s → escuro 0,5s (ou seja, o momento de transição do escuro para o claro é de 1s). A inversão de claro/escuro é efectuada por uma interrupção por transbordo.

(2) Fluxograma do programa

(3) Cálculos relacionados

  Como mencionado anteriormente, o estado do LED é: brilhante 0.5s → escuro 0.5s → brilhante 0.5s → escuro 0.5s ...... → claro 0,5s → escuro 0,5s, e precisam de ser alcançados com a interrupção de transbordo, pelo que o período de transbordo do temporizador deve ser de 0,5s. Para tal, é necessário calcular o valor de transbordo correspondente (temporariamente definido para N).

  A frequência de relógio do sistema é selecionada como 32MHz, e a frequência de relógio fornecida ao temporizador é de 16MHz por defeito (ambas são configuradas pelo registo de função especial CLKCON, que pode ser encontrado no manual chinês do CC2430).

  Para o temporizador 1, ajuste a sua frequência de relógio para 128 divisões.

  Em resumo, a fórmula pode ser a seguinte:

2011022120560133.jpg
c

  Descobrir N = 62500, o seu hexadecimal é 0xF424, ou seja, é necessário definir T1CC0H = 0xF4, T1CC0L = 0x24 ou seja .








(
4) código-fonte experimental e análise/* Descrição da experiência: experiência com o temporizador1, contagem do temporizador excedida, LED1 a piscar */ #include #define led1 P1_0 # define led2 P1_1 #define led3 P1_0 #define led3 P1_1

1 #define led3 P1_2 #define led4 P1_3 &





n bsp; /* inicialização do relógio do sistema-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // ambos ligamenquanto (!
(SLEEP & 0x40 )); //oscilador de cristal ligado e estável CLKCON &=~0x47; &







nbsp; //selecionar oscilador de cristal de 32MHz SLEEP |=0x04; }/*Inicialização dos LEDs-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 é uma porta de E/S normal P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 saídas led1 =1; &






nbsp; //Desliga todos os LEDs led2 =1; led3 =1; led4 =1; }/*Inicialização do T1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // liga a interrupção total &
nbsp; T1IE=1; // ativa a interrupção T1OVFIM=1; // ativa o estouro de T1



T 1CC0L=0x24; //valor de estouro baixo 8 bits T1CC0H=0xF4; //valor de estouro alto 8 bits &

nbsp; T1CTL =0x0e; //128 divisões; modo modulo (0x0000->T1CC0); início da execução;T1IF=0; &




nbsp; // limpar sinalizador de interrupção }/* função principal-------------------------------------------------------*/void main( void





) { xtal_init(); led_init(); timer1_init();while ( 1 ); &





nbsp; //espera pela interrupção de overflow }/*Subrotina de serviço de terminal T1-------------------------------------------------------*/#pragma vetor=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //desligar interrupção led1 = !


led1; //LEDs invertidosEA=1; /Em interrupção &nbsp

; T1CTL &=~0x10; // limpar flag de interrupção }

  OK, compilar o programa e depuração online, a placa de desenvolvimento no LED1 pisca como esperado, sentir o intervalo de piscar de cerca de 1s. Mas isso não é suficiente para provar o sucesso da experiência, se você pode determinar rigorosamente o intervalo de 1s seria perfeito ~ então eu abri o relógio WIN 7 (clique no lado direito da barra de tarefas tempo pode ser). Enquanto observava o ponteiro dos segundos, olhei para o LED1 a piscar com o canto do olho. O resultado é: em dois minutos, o ritmo dos dois é basicamente idêntico (esta exatidão pode ser tolerada ~). Nesta altura, pode dizer-se que a experiência está basicamente concluída, hehehe~

Terceiro, Temporizador 2

  O temporizador 2, também conhecido como temporizador MAC, foi especialmente concebido para suportar o protocolo de seguimento de eventos no IEEE 802.15.4 MAC. O temporizador tem um contador de transbordamento de 8 bits que pode ser utilizado para registar o número de ciclos ocorridos; tem um registo de captura de 16 bits que é utilizado para registar a hora exacta em que um delimitador de início de fotograma é recebido/transmitido ou a hora exacta em que uma transmissão é concluída; e contém também um registo de comparação de saída de 16 bits que é utilizado para gerar vários sinais de comunicação selectivos de comando para o módulo sem fios numa altura específica (início da receção, início da transmissão, etc.).

Temporizador 3/4

  O temporizador 3/4 é um temporizador de 8 bits com funções de temporizador/contador/PWM. t3/t4 tem dois canais de comparação de saída, cada um dos quais pode ser utilizado como saída PWM.

V. Conclusão

  Nesta secção, aprendemos o método de contagem da interrupção de overflow do temporizador 1 e conseguimos controlar com precisão o intervalo de 1 s entre o piscar do LED. Na próxima secção, apresentaremos a comunicação da porta série do CC2430.






Anterior :[Re-]Jornada Zigbee (III): Algumas experiências básicas importantes do CC2430 - Interrupções externas
Próximo :[Re-]Jornada Zigbee (V): Algumas experiências básicas importantes do CC2430 - Comunicação serial
Rede de produtores de código, apenas publicada no processo de prática, encontrou dificuldades técnicas, não induzir outros em erro.
Tem de iniciar sessão antes de poder voltar a publicar Iniciar sessão | Registar

E sta versão das regras integrais


DISCLAIMER: Todo o software, materiais de programação ou artigos publicados pelo Code Farmer estão limitados a serem utilizados apenas para fins de aprendizagem e investigação; os conteúdos acima referidos não devem ser utilizados para fins comerciais ou ilegais, caso contrário, todas as consequências serão suportadas pelos próprios utilizadores. A informação deste sítio é proveniente da rede, a disputa de direitos de autor não tem nada a ver com este sítio. Deve remover completamente o conteúdo acima do seu computador no prazo de 24 horas após o descarregamento. Se gosta do programa, por favor apoie o software genuíno, compre o registo e obtenha um melhor serviço genuíno. Se houver alguma infração, contacte-nos por correio eletrónico para tratarmos do assunto.

Correio eletrónico To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:50

Resposta rápidaVoltar ao topoVoltar à lista