AMIS30543 - Код библиотеки | Порядок pinDirection и pinOut

Этот фрагмент кода был взят из библиотеки AMIS30543-Arduino,

void init(uint8_t slaveSelectPin) {
    ssPin = slaveSelectPin;
    digitalWrite(ssPin, HIGH);
    pinMode(ssPin, OUTPUT);
}

Факты, которые мне известны

  • digitalWrite — переводит вывод на соответствующий уровень напряжения.
  • pinMode — делает пин либо входным, либо выходным
  • ssPin обычно является активным низким контактом.

Поэтому перед установкой pinDirection мне было интересно, почему пин сделан ВЫСОКИМ, а сразу после этого pinDirection был объявлен как OUTPUT

Также я знаю, что если контакт был сделан ВЫСОКИМ и на следующей линии, если направление того же самого установлено как ВХОД, приведет в действие внутренний подтягивающий резистор.

Итак, что мне здесь не хватает. Более того, в Arduino имеет ли значение порядок pinMode/digitalWrite? если Итак, в чем смысл этих конкретных строк кода ссылка Github на библиотеку

, 👍3


2 ответа


Лучший ответ:

0

Библиотека делает это для того, чтобы во время инициализации на выводе никогда не было низкого уровня.

Представьте, что вы делаете это наоборот:

pinMode(ssPin, OUTPUT);
digitalWrite(ssPin, HIGH);

Если соответствующий бит PORT ранее был установлен в ноль (НИЗКИЙ) (что также является стандартом после сброса/выключения питания), на выводе будет установлен НИЗКИЙ уровень на очень короткое время, пока digitalWrite() снова устанавливает ВЫСОКИЙ уровень. Это время LOW короткое, но оно может без необходимости активировать ведомое устройство. Если вы сначала используете digitalWrite(ssPin, HIGH), вы активируете внутреннюю подтяжку (поскольку стандартным режимом после сброса/выключения питания является INPUT) и устанавливаете соответствующий бит PORT в 1. Таким образом, когда вы теперь меняете в режиме pin, вывод сразу становится ВЫСОКИМ, без перехода в НИЗКИЙ между ними.

Внутри Arduino использует 3 SFR (регистры специальных функций), которые напрямую связаны с аппаратным обеспечением ввода-вывода контактов. Регистр DDR каждого порта управляет «режимом контактов». ака направление вывода (вход или выход). Регистр PORT управляет выходным значением (HIGH или LOW; или включает или выключает подтягивающий резистор в режиме ввода). Регистр PIN отражает текущее состояние вывода (для его чтения). В этом случае важна двойная функция регистра PORT, так как он активирует внутренний подтягивающий резистор, если установлен в режиме ввода.

,

1

Эта инициализация будет работать и с связью spi для микрочипа PIC32?

,