Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 7780|Antwort: 0

Zigbee Journey (4): Mehrere wichtige CC2430-Grundexperimente – Timerunterbrechung

[Link kopieren]
Veröffentlicht am 30.10.2014 23:17:29 | | | |
1. Verbindung der oberen und unteren Ebenen

Im vorherigen Artikel haben wir gemeinsam über die Implementierung einfacher externer Interrupts gelernt. Da wir nun praktische Erfahrung mit Interrupts haben, sprechen wir in diesem Abschnitt über Timer-Interrupts. CC2430 hat insgesamt 4 Timer, die in 3 Kategorien unterteilt werden können: Timer 1, Timer 2, Timer 3/4 (die Verwendung von 3 und 4 ist gleich).

Da der Autor ebenfalls neu bei CC2430 ist und praktisch keine praktische Erfahrung mit Projekten mit Timern hat, habe ich nicht vor, den Timer eingehend zu analysieren (und kann auch nichts tun). Dieser Artikel bietet nur eine kurze experimentelle Untersuchung der Verwendung von Timer 1 bei Count-Overflow-Unterbrechungen und erwähnt nicht deren Funktionen für Eingabeerfassung/Ausgabevergleich/PWM. Timer 2 und Timer 3/4 sind nur einfache Funktionseinführungen. Nachdem die Fähigkeiten des Autors ein gewisses Maß an Hitze erreicht haben, werde ich auf dem Höhepunkt von Zigbees praktischer Erfahrung stehen, um diesen Aufsatz zu verbessern.

2. Timer 1

Timer 1 ist ein 16-Bit-Timer mit Timer-/Zähler-/Pulsbreitenmodulation. Er verfügt über 3 einzeln programmierbare Eingangs-Erfassungs-/Ausgangsvergleichskanäle, von denen jeder als PWM-Ausgang oder als Randzeit zur Erfassung des Eingangssignals verwendet werden kann (Informationen darüber, was Eingangserfassung/Ausgabevergleich besteht und wie man PWM-Ausgang implementiert, können Leser im chinesischen Handbuch CC2430 nachsehen).

Timer haben ein sehr wichtiges Konzept:Funktionsweise

Zu den Betriebsmodi gehören: Freier Betriebsmodus (Freilauf), Formmodus (modulo) und positiver Zähl-/Countdown-Modus (Oben-runter)。

Im Folgenden ein Auszug aus dem chinesischen Handbuch CC2430 zur Einführung der drei Modi:



Beim Vergleich der drei Moden zeigt sich, dass der Überlaufwert des freien Betriebsmodus 0xFFFF unveränderlich ist; Die anderen beiden Modi ermöglichen eine präzise Steuerung des Überlaufwerts des Timers, indem ein Wert T1CC0 zugewiesen wird. Dieses Experiment nutzt diese Funktion, um alle 1 Sekunden durch den Timer über einen bestimmten T1CC0 einen Interrupt auszulösen, um das Blinkintervall der LED-Lampe auf 1 Sekunden genau zu steuern.

(1) Einführung in das Experiment

Im modulo-Modus des Timers wird das Blinkintervall der LED-Leuchte präzise durch 1s gesteuert, nämlich: helle 0,5s → dunkle 0,5s → helle 0,5s → schwache 0,5s ...... → Hell 0,5 Sekunden → Dunkel 0,5 Sekunden (d. h. das Zeitintervall von Dunkel zu Licht beträgt 1 Sekunde). Die Hell-/Dunkel-Inversion wird durch überlaufende Unterbrechungen erreicht.

(2) Programmflussdiagramm

(3) Relevante Berechnungen

Wie bereits erwähnt, lautet der Status der LED-Lampe: hell 0,5 Sekunden → dunkle 0,5 Sekunden → hell 0,5 Sekunden → schwache 0,5 Sekunden ...... → 0,5s Licht → 0,5s Dunkel, und es muss mit Überlauf-Interrupts implementiert werden, sodass der Überlaufzeitraum des Timers 0,5 Sekunden betragen muss. Dazu muss der entsprechende Überlaufwert berechnet werden (vorübergehend auf N gesetzt).

