| I. Pasar de lo anterior a lo siguiente En la clase anterior nos familiarizamos con el proceso básico de desarrollo de programas CC2430 en IAR a través de un pequeño experimento con el más simple parpadeo de un LED. El cuchillo al menos se ha afilado (aunque no se me da muy bien esto de afilar con piedra), y ahora toca empezar a descuartizar bichos :). A continuación, vamos a aprender algunos experimentos básicos con el CC2430. Cada pequeño experimento, dividido en "introducción experimental", "diagrama de flujo del programa", "código fuente experimental y análisis" tres partes de la descripción. Este artículo explica la interrupción externa. Ensegundo lugar, la interrupción externa(1) Introducción al experimento Interrupción es un microcontrolador en tiempo real para hacer frente a eventos internos o externos, un mecanismo interno. Cuando se produce algún tipo de evento interno o externo, el sistema de interrupción del microcontrolador obligará a la CPU para hacer una pausa en el programa que se está ejecutando, pero para ir al procesamiento de eventos de interrupción, procesamiento de interrupción se ha completado, y luego volver a ser interrumpido por el programa, continuar la ejecución. Las interrupciones se dividen en interrupciones externas e interrupciones internas, CC2430 contiene un total de 18 fuentes de interrupción (descripción específica de la interrupción y la definición del vector de interrupción, puede consultar el " CC2430 Manual Chino "). Ahora echemos un vistazo al diagrama de circuito de esta placa de desarrollo:
La placa de desarrollo se ha conectado a la tecla S1 y P0.1, el efecto que quiere conseguir este experimento es disparar la interrupción de P0.1 pulsando la tecla S1, y luego controlar la luz/apagado del LED1 en la subrutina de servicio de interrupción. (2) Principio experimental y diagrama de flujo El diagrama de flujo del experimento es el siguiente:
c
(3) Código fuente experimental// archivo de cabecera#include // subfunción delay#define led1 P1_0#define led2 P1_1#define led3 P1_2#define led4 P1_3void Delay( unsigned n) { & &
nbsp; unsigned tt;for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); &
nbsp; for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); }//inicialización del cristal 32Mvoid xtal_init( void ) { SLEEP &=~0x04; & ¡nbsp; //encendido totalwhile (! (SLEEP & 0x40 )); //oscilador de cristal encendido y estable CLKCON &=~0x47; &
nbsp; //Seleccionar oscilador de cristal 32MHz SLEEP |=0x04; }//inicialización LEDvoid led_init( void ) { P1SEL =0x00;  
; //P1 es un puerto de E/S normal P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Salida
led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//inicialización de E/S e interrupción externavoid io_init( void ) { P0INP &=~0X02;
/ /P0.1 tiene pull-up y pull-down EA =1; //Habilitación total de interrupción P0IE =1; &
nbsp; //Habilitación de interrupción P0 PICTL |=0X09; //Habilitación de interrupción de puerto P0.1, disparo por flanco descendente P0IFG &=~0x02
; //P0.1 interrupt flag clear 0 };//función principalvoid main( void ) { xtal_init(); led_init();
io_init();while ( 1 ); //espera interrupción }//subrutina de servicio de interrupción#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;
/ /desactivar interrupción Delay
( 10000 ); Delay(10000 ); Delay(10000 ); Delay(10000 ); Delay(10000 ); &
nbsp; if ((P0IFG & 0x02 ) >0 ) //interrupción de tecla { P0IFG &=~0x02; &
nbsp; //P0.1 interrupt flag clear 0 led1 = !led1; } P0IF =0; &
nbsp; /Bandera de interrupción P0 limpia 0 EA =1; & nbsp; // activa la interrupción } Primero inicialice el Reloj Unitario: elija un oscilador de cristal de 32MHz. Después inicialice los LEDs: configure P1 como puerto de E/S de propósito general, configure la dirección P1.0 ~ P1.3 como salida, y apague los 4 LEDs. Después configura los registros SFR relevantes para interrupciones externas y activa la habilitación de interrupción en todos los niveles, involucrando 3 SFRs: EA, IEN1, PICTL (para una descripción detallada de cada SFR, por favor consulta el " CC2430 Chinese Manual "): EA -- habilitación total de interrupción; IEN1.5 -- Habilitación de interrupción P0; PICTL.3 -- habilitación de interrupción de puerto P0.1; PICTL.0 -- establece el flanco descendente de la entrada del puerto P0.1 para provocar el disparo de la interrupción. A continuación, utilice while(1) en la función principal para esperar la interrupción. CC2430 Tips(1) Bit Assignment Syntax Resumen Muy a menudo, necesitamos asignar un valor (0 o 1) a un bit en un SFR de un byte para controlar con precisión un dispositivo hardware. A lgunos SFRs soportan el direccionamiento de bits , como TCON, P0, etc., en este momento, la asignación del bit es muy simple, basta con consultar el archivo de cabecera ioCC2430.h en el SFR Bit Access parte de la definición del bit puede ser: P0_0 = 0; // P0 el primer bit de la asignación del valor de 0 P0_0 = 1; / / / P0 el primer bit de la asignación del valor de 1Sin embargo, hay SFRs no soportan el direccionamiento de bits, como en el caso del primer bit de la asignación del valor del primer bit del primer bit del primer bit del primer bit del segundo bit . Sin embargo, algunos SFRs no soportan direccionamiento de bits, como es el caso del PICTL en este experimento, cuando quieres asignar un valor a uno de ellos, la sintaxis es la siguiente: PICTL &= ~0x01; //asignar un valor de 0 al primer bit PICTL |= 0x01; //asignar un valor de 1 al primer b it Puedes recordar que & amp;= ~, |= ~, |= ~, |= P0_0 = 1; //asignar un valor de 1 al primer bit de P0 . amp;= ~, |= estas dos sintaxis comunes de asignación de bits. (2) Resumen de Habilitación de Interrupciones Cuando una interrupción está involucrada en un programa, debe ser habilitada antes de que la interrupción se active. C 51 sistema de habilitación de interrupción, su estructura jerárquica es muy obvia: interrupción jefe: EA es el jefe, responsable de la interrupción total habilitar: EA = 1; interrupción capitán de desprendimiento: siguiente es para cada componente funcional (como P0, temporizador 1, etc) habilitar el control, tales SFR generalmente bit direccionable, nombrando generalmente contiene IE (Interrupt Enable): P0IE = 1; la interrupción miembros del equipo : desprendimiento, pero debido a la interrupcióndel programa , la interrupción debe estar habilitado antes de desencadenar la interrupción.
c ada interrupción miembros del equipo: equipo, pero debido a que cada componente funcional también contiene múltiples interrupciones, por lo que el último nivel es para cada control de habilitación de interrupción, tal SFR es generalmente no bit direccionable, nombrado generalmente contienen IE (Interrupt Enable) o IM (Interrupt Mask): PICTL | = 0x01; no es necesario memorizar la interrupción SFRs . No es necesario memorizar los SFRs de interrupción, siempre y cuando entiendas la jerarquía, y luego consultes el manual o los archivos de cabecera cuando los utilices. (3) Escritura de Programas de Interrupción El uso de interrupciones en un programa generalmente consta de dos partes: la escritura de la subrutina de servicio de interrupción y la apertura de la habilitación de interrupción. L a habilitación de interrupción se ha introducido anteriormente, la siguiente es una breve introducción a la preparación de la subrutina de servicio de interrupción: En primer lugar, especifique el vector de interrupción, puede estar en el archivo de cabecera ioCC2430.h en la parte de Vectores de Interrupción de la consulta, la sintaxis es la siguiente: # pragma vector = Vectores de Interrupción y, a continuación, seguido por la preparación del manejador de interrupción, la estructura es la siguiente: ___ interrupt void Nombre de la función (___)
i nterrupt void nombre de función(void) { //on interrupt //manejo de interrupción //interrupt flag clear 0 //off interrupt } III. Conclusión Este artículo presenta un método simple de implementación de interrupción externa basada en CC2430, con la base de la interrupción, a continuación, introducimos otro módulo muy importante - temporizador. CC2430 tiene un total de cuatro temporizadores, que se pueden dividir en tres categorías: temporizador 1, temporizador 2, temporizador 3/4 (3 y 4 de la utilización de la misma base). el mismo). </n;tt++). </n;tt++);. </n;tt++). </n;tt++); </n;tt++); </n;tt++); </n;tt++). </n;tt++). |