架构师_程序员_码农网

N Récupérer le mot de passe
S'inscrire

QQ登录

Une seule étape pour commencer

Recherche
Vue :5109|Réponse : 0
打印 上一主题 下一主题

[Translate] Zigbee Journey (IV) : Quelques expériences de base importantes du CC2430 - timer interrupt

[Copier le lien]
A 跳转到指定楼层
le propriétaire du bâtiment
发表于 2014-10-30 23:17:29|只看该作者回帖奖励 | Mode lecture
I. Poursuite de l'article précédent

  Dans la section précédente, nous avons appris à mettre en œuvre ensemble des interruptions externes simples. Le CC2430 possède 4 timers, qui peuvent être divisés en 3 catégories : Timer1, Timer2, Timer3/4 (l'utilisation de 3 et 4 est la même).

  Comme l'auteur ne fait que toucher le CC2430, l'expérience du projet impliquant le timer est pratiquement nulle, donc je n'ai pas l'intention (et je ne peux pas aider) d'analyser en profondeur le timer. Cet article ne traite que de l'utilisation de l'interruption pour dépassement de compte du timer 1 pour faire une simple exploration expérimentale, car sa fonction de capture d'entrée/comparaison de sortie/PWM est omise. Le timer 2 et le timer 3/4 ne sont également présentés que brièvement. En attendant que la puissance de l'auteur atteigne un certain niveau de feu, et ensuite se tenir dans la hauteur de l'expérience de combat Zigbee pour améliorer cet essai.

Minuterie 1

  La minuterie 1 est une minuterie de 16 bits avec des fonctions de minuterie/compteur/modulation de largeur d'impulsion. Il possède trois canaux de comparaison de capture d'entrée/sortie programmables individuellement, chacun pouvant être utilisé comme sortie PWM ou pour capturer le temps de front du signal d'entrée (pour plus d'informations sur ce qu'est la comparaison de capture d'entrée/sortie et sur la manière d'implémenter les sorties PWM, les lecteurs peuvent se référer au manuel chinois du CC2430).

  La minuterie a un concept très important : le mode de fonctionnement.

  Les modes de fonctionnement sont les suivants : marche libre, modulo et haut-bas.

  Voici la présentation des trois modes dans le manuel chinois du CC2430 :



  En comparant les trois modes, on constate que : la valeur de débordement du mode free-running est de 0xFFFF qui n'est pas modifiable ; tandis que les deux autres modes peuvent être contrôlés avec précision en attribuant une valeur à T1CC0 afin de contrôler précisément la valeur de débordement du timer. Cette expérience utilise cette caractéristique pour faire en sorte que la minuterie déclenche une interruption toutes les 1s par l'intermédiaire de la valeur T1CC0, de manière à contrôler précisément l'intervalle de clignotement de la LED de 1s.

(1) Introduction à l'expérience

  Dans le mode modulo de la minuterie, l'intervalle de clignotement de la LED est précisément contrôlé à 1s, c'est-à-dire : lumière 0,5s → obscurité 0,5s → lumière 0,5s → obscurité 0,5s ...... → lumière 0,5s → obscurité 0,5s (c'est-à-dire que le moment du passage de l'obscurité à la lumière est de 1s). L'inversion lumière/obscurité est réalisée par une interruption de débordement.

(2) Organigramme du programme

(3) Calculs connexes

  Comme mentionné précédemment, l'état de la LED est le suivant : bright 0.5s → dark 0.5s → bright 0.5s → dark 0.5s ...... → clair 0,5s → foncé 0,5s, et doivent être réalisés avec l'interruption de débordement, de sorte que la période de débordement de la minuterie doit être de 0,5s. À cette fin, la valeur de débordement correspondante doit être calculée (temporairement réglée sur N).

  La fréquence de l'horloge système est sélectionnée à 32MHz, et la fréquence de l'horloge fournie au timer est de 16MHz par défaut (les deux sont configurées par le registre de fonction spéciale CLKCON, qui peut être trouvé dans le manuel chinois du CC2430).

  Pour le timer 1, réglez sa fréquence d'horloge à 128 divisions.

  En résumé, la formule peut être la suivante :

2011022120560133.jpg
c

  Trouvez N = 62500, son hexadécimal est 0xF424, c'est-à-dire qu'il faut mettre T1CC0H = 0xF4, T1CC0L = 0x24 c'est-à-dire .








(
4) code source expérimental et analyse/* Description de l' expérience : expérience Timer1, dépassement du compteur du timer, clignotement de la LED1 */ #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 ; /* initialisation de l'horloge système-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp ; // les deux s'allumentwhile ( !
(SLEEP & 0x40 )) ; //oscillateur à cristaux activé et stable CLKCON &=~0x47; &







