Potrebbe avere qualcosa a che fare con il resistore pull up interno. Secondo la scheda tecnica SAM3X / A,
Il controllo della resistenza di pull-up è possibile indipendentemente dalla configurazione della linea I / O.
Dopo il ripristino, tutti i pull-up sono abilitati.
Se cerchi tutti i file inclusi che trovi:
../Arduino/hardware/arduino/samd/cores/arduino/wiring_digtal.c
La riga 124 definisce la pinMode(uint32_t ulPin, uint32_t ulMode)
funzione. Esaminando l'istruzione switch / case per INPUT vs INPUT_PULLUP vs OUTPUT viene visualizzato quanto segue:
- INPUT imposta un registro su
reg = PORT_PINCFG_INEN
.
- INPUT_PULLUP imposta un registro su
reg = (PORT_PINCFG_INEN | PORT_PINCFG_PULLEN)
- OUTPUT imposta un registro su
reg &= ~PORT_PINCFG_INEN
.
Il 'registro' in ogni caso è lo stesso. Per la vita non riesco a trovare quale valore PORT_PINCFG_INEN o PORT_PINCFG_PULLEN sono definiti come, ma sono senza dubbio solo maschere a 8 bit (vengono lanciate su uint8_t quando sono assegnate al 'registro'). Quindi, possiamo supporre che qualunque bit controlli input / output sia attivo quando asserito, così come il bit di pullup. Per esempio:
PORT_PINCFG_INEN = b'00000001';
PORT_PINCFG_PULLEN = b'00000010';
~PORT_PINCFG_INEN = b'11111110';
Se i pull-up sono abilitati dopo il reset, possiamo dire che al reset:
reg = b'xxxxxx1x';
Il punto (3) sopra implica fortemente che l'istruzione è:
reg = b'xxxxxx1x' & 'b11111110';
so
reg = b'xxxxxx10'; // pull-up is enabled!
Pertanto, se si chiama pinMode (X, OUTPUT) prima di ogni altra cosa, si otterrà la resistenza pullup abilitata. L'impostazione del pin su un ingresso cancella il bit di abilitazione pullup, dopodiché è possibile impostare il pin su un'uscita e il bit rimarrà chiaro.
Tuttavia, l'intero arguement cade verso il basso con il semplice fatto che se non si chiama pinMode () a tutti , il problema non si verifica ...
SPI.setDataMode(10, SPI_MODE1);
? Anche solo il secondo è utile, comebegin()
chiama setDataMode. Guardando il codice sorgente sembra che la libreria SPI non modifichi il pin specificato (anche se non conosco ARM).