Salve, come preannunciato eccomi alle prese con i moduli clock del MSP430f419. Purtroppo sto faticando non poco per capire i vari registri e come configurarli... Pian piano sto mettendo insieme i pezzi del puzzle e non vi nego che a volte, dopo aver letto tanto, vado a letto sconfitto e sconfortato per non averci capito una mazza. Invece durante la notte o all'alba mi sveglio dal sonno con i concetti chiari... Ora sono arrivato a farmi delle domande alle quali non sto riuscendo a darmi risposta. Iniziamo col più semplice: il Basic Clock Module in configurazione DCO.
Ho scritto queste poche righe di codice per fare quattro prove. Il mio intento per ora è quello di far lampeggiare un led al tempo di circa un secondo senza utilizzare interrupt, semplicemente contare i cicli di while e scriverli su una variabile che al di sotto di xxx cicli accende il led ed al di sopra lo accende, quando arriva yyy cicli ricomincia il conteggio. di seguito inserisco il codice in modo che sia facilmente leggibile:
Code:
#include <msp430.h>
#define LEDON P2OUT |= BIT0
#define LEDOFF P2OUT &= ~BIT0
void main(void){
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P2DIR |= BIT0;
DCOCTL |= DCO0 + DCO1; //set DCO (3,5) circa 1,2MHZ
DCOCTL &= ~DCO2;
BCSCTL1 |= RSEL0 + RSEL2;
BCSCTL1 &= ~RSEL1;
int i = 0;
while(1){
i = i + 1;
if (i<300000){
LEDON;
}
if (i>300001){
LEDOFF;
}
if (i==600000){
i = 0;
}
}
}
Il mio ragionamento è questo:
- tramite i registri DC0CTL E BCSCTL1 ho impostato la frequenza del DCO a circa 1,2MHZ.
- La frequenza impostata corrisponde al numero di cicli del while al secondo (giusto?)
- Se ad ogni ciclo di while viene effettuata una operazione, facendo la divisione tra il numero di cicli/s (1200000) per il numero di operazioni(4) si ottiene il numero di cicli che il contatore 'conterà' (scusate il gioco di parole) in un secondo.
domanda: quante cavolate ho detto tutte in una volta? il tutto funziona, ma con tempi mooolto più lunghi. dove sbaglio? ripeto per ora vorrei solo capire come gestire il DCO, il resto viene dopo. Grazie