• Non ci sono risultati.

4.2 CAN2USBinterface: una nuova interfaccia seriale

5.1.3 Le altre procedure

Apparte le funzioni di invio dei comandi e quelle che implementano i servizi di interruzione che abbiamo cercato di descrivere in questa prima parte del capitolo, MICROsoftware `e composto da altre interessanti procedure, per lo pi`u procedure di inizializzazione, che di seguito descriviamo.

init global var() : inizializza la struttura dati “CodaRX” ed altre variabili utilizzate nel codice.

init serial2() : imposta i parametri di configurazione per la la comunica- zione via RS232.

autobaud() : ricava per approssimazioni successive una configurazione di bit timing adeguata al bitrate incognito della rete, i parametri calcolati vengono inviati a CANsoftware che in questo modo `e in grado di fornire all’utente indicazioni sul bitrate stimato.

decode init sequence() : dai dati ricevuti da CANsoftware e da quelli eventualmente generati dalla funzione “autobaud()”: inizializza le va- riabili locali, i parametri del CAN controller (imposta i canali in “Buf- fer Receive mode”, i parametri di bit-timing, abilita le interruzioni) ed abilita quest’ultimo.

Capitolo 5. Il software di CANanalyser 148

Queste procedure si occupano per lo pi`u della fase di configurazione del mi- crocontrollore ed in modo particolare del CAN controller; terminata questa prima fase inizia un ciclo interrotto solo dalla ricezione di una richiesta di disconnessione e cio`e di arresto dell’acquisizione, in questa fase i messag- gi prelevati dalla rete, caricati nelle relative mailbox dal CAN controller e riorganizzati opportunamente dal software vengono inviati al PC assieme ai comandi di gestione dell’overbuffer e dell’overrun.

5.1.3.1 La porta di comunicazione seriale

Lo scambio in modo seriale di informazioni tra due dispositivi richiede una qualche procedura di sincronizzazione attraverso cui il ricevitore `e in gra- do di identificare quando un dato viene trasmesso. La comunicazione con la porta COM del PC `e una comunicazione di tipo asincrono14 dove quindi nessun segnale di clock viene inviato con i dati15. Ogni dato (tipicamente 8 bit) `e sincronizzato usando un “bit di start” che precede la trasmissione dell’informazione (si parte sempre dal bit meno significativo), un clock in- terno al ricevitore scandisce gli istanti di campionamento (in base al bitrate impostato) a partire dall’istante di ricezione del bit di start. La comunica- zione si chiude con l’invio dello “stop bit” e la linea si porta in stato di idle corrispondente al “mark state” della seriale o livello logico 1 in cui rimane in attesa di un un nuovo dato.

5.1.3.2 Programmazione della UART

La UART del T89C51CC01 programmata in modalit`a16 1 `e configurata per trasmettere e ricevere trame di 10 bit composte da un bit di start, uno di stop e 8 bit di dato con un bitrate che pu`o essere impostato ad un valore “arbitrario” sfruttando come “baudrate generator” il Timer 1 o il Timer 2. Quando uno dei due timer (altro non sono che contatori comandati da un se- gnale di clock) viene sfruttato come generatore del bitrate quest’ultimo viene determinato dalla frequenza con cui il contatore raggiunge la condizione di

14I termini “comunicazione sincrona” e “asincrona” creano un p`o di confusione, `e bene

ricordare che entrambi richiedono la “sincronizzazione” tra ricevitore e trasmettitore

15Comunicazione sincrona: i dati sono inviati a gruppi con cadenza regolare e sono pre-

ceduti da caratteri speciali chiamati “syn” o “synchronous idle characters” che il ricevitore usa per sincronizzarsi con il trasmettitore. Non ci sono gap tra i caratteri trasmessi, la banda viene sfruttata quasi totalmente, si tratta di un meccanismo di comunicazione utile se si devono trasferire grosse quantit`a d’informazioni

