| I. Weiterführung des vorherigen Artikels Im vorigen Abschnitt haben wir gemeinsam die Implementierung einfacher externer Interrupts kennengelernt. Der CC2430 hat 4 Timer, die in 3 Kategorien unterteilt werden können: Timer1, Timer2, Timer3/4 (die Verwendung von 3 und 4 ist die gleiche). Da der Autor ist auch nur berühren die CC2430, das Projekt mit Timer Erfahrung ist im Grunde Null, so dass ich nicht die Absicht (und kann nicht helfen) eingehende Analyse der Timer. Dieser Artikel befasst sich nur mit der Verwendung des Timer 1 Zählerüberlauf-Interrupts, um eine einfache experimentelle Untersuchung durchzuführen, denn seine Eingangs-/Ausgangsvergleichs-/PWM-Funktion wird ausgelassen. Timer 2 und Timer 3/4 werden ebenfalls nur kurz vorgestellt. Wir warten darauf, dass der Autor ein gewisses Niveau an Feuer erreicht, und stehen dann auf der Höhe der Zigbee-Kampferfahrung, um diesen Aufsatz zu verbessern. Zeitgeber 1 Timer1 ist ein 16-Bit-Timer mit Timer/Counter/Pulsbreitenmodulationsfunktionen. Er verfügt über drei individuell programmierbare Eingangserfassungs-/Ausgangsvergleichskanäle, von denen jeder als PWM-Ausgang oder zum Erfassen der Flankenzeit des Eingangssignals verwendet werden kann (für weitere Informationen darüber, was Eingangserfassung/Ausgangsvergleich ist und wie man PWM-Ausgänge implementiert, kann der Leser das chinesische Handbuch des CC2430 selbst lesen). Der Timer hat ein sehr wichtiges Konzept: den Betriebsmodus. Zu den Betriebsarten gehören: Freilauf, Modulo und Up-Down. Im Folgenden werden die drei Betriebsarten aus dem chinesischen Handbuch des CC2430 vorgestellt:
Der Vergleich der drei Modi zeigt, dass der Überlaufwert des freilaufenden Modus 0xFFFF ist, der nicht geändert werden kann, während die beiden anderen Modi genau gesteuert werden können, indem T1CC0 ein Wert zugewiesen wird, um den Überlaufwert des Zeitgebers genau zu steuern. Dieses Experiment nutzt diese Funktion, um den Timer dazu zu bringen, alle 1s einen Interrupt durch den spezifischen T1CC0 auszulösen, um so das LED-Blinkintervall von 1s genau zu steuern. (1) Einführung in das Experiment Im Modulo-Modus des Zeitgebers wird das Blinkintervall der LED präzise auf 1s gesteuert, d. h.: hell 0,5s → dunkel 0,5s → hell 0,5s → dunkel 0,5s ...... → hell 0,5s → dunkel 0,5s (d. h. der Zeitpunkt des Übergangs von dunkel zu hell beträgt 1s). Die Umkehrung von hell/dunkel wird durch eine Überlaufunterbrechung realisiert. (2) Programmablaufplan (3) Zugehörige Berechnungen Wie bereits erwähnt, ist der Zustand der LED: hell 0,5s → dunkel 0,5s → hell 0,5s → dunkel 0,5s ...... → hell 0,5s → dunkel 0,5s, und müssen mit dem Overflow-Interrupt erreicht werden, daher muss die Overflow-Periode des Timers 0,5s betragen. Zu diesem Zweck muss der entsprechende Overflow-Wert berechnet werden (vorübergehend auf N gesetzt). Die Systemtaktfrequenz ist auf 32MHz eingestellt, und die Taktfrequenz für den Timer beträgt standardmäßig 16MHz (beide werden über das spezielle Funktionsregister CLKCON konfiguriert, das im chinesischen Handbuch des CC2430 zu finden ist). Für Timer 1 stellen Sie seine Taktfrequenz auf 128 Teilungen ein. Zusammenfassend kann die Formel wie folgt lauten:
c
Finden Sie heraus, N = 62500, seine hexadezimale ist 0xF424, das heißt, Sie müssen T1CC0H = 0xF4, T1CC0L = 0x24, das ist .
(4) Experimenteller Quellcode und Analyse/* Experimentbeschreibung: Timer1-Experiment, Timer-Zählerüberlauf, LED1 blinkend */ #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; /* Initialisierung der Systemuhr-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;& nbsp; // beide schalten einwhile (! (SLEEP & 0x40 )); //Kristalloszillator eingeschaltet und stabil CLKCON &=~0x47; &
nbsp; //32MHz-Quarzoszillator auswählen SLEEP |=0x04; }/*LED-Initialisierung-------------------------------------------------------*/void led_init( void ) { & nbsp; P1SEL = 0x00; //P1 ist ein normaler I/O-Port P1DIR |=0x0F; & nbsp; //P1.0 P1.1 P1.2 P1.3 Ausgänge led1 =1; &
nbsp; //Alle LEDs ausschalten led2 =1; led3 =1; led4 =1; }/*T1 Initialisierung---------------------------
- ---------------------------*/void timer1_init( void ) {EA=1; // Gesamtinterrupt einschalten & nbsp; T1IE=1; // T1-Interrupt einschaltenOVFIM=1; // T1-Overflow einschalten
I nterruptT1CC0L=0x24; //Überlaufwert niedrig 8 Bit T1CC0H=0xF4; //Überlaufwert hoch 8 Bit &
nbsp; T1CTL =0x0e; //128 Teilungen; Modulo-Modus (0x0000->T1CC0); Start;T1IF=0; &
nbsp; // Interrupt-Flag löschen }/* Hauptfunktion-------------------------------------------------------*/void main( void
) { xtal_init(); led_init(); timer1_init();while ( 1 ); &
nbsp; //Warten auf Überlauf-Interrupt }/*T1 Terminal Service Unterprogramm-------------------------------------------------------*/#pragma vector=T1_VECTOR __interrupt
v oid T1_ISR( void ) {EA=0; //Aus Interrupt led1 = !
led1; //LEDs umgedrehtEA=1; //On interrupt  
; T1CTL &=~0x10; // Interrupt-Flag löschen } OK, kompilieren Sie das Programm und Online-Debugging, das Entwicklungs-Board auf der LED1 blinkt wie erwartet, fühlen sich die blinkende Intervall von etwa 1s. Aber das ist nicht genug, um den Erfolg des Experiments zu beweisen, wenn Sie rigoros bestimmen das Intervall von 1s wäre perfekt ~ so öffnete ich die WIN 7 Uhr (klicken Sie auf der rechten Seite der Taskleiste Zeit sein kann). Während ich den Sekundenzeiger beobachtete, schaute ich aus den Augenwinkeln auf die blinkende LED1. Das Ergebnis ist: in zwei Minuten ist das Tempo der beiden im Grunde identisch (diese Genauigkeit kann toleriert werden ~). An diesem Punkt kann man sagen, dass das Experiment im Grunde abgeschlossen ist, hehehe~ Drittens, Zeitmesser 2 Timer2, auch als MAC-Timer bekannt, wurde speziell zur Unterstützung des Ereignisverfolgungsprotokolls in IEEE 802.15.4 MAC entwickelt. Der Timer verfügt über einen 8-Bit-Überlaufzähler, mit dem die Anzahl der aufgetretenen Zyklen aufgezeichnet werden kann; er hat ein 16-Bit-Erfassungsregister, mit dem die genaue Zeit aufgezeichnet wird, zu der ein Frame-Start-Begrenzer empfangen/gesendet wird oder zu der eine Übertragung abgeschlossen ist; und er enthält auch ein 16-Bit-Ausgangs-Vergleichsregister, das verwendet wird, um verschiedene befehlsabhängige Kommunikationssignale an das Funkmodul zu einem bestimmten Zeitpunkt zu erzeugen (Empfangsstart, Sendestart usw.). Zeitgeber 3/4 Timer 3/4 ist ein 8-Bit-Timer mit Timer/Counter/PWM-Funktionen. t3/t4 hat zwei Ausgangs-Vergleichskanäle, von denen jeder als PWM-Ausgang verwendet werden kann. V. Schlussfolgerung In diesem Abschnitt haben wir die Methode zur Zählung der Überlaufunterbrechung von Timer 1 kennen gelernt und die präzise Steuerung des LED-Blinkintervalls von 1 s erreicht. Wir werden die anderen Timer nur kurz überfliegen und später hinzufügen. Im nächsten Abschnitt werden wir die Kommunikation über die serielle Schnittstelle des CC2430 vorstellen. |