Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 7780|Risposta: 0

Viaggio Zigbee (4): Diversi importanti esperimenti di base CC2430 - interruzione del timer

[Copiato link]
Pubblicato su 30/10/2014 23:17:29 | | | |
1. Collegamento tra i livelli superiori e inferiori

Nel precedente articolo, abbiamo appreso insieme l'implementazione di semplici interruzioni esterne. Ora che abbiamo esperienza pratica con gli interrupt, parliamo delle interruzioni a timer in questa sezione. CC2430 ha un totale di 4 timer, che possono essere suddivisi in 3 categorie: timer 1, timer 2, timer 3/4 (l'uso di 3 e 4 è lo stesso).

Poiché l'autore è anche nuovo al CC2430 e non ha praticamente alcuna esperienza pratica in progetti che coinvolgono timer, non intendo (e non posso fare nulla) analizzare il timer in profondità. Questo articolo fornisce solo una breve esplorazione sperimentale dell'uso del timer 1 nelle interruzioni di overflow di conteggio, senza menzionare le sue funzioni di cattura/confronto di output/PWM. Timer 2 e Timer 3/4 sono solo semplici introduzioni di funzioni. Dopo che le competenze dell'autore raggiungeranno un certo livello di intensità, mi metterò al massimo dell'esperienza pratica di Zigbee per migliorare questo saggio.

2. Timer 1

Il timer 1 è un timer a 16 bit con modulazione di timer/contatore/larghezza di impulsi. Dispone di 3 canali di confronto di cattura/uscita input singolarmente programmabili, ciascuno dei quali può essere utilizzato come uscita PWM o come tempo di margine per catturare il segnale di ingresso (per informazioni su cosa sia il confronto cattura/uscita input e come implementare l'output PWM, i lettori possono consultare il manuale cinese CC2430).

I timer hanno un concetto molto importante:Modalità di funzionamento

Le modalità operative includono: modalità di funzionamento libero (Libero Running), modalità stampo (modulo) e Conteggio Positivo/Modalità Conto alla rovescia (su-giù)。

Segue un estratto dal manuale cinese CC2430 per l'introduzione delle 3 modalità:



Confrontando le tre modalità, si può vedere che il valore di overflow della modalità di operazione libera è 0xFFFF immutabile; Le altre due modalità permettono un controllo preciso del valore di overflow del timer assegnando un valore a T1CC0. Questo esperimento utilizza questa funzione per attivare un interruzione ogni 1 secondo tramite il timer tramite uno specifico T1CC0, in modo da controllare con precisione l'intervallo di lampeggiamento della luce LED a 1.

(1) Introduzione all'esperimento

Nella modalità modulo del timer, l'intervallo di lampeggiamento della luce LED è controllato con precisione da 1 secondo, ovvero: 0,5 secondi luminosi → 0,5 secondi scuri → 0,5 secondi → 0,5 secondi fiochi ...... → 0,5 seconde chiare → 0,5 seconde scure (cioè, l'intervallo di tempo dal buio alla luce è 1 secondo). L'inversione luce/scuro si ottiene tramite interruzioni di sovraplessità.

(2) Diagramma di flusso del programma

(3) Calcoli rilevanti

Come detto prima, lo stato della luce LED è: luminoso 0,5 secondi → scuro 0,5 secondi → intenso 0,5 secondi → fiocco 0,5 secondi ...... → 0,5s di luce → 0,5 secondi di scurezza, e deve essere implementato con interruzioni di overflow, quindi il periodo di overflow del timer deve essere di 0,5s. Per fare ciò, è necessario calcolare il corrispondente valore di overflow (temporaneamente impostato a N).

La frequenza di clock del sistema è selezionata come 32MHz, e la frequenza di clock data è 16MHz di default (entrambe sono determinate da registri di funzione speciali).CLKCONPer dettagli, si prega di consultare il manuale cinese CC2430).

Per Timer 1, imposta il crossover del clock a 128 divisioni.

In sintesi, l'elenco è il seguente:

Per trovare N=62500, il suo esadecimale è 0xF424, cioè bisogna impostare T1CC0H=0xF4, T1CC0L=0x24 .

(4) Codice sorgente sperimentale e analisi/*
    Descrizione dell'esperimento: esperimento Timer Timer1, overflow del conteggio timer, lampeggiamento LED1
*/

#include

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

/*系统时钟初始化
-------------------------------------------------------*/
Voidxtal_init(Void)
{
  SONNO &= ~0x04;            //都上电
  mentre(! (SONNO &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Scegli un oscillatore a cristallo a 32MHz
  SONNO |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Voidled_init(Void)
{
  P1SEL =0x00;            P1 è la normale porta I/O
  P1DIR |=0x0F;            Uscita P1.0 P1.1 P1.2 P1.3
  
  Led1 =1;                  //关闭所有LED
  Led2 =1;
  led3 =1;
  Led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
Voidtimer1_init(Void)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modalità modulo (0x0000->T1CC0); Inizia a correre;
  T1IF=0;           Libera il segnale di interruzione  
}

/*主函数
-------------------------------------------------------*/
Voidmain(Void)
{
  xtal_init();
  led_init();
  timer1_init();

  mentre(1);            //等待溢出中断
}

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

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

OK, compila il programma e fai il debug online, LED1 sulla scheda di sviluppo lampeggia come previsto, e sembra che l'intervallo di flashing sia circa 1 secondo. Ma questo non è sufficiente per dimostrare il successo dell'esperimento, se l'intervallo può essere determinato strettamente come 1s, sarà perfetto~ Così ho acceso l'orologio di WIN 7 (clicca sull'ora sul lato destro della barra delle applicazioni). Guardando la lancetta dei secondi, guardò di sfuggita il lampeggiare del LED1. Il risultato: in due minuti, il ritmo dei due è praticamente lo stesso (questa precisione è tollerabile~). A questo punto, si può dire che l'esperimento è praticamente concluso, hehe~

3. Timer 2

Timer 2 è chiamato ancheTimer MAC, è specificamente progettato per supportare il protocollo di tracciamento eventi in IEEE 802.15.4 MAC. Il timer ha un contatore di overflow a 8 cifre che può essere usato per registrare il numero di cicli avvenuti; Esiste un registro di cattura a 16 bit che registra l'orario esatto in cui un frame inizia a ricevere/inviare o il momento esatto in cui la trasmissione viene completata. Contiene anche un registro di comparazione di uscita a 16 bit che genera vari segnali di command gating (inizio accettazione, inizio invio, ecc.) al modulo wireless in un momento specifico.

4. Timer 3/4

Il timer 3/4 è un timer a 8 bit con funzione timer/contatore/PWM. T3/T4 ha 2 canali di confronto di uscita, ciascuno dei quali può essere usato come uscita PWM.

5. Conclusione

Questa sezione apprende principalmente il metodo dell'interruzione del conteggio di overflow del timer 1 e realizza il controllo preciso dell'intervallo di lampeggiamento della luce LED di 1s. Solo qualche altro timer è solo un colpo, e tornerò ad aggiungerli più tardi. Nella sezione successiva, presenteremo la comunicazione della porta seriale CC2430.






Precedente:Viaggio Zigbee (3): Diversi importanti esperimenti di base CC2430 - interruzione esterna
Prossimo:Viaggio Zigbee (5): Diversi importanti esperimenti di base CC2430 - comunicazione seriale
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com