AMIS30543 - Código da biblioteca | Ordem de pinDirection e pinOut
Este trecho de código foi retirado da biblioteca AMIS30543- Arduino,
void init(uint8_t slaveSelectPin) {
ssPin = slaveSelectPin;
digitalWrite(ssPin, HIGH);
pinMode(ssPin, OUTPUT);
}
Fatos que eu sei
- digitalWrite - faz o pino com o nível de tensão correspondente
- pinMode - torna o pino de entrada ou saída
- ssPin é normalmente o pino baixo ativo.
Então, eu estava me perguntando antes de definir o pinDirection porque o pino é HIGH, então imediatamente depois disso o pinDirection foi declarado como OUTPUT
Também sei, se um pino foi colocado em HIGH e na próxima linha se a direção do mesmo estiver configurada como INPUT fará com que o resistor pull up interno em ação.
Então, o que estou perdendo aqui. Mais no Arduino, a ordem de pinMode / digitalWrite importa.? if Então, qual é o significado dessas linhas específicas de código do link do Github para a biblioteca
Respostas
A biblioteca está fazendo isso para ter certeza de que o pino nunca ficará baixo durante a inicialização.
Imagine fazer ao contrário:
pinMode(ssPin, OUTPUT);
digitalWrite(ssPin, HIGH);
Se o bit PORT correspondente for definido como zero (LOW) anteriormente (que também é o padrão após reinicialização / ciclo de alimentação), o pino ficará LOW por um tempo muito curto, até que seja digitalWrite()definido como HIGH novamente. Esse tempo BAIXO é curto, mas pode ativar o escravo desnecessariamente. Se você usar pela primeira vez digitalWrite(ssPin, HIGH), você ativa o pullup interno (como modo padrão após a reinicialização / ciclo de energia é INPUT) e define o bit PORT correspondente para 1. Assim, quando agora você altera o modo de pino, o pino é HIGH imediatamente, sem nunca ir para BAIXO no meio.
Internamente, o Arduino usa 3 SFRs (Special Function Registers), que são conectados diretamente ao hardware IO dos pinos. O DDRregistro de cada porta controla o "modo de pino", também conhecido como direção do pino (entrada ou saída). O PORTregistro controla o valor de saída (HIGH ou LOW; ou liga ou desliga o resistor pullup no modo de entrada). O PINregistro reflete o estado atual do pino (para lê-lo). Neste caso, a função dupla do PORTregistrador é importante, pois ativa o resistor pullup interno, quando configurado no modo de entrada.
Essa inicialização funcionará com comunicação spi para microchip PIC32 também?