16 votos

¿Por qué necesito en primer lugar para establecer un valor y, a continuación, la dirección de la GPIO en un procesador incorporado?

Tengo un trabajo a tiempo completo como un ingeniero de firmware. He recientemente se ha dado una tarea de revisar GPIO configuraciones y cambiar la configuración según sea necesario. He encontrado un par de pines que fueron incorrectamente configurados de modo que, naturalmente, yo reconfigurado ellos, sin embargo me dijeron que yo lo hice en el orden equivocado. Aquí está lo que estoy hablando:

Antes:
GPIO1.dirección = ENTRADA;

Después de:
GPIO1.dirección = SALIDA;
GPIO1.valor = 0;

Sin embargo, durante la revisión de código que me han dicho que tengo que cambiar el orden de inicialización a la siguiente:

GPIO1.valor = 0;
GPIO1.dirección = SALIDA;

En otras palabras, establecer el valor primero y, a continuación, establecer la dirección de los pines. También me han dicho que esta es la forma en que debe ser en los procesadores modernos, ya que utilizan dos registros, uno para entrada y otro para salida, sin embargo edad de los procesadores utilizan sólo un registro, de modo que el orden de las operaciones no importaría.
(Nota: Modern = ARM Cortex M3 y, encima, Edad = Intel 8051)

Pedí una explicación mejor en el trabajo, pero no pude conseguir una buena respuesta. Es por eso que decidí preguntar aquí.

Así que aquí están mis preguntas:

  1. ¿Por qué el orden de inicialización de la materia en los nuevos procesadores?
  2. ¿Por qué el orden de inicialización no importa en la edad de los procesadores?
  3. ¿Qué dos registros están hablando en los procesadores modernos?
  4. Lo único registro, están hablando de los viejos procesadores?

Si alguien pudiera proporcionar algún tipo de diagrama, que sería aún mejor.

22voto

Spehro Pefhany Puntos 90994

El original 8051 se utiliza el llamado pseudo-bidireccional puertos de salida (drenaje abierto con pullups), así que realmente no había puerto de la dirección.

Por supuesto, para los modernos bidireccional verdadera puertos de salida, es mejor tener un valor conocido conjunto antes de habilitar el puerto para los pines de salida, porque de lo contrario podría tener un transitorio en la producción que se podía hacer algo indeseable.

Ver mi respuesta aquí, por ejemplo.

Edit: Aquí está el pin de e/S estructura de un (relativamente) moderno CMOS microcontrolador:

enter image description here

TRIS (Metropolitana) es llamado DDR (Datos de la Dirección de Registro) en muchos otros micros. En este caso, si el TRIS latch de salida es alta, entonces ambos transistores están 'fuera', pero el puerto todavía se pueden leer.

Aquí es un poco más compleja pin de e/S estructura para un nuevo Microchip micro.

enter image description here

De nuevo, el TRIS pestillo desactiva la salida. Este incluye un LAT pestillo que ayuda a evitar leer-modificar-escribir temas. En la foto de la serie que usted debe escribir a la LAT registrar sólo (y leer el registro del PUERTO).

Aquí está el original 8051 y CMOS 8051 clásico puerto I/O pin circuitos internos (a partir de esta fuente):

enter image description here

Hay un poco más de complejidad en la que hay una velocidad de transistores en paralelo con el pull-up que brevemente se convirtió en superar externo de la capacitancia. Como se puede ver, no hay ningún TRIS/DDR todo el control. El pull-up Mosfet utilizado en condiciones normales de operación son 'débil'- que son lo suficientemente pequeñas (bajo Idss) que una salida externa conectada a la clavija se puede tirar de la pseudo-puerto bidireccional de la línea de bajo.

16voto

jackrabbit Puntos 2990

Si se establece la dirección en primer lugar, el pin aparecerá brevemente configurado para la salida de cualquiera que sea su actual valor de salida es. Si establece el valor en primer lugar, que esto no sucederá.

Así que, haciendo de la forma en que ha sido recomendado evita fallos en la salida, que podría ir desde inofensivo catastróficos, dependiendo de lo que el pin está conectado.

4voto

Dan Auclair Puntos 3063

Suponiendo que la dirección por defecto es una entrada (es decir, Alto-Z, lo cual tiene sentido ya que no queremos que el MCU a fuerza de valor en las líneas conectadas), este fin de configurar el puerto es preferible pero no necesario. De hecho, es necesario cuando la aplicación requiere que en el inicio, el valor de el puerto no ser, es decir 1. A continuación, se establecerá el valor de 0 y, a continuación, cambiar la dirección. En este caso evitar la posible momentánea de "interferencia" entre el ajuste de la dirección y el valor, lo que podría resultar en un aumento en el pin. Y es cierto para todos los procesadores de tener una lógica, no sólo los nuevos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X