nbsp ; //sélectionne l'oscillateur à cristal 32MHz SLEEP |=0x04; }/*Initialisation des LED-------------------------------------------------------*/void led_init( void ) { &
nbsp ; P1SEL = 0x00; //P1 est un port E/S normal P1DIR |=0x0F; &

nbsp ; //P1.0 P1.1 P1.2 P1.3 sorties led1 =1; &






nbsp ; //Eteindre toutes les LEDs led2 =1; led3 =1; led4 =1; }/*Initialisation du T1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // activer l'interruption totale &
nbsp; T1IE=1; // activation de l'interruption T1OVFIM=1; // activation du débordement T1



T 1CC0L=0x24; // valeur de débordement 8 bits T1CC0H=0xF4; // valeur de débordement 8 bits & nbsp ;T1CTL = 0x24; // valeur de débordement 8 bits &

nbsp ; T1CTL =0x0e; //128 divisions ; mode modulo (0x0000->T1CC0) ; commence à fonctionner ;T1IF=0; &




nbsp ; // efface le drapeau d'interruption }/* fonction principale-------------------------------------------------------*/void main( void





) { xtal_init() ; led_init() ; timer1_init() ;while ( 1 ) ; &





nbsp ; //attend l'interruption pour dépassement de capacité }/*Sous-routine de service du terminal T1-------------------------------------------------------*/#pragma vector=T1_VECTOR __interrupt



v oid T1_ISR( void ) {EA=0; //désactiver l'interruption led1 = !


led1 ; //LEDs inverséesEA=1; //Sur interruption &nbsp

; T1CTL &=~0x10; // efface le drapeau d'interruption }

  OK, compilation du programme et débogage en ligne, la carte de développement sur la LED1 clignote comme prévu, sentir l'intervalle de clignotement d'environ 1s. Mais ce n'est pas suffisant pour prouver le succès de l'expérience, si vous pouvez déterminer rigoureusement l'intervalle de 1s serait parfait ~ donc j'ai ouvert l'horloge WIN 7 (cliquez sur le côté droit de la barre des tâches l'heure peut être). Tout en regardant l'aiguille des secondes, j'ai jeté un coup d'œil du coin de l'œil à la LED1 qui clignotait. Le résultat est le suivant : en deux minutes, le rythme des deux est pratiquement identique (cette précision peut être tolérée ~). A ce stade, on peut dire que l'expérience est pratiquement terminée, hehehe~

Troisièmement, le chronomètre 2

  La minuterie 2, également connue sous le nom de minuterie MAC, est spécialement conçue pour prendre en charge le protocole de suivi des événements dans le MAC IEEE 802.15.4. Le timer possède un compteur de débordement de 8 bits qui peut être utilisé pour enregistrer le nombre de cycles qui se sont produits ; il possède un registre de capture de 16 bits qui est utilisé pour enregistrer le moment exact où un délimiteur de début de trame est reçu/transmis ou le moment exact où une transmission est terminée ; il contient également un registre de comparaison de sortie de 16 bits qui est utilisé pour générer divers signaux de communication sélectifs de commande vers le module sans fil à un moment spécifique (commencer à recevoir, commencer à transmettre, etc.).

Minuterie 3/4

  La minuterie 3/4 est une minuterie de 8 bits avec des fonctions de minuterie/compteur/PWM. t3/t4 possède deux canaux de comparaison de sortie, chacun pouvant être utilisé comme sortie PWM.

V. Conclusion

  Dans cette section, nous avons appris la méthode de comptage de l'interruption de débordement du timer 1, et nous avons réalisé le contrôle précis de l'intervalle de clignotement de la LED de 1 s. Nous ne ferons qu'effleurer les autres timers, et nous reviendrons les ajouter plus tard. Dans la section suivante, nous présenterons la communication avec le port série du CC2430.






Previous :[Re-]Zigbee Journey (III) : Quelques expériences de base importantes sur le CC2430 - Interruptions externes
Next :[Re-changed] Zigbee Journey (V) : Quelques expériences de base importantes sur le CC2430 - Communication série
Code farmer network, seulement publié dans le processus de pratique, rencontré des difficultés techniques, ne pas induire les autres en erreur.
Vous devez vous connecter avant de pouvoir poster Log in | Register

C ette version des règles intégralesR


AVERTISSEMENT : Tous les logiciels, matériels de programmation ou articles publiés par Code Farmer sont destinés à être utilisés uniquement à des fins d'apprentissage et de recherche ; le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon, toutes les conséquences seront supportées par les utilisateurs eux-mêmes. Les informations de ce site proviennent du réseau, le litige sur les droits d'auteur n'a rien à voir avec ce site. Vous devez supprimer complètement le contenu susmentionné de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, soutenez le logiciel authentique, achetez l'enregistrement et obtenez un meilleur service authentique. En cas d'infraction, veuillez nous contacter par courrier électronique pour régler le problème.

Courrier To:help@itsvse.com

QQ | ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:50

Réponse rapideRetour au débutRetour à la liste