|
1. Conexión entre los niveles superior e inferior En el artículo anterior, aprendimos juntos sobre la implementación de interrupciones externas simples. Ahora que tenemos experiencia práctica con interrupciones, hablemos de las interrupciones de temporizador en esta sección. CC2430 tiene un total de 4 temporizadores, que se pueden dividir en 3 categorías: temporizador 1, temporizador 2, temporizador 3/4 (el uso de 3 y 4 es el mismo). Como el autor también es nuevo en el CC2430 y prácticamente no tiene experiencia práctica en proyectos que impliquen temporizadores, no pretendo (ni puedo hacer nada) analizar el temporizador en profundidad. Este artículo solo ofrece una breve exploración experimental del uso del temporizador 1 en interrupciones de desbordamiento de conteo, y no menciona sus funciones de captura de entrada/comparación de salida/PWM. El temporizador 2 y el temporizador 3/4 son solo introducciones simples de funciones. Cuando las habilidades del autor alcancen cierto nivel de intensidad, estaré en la cima de la experiencia práctica de Zigbee para mejorar este ensayo. 2. Temporizador 1El temporizador 1 es un temporizador de 16 bits con modulación de ancho de pulso/contador/tiempo. Dispone de 3 canales de captura y comparación de salida de entrada programables individualmente, cada uno de los cuales puede usarse como salida PWM o como tiempo de borde para capturar la señal de entrada (para información sobre qué es la comparación de captura/salida de entrada y cómo implementar la salida PWM, los lectores pueden consultar el manual chino CC2430). Los temporizadores tienen un concepto muy importante:Modo de funcionamiento。 Los modos de funcionamiento incluyen: Modo de operación libre (Carrera libre), modo de molde (Módulo) y Modo de Cuenta Positiva/Cuenta Atrás (arriba-abajo)。 A continuación se muestra un extracto del manual chino CC2430 para la introducción de los 3 modos:
Comparando los tres modos, se puede ver que el valor de desbordamiento del modo de operación libre es 0xFFFF invariable; Los otros dos modos permiten un control preciso del valor de desbordamiento del temporizador asignando un valor a T1CC0. Este experimento utiliza esta función para activar una interrupción cada 1 segundo mediante el temporizador a través de un T1CC0 específico, para controlar con precisión el intervalo de parpadeo de la luz LED a 1 segundos. (1) Introducción al experimentoEn el modo módulo del temporizador, el intervalo de parpadeo de la luz LED se controla con precisión por 1 s, es decir: 0,5 s brillantes → 0,5s oscuros → 0,5s brillantes → tenues 0,5 s ...... → 0,5 s de luz → 0,5s de oscuridad (es decir, el intervalo de tiempo de oscuro a claro es de 1s). La inversión luz/oscuridad se logra mediante interrupciones desbordadas. (2) Diagrama de flujo del programa
(3) Cálculos relevantesComo se mencionó antes, el estado de la luz LED es: brillante 0,5s → oscuro 0,5s → brillante 0,5s → tenue 0,5s ...... → 0,5s de luz → 0,5s de luz, y debe implementarse con interrupciones de desbordamiento, por lo que el periodo de desbordamiento del temporizador debe ser de 0,5 s. Para ello, es necesario calcular el valor correspondiente de desbordamiento (temporalmente establecido en N). La frecuencia de reloj del sistema se selecciona como 32MHz, y la frecuencia de reloj dada es 16MHz por defecto (ambas están determinadas por registros de funciones especiales).CLKCONPara más detalles, consulte el manual chino CC2430). Para el Cronómetro 1, ajusta su cruce de relojes a 128 divisiones. En resumen, la lista es la siguiente:
Para encontrar N=62500, su hexadecimal es 0xF424, es decir, necesitas establecer T1CC0H=0xF4, T1CC0L=0x24 . (4) Código fuente experimental y análisis/*
Descripción del experimento: Experimento Timer Timer1, desbordamiento de contadores de temporizador, parpadeo LED1
*/
#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;
}
/*T1初始化
-------------------------------------------------------*/
Vacíotimer1_init(Vacío)
{ EA=1; //开总中断 T1IE=1; //开T1中断 OVFIM=1; //开T1溢出中断
T1CC0L=0x24; //溢出值低8位 T1CC0H=0xF4; //溢出值高8位
T1CTL =0x0e; 128 crossover; modo módulo (0x0000->T1CC0); Empieza a correr; T1IF=0; Despejar el signo de interrupción
}
/*主函数
-------------------------------------------------------*/
Vacíomain(Vacío)
{ xtal_init(); led_init(); timer1_init();
mientras(1); //等待溢出中断
}
/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vector=T1_VECTOR __interruptVacíoT1_ISR(Vacío)
{ EA=0; //关中断
liderado1 = !liderado1; //LED灯反转
EA=1; //开中断
T1CTL &= ~0x10; //清中断标志
}
Vale, compila el programa y depura en línea, el LED1 de la placa de desarrollo parpadea según lo previsto, y parece que el intervalo de parpadeo es de unos 1 segundo. Pero esto no es suficiente para demostrar el éxito del experimento; si el intervalo puede determinarse estrictamente como 1s, será perfecto~ Así que encendí el reloj de WIN 7 (haz clic en la hora en el lado derecho de la barra de tareas). Mientras miraba la segunda mano, observó el parpadeo de LED1 por el rabillo del ojo. El resultado: en dos minutos, el ritmo de ambos es básicamente el mismo (esta precisión es tolerable~). A estas alturas, se puede decir que el experimento está prácticamente terminado, jeje~ 3. Temporizador 2Cronómetro 2 también se llamaTemporizador MAC, está diseñado específicamente para soportar el protocolo de seguimiento de eventos en IEEE 802.15.4 MAC. El temporizador tiene un contador de desbordamiento de 8 dígitos que puede utilizarse para registrar el número de ciclos ocurridos; Hay un registro de captura de 16 bits que registra el momento exacto en que empieza a recibir/enviar una trama o el momento exacto en que se completa la transmisión. También contiene un registro de comparación de salida de 16 bits que genera varias señales de comandos (inicio de aceptación, inicio de envío, etc.) al módulo inalámbrico en un momento específico. 4. Temporizador 3/4El temporizador 3/4 es un temporizador de 8 bits con función de temporizador/contador/PWM. T3/T4 tiene 2 canales de comparación de salida, cada uno de los cuales puede usarse como salida PWM. 5. ConclusiónEsta sección aprende principalmente el método de la interrupción de desbordamiento de conteo del temporizador 1, y realiza el control preciso del intervalo de parpadeo de la luz LED de 1s. Solo unos cuantos temporizadores más son un trazo, y volveré a añadirlos más adelante. En la siguiente sección, presentaremos la comunicación por puerto serie CC2430.
|