AMIS30543 - Codice libreria | Ordine di pinDirection e pinOut
Questo pezzo di codice è stato preso dalla libreria AMIS30543- Arduino,
void init(uint8_t slaveSelectPin) {
ssPin = slaveSelectPin;
digitalWrite(ssPin, HIGH);
pinMode(ssPin, OUTPUT);
}
Fatti che conosco
- digitalWrite - rende il pin al livello di tensione corrispondente
- pinMode: rende il pin input o output
- ssPin è solitamente un pin basso attivo.
Quindi mi chiedevo prima di impostare pinDirection perché il pin è alto, quindi subito dopo il pinDirection è stato dichiarato come OUTPUT
Inoltre so, se un pin è stato reso ALTO e sulla riga successiva se la direzione dello stesso è impostata come INPUT porterà in azione la resistenza di pull up interna.
Allora cosa mi manca qui. Inoltre in Arduino è importante l'ordine di pinMode / digitalWrite? se Allora qual è il significato di queste particolari righe di codice Github link alla libreria
Risposte
La libreria sta facendo questo per assicurarsi che il pin non si abbasserà mai durante l'inizializzazione.
Immagina di farlo al contrario:
pinMode(ssPin, OUTPUT);
digitalWrite(ssPin, HIGH);
Se il bit PORT corrispondente è impostato su zero (LOW) in precedenza (che è anche lo standard dopo il reset / ciclo di alimentazione), il pin diventerà LOW per un tempo molto breve, fino a quando digitalWrite()non lo reimposta di nuovo HIGH. Quel tempo BASSO è breve, ma potrebbe attivare inutilmente lo schiavo. Se si utilizza per la prima volta digitalWrite(ssPin, HIGH), si attiva il pullup interno (come modalità standard dopo il reset / ciclo di alimentazione è INPUT) e si imposta il bit PORT corrispondente su 1. Pertanto, quando si cambia la modalità pin, il pin è immediatamente HIGH, senza mai andare a BASSO nel mezzo.
Internamente l'Arduino utilizza 3 SFR (Special Function Registers), che sono direttamente collegati all'hardware IO dei pin. Il DDRregistro di ciascuna porta controlla la "modalità pin", ovvero la direzione del pin (input o output). Il PORTregistro controlla il valore di uscita (HIGH o LOW; o attiva o disattiva la resistenza di pullup in modalità di ingresso). Il PINregistro riflette lo stato corrente del pin (per leggerlo). In questo caso PORTè importante la doppia funzione del registro, in quanto attiva la resistenza di pullup interna, se impostato in modalità input.
Questa inizializzazione funzionerà anche con la comunicazione spi per microchip PIC32?