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.