Це може мати щось спільне з внутрішнім підтягуючим резистором. Відповідно до таблиці даних SAM3X / A,
Управління підтягуючим резистором можливе незалежно від конфігурації лінії вводу / виводу.
Після скидання всі підключення активовано.
Якщо ви перекопаєте всі знайдені файли:
../Arduino/hardware/arduino/samd/cores/arduino/wiring_digtal.c
Рядок 124 визначає pinMode(uint32_t ulPin, uint32_t ulMode)
функцію. Розглядаючи оператор перемикача / випадку для INPUT проти INPUT_PULLUP проти OUTPUT, ви бачите наступне:
- INPUT встановлює регістр на
reg = PORT_PINCFG_INEN
.
- INPUT_PULLUP встановлює реєстр
reg = (PORT_PINCFG_INEN | PORT_PINCFG_PULLEN)
- OUTPUT встановлює регістр на
reg &= ~PORT_PINCFG_INEN
.
'Реєстр' у кожному випадку однаковий. Я не можу за все життя знайти, яке значення PORT_PINCFG_INEN або PORT_PINCFG_PULLEN визначено як, але вони, без сумніву, лише 8-бітні маски (вони передаються uint8_t, коли їх призначають до "регістру"). Таким чином, ми можемо припустити, що незалежно від того, який біт керує входом / виходом, активований при затвердженні, як і біт підключення. Наприклад:
PORT_PINCFG_INEN = b'00000001';
PORT_PINCFG_PULLEN = b'00000010';
~PORT_PINCFG_INEN = b'11111110';
Якщо підключення підключено після скидання, ми можемо сказати, що під час скидання:
reg = b'xxxxxx1x';
З пункту 3 вище випливає, що інструкція:
reg = b'xxxxxx1x' & 'b11111110';
so
reg = b'xxxxxx10'; // pull-up is enabled!
Тому, якщо ви зателефонуєте pinMode (X, OUTPUT) раніше всього іншого, у вас виявиться включений підтягуючий резистор. Встановлення штифта на вхід очистить біт включення підключення, після чого ви можете встановити штифт на вихід, і біт залишиться чітким.
Тим НЕ менше, вся arguement падає з простим фактом , що , якщо ви не викликаєте pinMode () взагалі , проблема не виникає ...
SPI.setDataMode(10, SPI_MODE1);
? Також корисний лише другий, якbegin()
називає setDataMode. Дивлячись на вихідний код, схоже, бібліотека SPI не змінює вказаний вами контакт (хоча я не знаю ARM).