내부 풀업 저항과 관련이있을 수 있습니다. SAM3X / A 데이터 시트에 따르면
풀업 저항의 제어는 I / O 라인의 구성에 관계없이 가능합니다.
재설정 후 모든 풀업이 활성화됩니다.
찾은 모든 포함 파일을 파헤치는 경우 :
../Arduino/hardware/arduino/samd/cores/arduino/wiring_digtal.c
124 행은 pinMode(uint32_t ulPin, uint32_t ulMode)
기능을 정의합니다 . INPUT vs INPUT_PULLUP vs OUTPUT에 대한 switch / case 문을 검토하면 다음과 같습니다.
- 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 비트 마스크 ( 'register'에 할당 될 때 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)를 호출 하면 풀업 저항이 활성화됩니다. 핀을 입력으로 설정하면 풀업 활성화 비트가 지워지고, 그 후에 핀을 출력으로 설정할 수 있으며 비트는 계속 유지됩니다.
그러나 pinMode () 를 전혀 호출 하지 않으면 문제가 발생하지 않는다는 단순한 사실로 전체 논쟁이 무너집니다 .
SPI.setDataMode(10, SPI_MODE1);
않습니까? 또한begin()
setDataMode 를 호출 할 때 두 번째 것만 유용합니다 . 상기 찾고 소스 코드 (I는 ARM 몰라하지만) 당신이 지정된 핀을 변경하지 않는 SPI 라이브러리처럼 보인다.