16La modalit`a di funzionamento della porta seriale del microcontrollore viene selezionata

per mezzo dei bit “SM0” e “SM1” nel registro di configurazione “SCON” (Serial CONtrol register).

X2 = 1 T2X2 = 0 Configurazione: SM0 = 0 SM1 = 1 TCLK = RCLK =1 RCAP2L = F7h RCAP2H = FFh

La UART viene attivata in modalità 1 in ricezione e trasmissione Si abilita la funzionalità

X2 per la UART

Valori per ottenere un bitrate prossimo a 115.2Kbit/

Figura 5.10: ATMEL T89C51CC01: timing dei segnali della UART configurata in modalit`a 1.

overflow. Per fare in modo di ottenere una frequenza costante il timer vie- ne programmato in modalit`a “Auto-Reload” e cio`e raggiunto l’overflow vie- ne automaticamente ricaricato al valore preimpostato contenuto nei registri “RCAP1” (Reload/CAPture timer register 1) o “RCAP2” (Reload/CAPture timer register 2).

Il Timer 2 che `e stato sfruttato per questo scopo `e un contatore a 16 bit implementato attraverso due registri da 8 bit, “TH2” (Timer 2 High byte register) e “TL2” (Timer 2 Low byte register). Il Timer 1 lavora in modalit`a auto-reload solo come registro ad 8 bit e ci`o non consente di sfruttarlo come generatore di bitrate17per CANinterface e come conseguenza viene impiegato il Timer 2; programmando i due registri “RCAP2L” e “RCAP2H” come in figura 5.10 si riesce a generare un bitrate di 111.1Kbit/s18 che si discosta di meno del 4% dal valore richiesto di 115.2Kbit/s garantendo un errore minimo che interfaccia e PC si `e verificato, sono in grado di sopportare.

La UART viene configurata per essere sfruttata in modalit`a full-duplex con identico baudrate in ricezione e trasmissione attraverso i bit “TCLK” e “RCLK” di “T2CON” (Timer 2 CONntrol register).

5.1.3.3 Rilevamento del CAN bit-rate in automatico

In una rete CAN ogni nodo partecipa alla gestione del traffico per effetto del fatto che i messaggi vengono inviati sulla rete in modalit`a “broadcast”

17Il valore massimo generabile `e di 83.3Kbit/s.

18A tale scopo si sfrutta il micro in modalit`a X2 (6 cicli di clock per istruzione)

Capitolo 5. Il software di CANanalyser 150

e ogni nodo in ricezione deve essere in grado di gestire l’acknowledge che deve essere fornito al modulo trasmittente. La comunicazione non viene

disturbata se un nodo non fornisce l’ack di risposta ma ce n’`e almeno un’altro che decodifica il messaggio in modo corretto (`e questo secondo modulo che

fornisce l’ack). Questo comportamento pu`o essere utilizzato da un nodo non ancora inizializzato per rilevare automaticamente il bitrate della rete a cui viene connesso, quindi `e possibile implementare funzione di “Hot-plugging”; ovviamente in questa fase il nodo non deve in alcun modo interagire con le altre stazioni della rete. La procedura di MICROsoftware che si occupa di gestire questa funzionalit`a `e detta “autobaud()”.

Il micro configurato in “Listening Mode” `e in grado di provare differenti configurazioni di bit time senza che venga trasmesso un Error Frame in caso di bitrate errato. Quando viene trovata la configurazione corretta il sistema non rileva pi`u condizioni di errore alla ricezione di un frame, in questo modo riconosce la configurazione di bit timing corretta ed il nodo `e a questo punto pronto per partecipare in modo attivo alla gestione del bus. Lo schema di figura5.11descrive la tecnica di rilevamento del CAN baudrate impiegata in MICROsoftware.

Una volta che la procedura di “autobaud()” `e terminata i parametri di bit timing cos`ı ricavati vengono formattati su 5 byte ed inviati a CANsoftware rispettando la sequenza riportata in tabella 5.5.

Mnemonic Description Bin Hex

ini array[9] Bit timing Prescaler BRP 00xx xxxx 00-3Fh ini array[10] Bit timing Re-sync. SJW 0000 00xx 00-03h ini array[11] Bit timing Prop. time PRS 0000 0xxx 00-07h ini array[12] Bit timing Phase seg.1 PHS1 0000 0xxx 00-07h ini array[13] Bit timing Phase seg.2 PHS2 0000 0xxx 00-07h

Tabella 5.5: MICROsoftware: comandi di bit timing inviati a CANsoftware.

Documenti correlati