Die Systemtaktfrequenz wird mit 32 MHz gewählt, und die angegebene Taktfrequenz beträgt standardmäßig 16 MHz (beide werden durch spezielle Funktionsregister bestimmt).CLKCONFür Details siehe bitte das chinesische Handbuch CC2430).

Für Timer 1 stellen Sie das Uhr-Crossover auf 128 Divisionen ein.

Zusammenfassend lautet die Liste wie folgt:

Um N=62500 zu finden, ist sein hexadezimal 0xF424, das heißt, man muss T1CC0H=0xF4, T1CC0L=0x24 setzen.

(4) Experimenteller Quellcode und Analyse/*
    Experimentbeschreibung: Timer Timer1 Experiment, Timer Count Overflow, LED1 blinkt
*/

#include

#define led1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
Leerextal_init(Leere)
{
  SCHLAF &= ~0x04;            //都上电
  während(! (SCHLAF &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Wählen Sie einen 32-MHz-Kristalloszillator
  SCHLAF |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Leereled_init(Leere)
{
  P1SEL =0x00;            P1 ist der normale I/O-Port
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3 Ausgang
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
Leeretimer1_init(Leere)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 Crossover; modulo Modus (0x0000->T1CC0); Fang an zu laufen;
  T1IF=0;           Löschen Sie das Unterbrechungsschild  
}

/*主函数
-------------------------------------------------------*/
Leeremain(Leere)
{
  xtal_init();
  led_init();
  timer1_init();

  während(1);            //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma Vektor=T1_VECTOR
__interruptLeereT1_ISR(Leere)
{
  EA=0;               //关中断
  
  led1 = !led1;      //LED灯反转

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

Okay, kompiliere das Programm und debugge online, LED1 auf der Entwicklungsplatine blinkt wie geplant, und es fühlt sich an, als würde das Blinkintervall etwa 1 Sekunden betragen. Aber das reicht nicht aus, um den Erfolg des Experiments zu beweisen; wenn das Intervall streng auf 1s bestimmt werden kann, ist es perfekt~ Also schaltete ich die Uhr von WIN 7 ein (klicke auf die Zeit auf der rechten Seite der Taskleiste). Während er den Sekundenzeiger betrachtete, sah er aus dem Augenwinkel das blinkende LED1. Das Ergebnis: Innerhalb von zwei Minuten ist das Tempo der beiden im Grunde exakt gleich (diese Präzision ist erträglich~). An diesem Punkt kann man sagen, dass das Experiment im Grunde abgeschlossen ist, hehe~

3. Timer 2

Timer 2 wird auch als Timer 2 bezeichnetMAC-Timer, speziell entwickelt wurde, um das Ereignisverfolgungsprotokoll in IEEE 802.15.4 MAC zu unterstützen. Der Timer verfügt über einen 8-stelligen Überlaufzähler, mit dem die Anzahl der Zyklen erfasst werden kann; Es gibt ein 16-Bit-Capture-Register, das die genaue Zeit aufzeichnet, zu der ein Frame zu empfangen/senden beginnt oder den genauen Zeitpunkt der Übertragung abgeschlossen ist. Es enthält außerdem ein 16-Bit-Ausgangsvergleichsregister, das verschiedene Befehlsgating-Signale (Start Accepting, Start Senden usw.) zu einem bestimmten Zeitpunkt an das drahtlose Modul erzeugt.

4. Timer 3/4

Timer 3/4 ist ein 8-Bit-Timer mit Timer/Zähler/PWM-Funktion. T3/T4 verfügt über 2 Ausgangsvergleichskanäle, von denen jeder als PWM-Ausgang verwendet werden kann.

5. Fazit

Dieser Abschnitt lernt hauptsächlich die Methode des Count-Overflow-Interrupts des Timers 1 kennen und realisiert die präzise Steuerung des LED-Lichtblinkintervalls von 1 Sekunden. Nur ein paar andere Timer sind nur ein Strich, und ich werde später noch einmal hinzufügen. Im nächsten Abschnitt stellen wir die CC2430-Seriellport-Kommunikation vor.






Vorhergehend:Zigbee-Reise (3): Mehrere wichtige CC2430-Grundexperimente – externe Unterbrechung
Nächster:Zigbee Journey (5): Mehrere wichtige CC2430-Grundexperimente – serielle Kommunikation
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com