da
TardoFreak » 4 mar 2012, 10:53
Molto brevemente le le porte di I/O vengono utilizzate come semplici locazioni di memoria. Nei micro ad 8 bit sono in pratica variabili di tipo char o unisgned char i cui bit corrispondono alle linee fisiche di I/O.
I pin di I/O sono bidirezionali quindi c'è almeno un registro, un byte da qualche parte che si chiama in qualche modo, che contiene le informazioni per la direzione delle linee fisiche. Ma micro più complessi possono avere, per ogni porta, diverse locazioni in memoria per definirne e gestirne il funzionamento. Inoltre ogni casa/compilatore ha i suoi files di definizione quindi non c'è uno standard generale.
Qualche esempio aiuterà a capire meglio.
Famiglie PIC18/PIC24. Ogni porta di I/O usa tre registri: uno per impostare la direzione dei pin, uno per leggere direttamente lo stato dei pin e uno per il latch di uscita. Inizialmente si imposta il valore del registro di direzione, nel caso della porta B TRISB, dove un bit a 0 indica una linea di uscita, a 1 indica un ingresso. Per leggere lo stato dei pin si usa il registro PORTB mentre per scrivere un dato in uscita si usa il registro LATB. I files di definizione del micro permettono anche di indirizzare il singolo bit. I bit sono raggruppati in strutture quindi per testare il bit 4 della porta B si può fare riferimento a PORTBbits.RB4 e via discorrendo.
AVR ATmega/AT90. Anche qui ogni porta ha tre registri: DDRx (Data Direction Register della porta x), il PINx per leggere gli ingressi e PORTx per scrivere le uscite. Sono simili a quelli dei PIC ma con delle differenze. Ad esempio la direzione del pin è indicata con 1 se è un uscita e con 0 se è un ingresso.
STM32. Su questo micro la cosa è più complessa perché le linee di I/O sono molto più versatili e si può definire, oltre alla direzione, anche la frequenza massima del pin, si possono settare/resettare i bit in modo atomico ed altre cose.
In buona sostanza bisogna prendere il datasheet del micro e studiarsi le porte, imparare i nomi dei registri coinvolti, spulciare dentro i files di definizione e quindi usare le porte. Sono tutte cose indispensabili da fare per poter utilizzare non solo le porte ma tutte le periferiche del micro.
Suggerisco di andarsi a guardare anche i sorgenti degli esempi forniti dal costruttore per capire che filosofia hanno utilizzato per definire gli identificatori che fanno riferimento a porte e periferiche perché ognuno usa un suo sistema. E' il modo migliore per capire come usarle.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.