Cambiando la dirección del pin sin interrumpir el LPC800

1

Estoy viendo un microcontrolador LPC812 Cortex M0 + y sus funciones GPIO. En un microcontrolador PIC, uno siempre configuraría el LATch antes de cambiar la dirección de un pin determinado. Esto evita la situación posiblemente desagradable donde un pin "gitches". es decir: el estado de salida del pin es un 1 justo antes de cambiar la dirección y establecerlo en 0. Esto hace que la salida de un pin cambie de 1 a 0 durante un microsegundo de duración. (relacionado: ¿Por qué configurar PORTx antes de TRISx? )

Sin embargo, no es obvio en el manual del usuario (UM10601) si escribir un valor en un pin que actualmente es una entrada tiene algún efecto lógico (no tendrá un efecto físico en el estado del pin como una entrada). Por lo tanto, si escribo un cero en PIN0 (página 92/93), en teoría debería borrar todos los bits de salida. Si estaban enganchados, lo que no es seguro.

La Sección 7.7.2 dice que "Si alguna o ambas de estas condiciones (es decir, si se establece en gpio y se configura en salida) no se cumplen, la escritura en el pin no tiene efecto". Lo cual no es útil porque sé que no hay ningún efecto físico.

Bajo la descripción de IOCON (6.3, página 68) está el siguiente comentario:

  

Si los pines de drenaje abierto PIO0_10 y PIO0_11 no están disponibles en el paquete, evite que los pines floten internamente de la siguiente manera: Establezca los bits 10 y 11 en el registro GPIO DIR0 en 1 para habilitar el controlador de salida y escribir 1 en bits 10 y 11 en el registro GPIO CLR0 para controlar las salidas LOW internamente.

En mi opinión, esta es una secuencia incorrecta (a menos que las salidas del puerto GPIO sean bajas por defecto, algo que no esté documentado). En un PIC16 establecería primero el estado HI / LO, luego cambiaría la dirección.

Admito que si hubiera llegado la parte, solo probaría esto en el banco. Sin embargo, pondré esto en el intercambio de pila, ya que veo ejemplos en todas partes que establecen la dirección y luego el valor, todos los cuales pueden tener fallas en los pines de salida.

    
pregunta carveone

2 respuestas

2

Estás sobre-analizando esto. Hay dos registros involucrados en un pin GPIO, el registro de datos de salida y el registro de dirección. Ambos se pueden escribir en cualquier momento (y estoy de acuerdo con que la cotización de la Sección 7.7.2 no lo hace tan claro).

El comentario en p68 no se preocupa por una transición, se preocupa por un estado final estable con potencia optimizada. Cambiar el orden no hace ninguna diferencia real, pero es más limpio como lo describe.

No hay changing from 1 to 0 over a sub-microsecond duration . Cuando habilitas la salida, toma el valor controlado de la misma manera que si lo manejaras de 1 a 0 utilizando el valor de datos.

Es solo cuando el valor de restablecimiento de los datos es 0, se retira el estado triple y, después de habilitar la salida, se escribe 1 en el pin de datos para ver un pulso.

Todos los periféricos son diferentes, pero para ejemplo

  

Una lectura de GPIODATA devuelve el último valor de bit escrito si el   Los respectivos pines se configuran como salida, o devuelve el valor en   el bit GPIN de entrada correspondiente cuando se configuran como entradas.   Todos los bits se borran mediante un reinicio.

Específicamente, última escritura y no la última escritura, mientras que la dirección del pin se estableció como salida .

    
respondido por el Sean Houlihane
1
  

Sin embargo, no es obvio en el manual del usuario (UM10601) si la escritura de un valor en un pin que actualmente es una entrada tiene algún efecto.

No tiene. Vea output enable en el esquema a continuación.

  

En mi opinión, esta es una secuencia incorrecta (a menos que las salidas del puerto GPIO sean bajas por defecto, otra cosa que no esté documentada).

Quieren que habilites el desplegable fuerte. El orden no importa, ya que de todas formas ya estaba flotando. (ver el valor de restablecimiento de los registros IOCON / GPIO)

    
respondido por el Jeroen3

Lea otras preguntas en las etiquetas