|
1. Reliant les niveaux supérieur et inférieur Dans l’article précédent, nous avons appris ensemble la mise en œuvre des interruptions externes simples. Maintenant que nous avons une expérience pratique des interruptions, parlons des interruptions de minuterie dans cette section. CC2430 dispose d’un total de 4 minuteries, qui peuvent être divisées en 3 catégories : minuterie 1, minuterie 2, minuterie 3/4 (l’utilisation des minuteurs 3 et 4 est la même). Comme l’auteur est également nouveau dans le CC2430 et n’a pratiquement aucune expérience pratique dans les projets impliquant des minuteries, je n’ai pas l’intention (et ne peux rien faire) d’analyser le minuteur en profondeur. Cet article ne propose qu’une brève exploration expérimentale de l’utilisation du minuteur 1 dans les interruptions de dépassement de compte, et ne mentionne pas ses fonctions de capture/comparaison de sortie/PWM. Le minuteur 2 et le minuteur 3/4 ne sont que des introductions de fonctions simples. Après que les compétences de l’auteur auront atteint un certain niveau de puissance, je me tiendrai au sommet de l’expérience pratique de Zigbee pour améliorer cet essai. 2. Minuterie 1Le minuteur 1 est un minuteur 16 bits avec modulation de largeur d’impulsion/compteur/impulsion. Il dispose de 3 canaux de capture et de comparaison d’entrées programmables individuellement, chacun pouvant être utilisé comme sortie PWM ou comme temps de contour pour capturer le signal d’entrée (pour des informations sur ce qu’est la comparaison capture/sortie entrée et comment implémenter la sortie PWM, les lecteurs peuvent se référer au manuel chinois CC2430). Les minuteurs ont un concept très important :Mode de fonctionnement。 Les modes de fonctionnement incluent : Mode de fonctionnement libre (Libre course), mode moule (Modulo) et Compte positif/Mode compte à rebours (Haut-bas)。 Voici un extrait du manuel chinois CC2430 pour l’introduction des 3 modes :
En comparant les trois modes, on peut voir que la valeur de dépassement du mode de fonctionnement libre est 0xFFFF inchangeable ; Les deux autres modes permettent un contrôle précis de la valeur de dépassement du minuteur en attribuant une valeur à T1CC0. Cette expérience utilise cette fonction pour déclencher une interruption tous les 1 seconde par le minuteur via un T1CC0 spécifique, afin de contrôler avec précision l’intervalle de clignotement de la lumière LED à 1 seconde. (1) Introduction à l’expérienceEn mode modulo du minuteur, l’intervalle de clignotement de la lumière LED est précisément contrôlé par 1 seconde, à savoir : 0,5 s → 0,5 s foncé → 0,5 s → 0,5 s faible ...... → 0,5 s clair → 0,5 s sombre (c’est-à-dire que l’intervalle de temps entre sombre et clair est de 1s). L’inversion lumière/obscurité est obtenue par des interruptions de débordement. (2) Organigramme de programme
(3) Calculs pertinentsComme mentionné précédemment, le statut de la lumière LED est : brillant 0,5 s → foncé 0,5 s → brillant 0,5 s → faible 0,5 s ...... → 0,5s de lumière → 0,5 s d’obscurité, et il doit être implémenté avec des interruptions de dépassement, donc la période de dépassement du minuteur doit être de 0,5 s. Pour cela, la valeur de dépassement correspondante doit être calculée (temporairement fixée à N). La fréquence d’horloge du système est sélectionnée comme 32 MHz, et la fréquence d’horloge donnée est 16 MHz par défaut (les deux sont déterminées par des registres de fonctions spéciaux).CLKCONPour plus de détails, veuillez consulter le manuel chinois CC2430). Pour le Timer 1, réglez son croisement d’horloge à 128 divisions. Pour résumer, la liste est la suivante :
Pour trouver N=62500, son hexadécimal est 0xF424, c’est-à-dire qu’il faut définir T1CC0H=0xF4, T1CC0L=0x24 . (4) Code source expérimental et analyse/*
Description de l’expérience : expérience Timer Timer1, débordement du nombre de minuteurs, clignotement LED1
*/
#include
#define menait P1_0
#define P1_1
#define a mené 3 P1_2
#define P1_3 mené
/*系统时钟初始化
-------------------------------------------------------*/
vidextal_init(vide)
{ SOMMEIL &= ~0x04; //都上电
tandis que(! (SOMMEIL &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Choisissez un oscillateur à cristal de 32 MHz SOMMEIL |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
videled_init(vide)
{ P1SEL =0x00; P1 est le port d’E/S normal P1DIR |=0x0F; Sortie P1.0 P1.1 P1.2 P1.3
mené1 =1; //关闭所有LED mené2 =1; mené3 =1; mené4 =1;
}
/*T1初始化
-------------------------------------------------------*/
videtimer1_init(vide)
{ EA=1; //开总中断 T1IE=1; //开T1中断 OVFIM=1; //开T1溢出中断
T1CC0L=0x24; //溢出值低8位 T1CC0H =0xF4; //溢出值高8位
T1CTL =0x0e; 128 crossover ; mode modulo (0x0000->T1CC0) ; Commence à courir ; T1FI=0; Effacez le panneau d’interruption
}
/*主函数
-------------------------------------------------------*/
videmain(vide)
{ xtal_init() ; led_init() ; timer1_init() ;
tandis que(1); //等待溢出中断
}
/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vecteur = T1_VECTOR __interruptvideT1_ISR(vide)
{ EA=0; //关中断
mené1 = !mené1 ; //LED灯反转
EA=1; //开中断
T1CTL &= ~0x10; //清中断标志
}
OK, je compile le programme et je débogue en ligne, LED1 sur la carte de développement clignote comme prévu, et on a l’impression que l’intervalle de clignotement est d’environ 1 seconde. Mais cela ne suffit pas à prouver le succès de l’expérience, si l’intervalle peut être strictement déterminé à 1s, ce sera parfait~ J’ai donc allumé l’horloge de WIN 7 (cliquez sur l’heure à droite de la barre des tâches). En regardant la troise, il observa du coin de l’œil le clignotement de LED1. Le résultat : en deux minutes, le rythme des deux est pratiquement le même (cette précision est tolérable~). À ce stade, on peut dire que l’expérience est pratiquement terminée, hehe~ 3. Minuterie 2Le minuteur 2 est aussi appeléMinuteur MAC, est spécifiquement conçu pour prendre en charge le protocole de suivi des événements dans IEEE 802.15.4 MAC. Le minuteur possède un compteur de dépassement à 8 chiffres qui peut être utilisé pour enregistrer le nombre de cycles effectués ; Il existe un registre de capture 16 bits qui enregistre le moment exact auquel une trame commence à recevoir/envoyer ou le moment exact à laquelle la transmission est terminée. Il contient également un registre de comparaison de sortie 16 bits qui génère divers signaux de commande (début d’acceptation, début d’envoi, etc.) vers le module sans fil à un moment précis. 4. Minuterie 3/4Le minuteur 3/4 est un minuteur 8 bits avec fonction minuterie/compteur/PWM. T3/T4 possède 2 canaux de comparaison de sortie, chacun pouvant être utilisé comme sortie PWM. 5. ConclusionCette section apprend principalement la méthode de l’interruption de débordement de comptage du minuteur 1, et permet de contrôler précisément l’intervalle de clignotement de la LED de 1 seconde. Quelques autres minuteurs ne sont qu’un trait, et je reviendrai les ajouter plus tard. Dans la section suivante, nous allons introduire la communication par port série CC2430.
|