Puertos GPIO del microcontrolador denominados puertos paralelos [cerrados]

1

Un compañero mío, con bastante frecuencia, se refiere a los puertos GPIO de, por ejemplo, un 8051, AVR, o cualquier microcontrolador como "puertos paralelos". ¿Es esta una nomenclatura común en la industria? Lo encuentro un poco confuso, siempre me referí a él como el puerto GPIO.

    
pregunta zacharoni16

3 respuestas

10

Los microcontroladores suelen tener varios grupos de pines GPIO, etiquetados PORTA, PORTB, PORTC, etc. o algo similar (tal vez P0, P1, etc.).

Cada uno de estos puertos se conoce como un puerto de E / S paralelo en las hojas de datos de los fabricantes, porque todos los pines del puerto pueden actuar en paralelo mediante una instrucción de la máquina . El ancho del puerto dictado por el ancho de la ruta de datos del microcontrolador (8, 16 o 32 bits).

(takenfromthedatasheetforthePIC32MX795F512L)

Porlotanto,lospinesenelprimerpuertodeunµCde8bitspuedendenominarseRA0aRA7,yenunµCde32bits,sedenominaránpinesRA0aRA31(donde,enesteejemplo,ResparaRegistro,lasiguienteletraeselnombredelpuerto,seguidodelnúmerodebit(otrosmicrocontroladorespuedentenerdiferentesconvencionesdenomenclatura,comoP0.0aP0.7,etc.).

Normalmente,cadapuertotendráalmenostresregistrosasociados(avecesmás);unoparaconfigurarladireccióndelospinesaentradaosalida,otroparaleerelestadodeentradaactualdelospinesdigitalesyotroparaconfigurarelestadodesalidadelospines.Puedehaberotroparaespecificarsicadapinesdedrenajeabiertoosalidapush-pull.

Prácticamentetodoslosmicrocontroladorespodránleeroescribirencadaunodeestosregistrosalavez;puedenonotenerlacapacidaddeleerbitsindividuales,odeescribirbitsindividualesdeunregistrosinafectaralosdemásenelpuerto,dependiendodelasinstruccionesdelprocesador.

Inclusosiunprocesadornotieneunainstrucciónparaleeroescribirunbitindividual,lasbibliotecasdeE/Spuedenocultarloalusuario;porejemplo,labibliotecadeE/SdigitaldeArduinotieneunafunciónllamadadigitalWrite(pin,valor)queseimplementaenunavariedaddemicrocontroladoresdiferentes,notodosloscualespuedentenerunainstrucciónparaescribirenunsolobit.Encuyocaso,senecesitaríaunalectura-modificación-escrituradelregistrodesalida,omantenerunregistrosombraenlamemoriapararecordarelúltimoestadodelpuertodesalida,porloquecuandoseactualicesolounopoco,podríaenmascararenelnuevoestadosinafectaralosotrospines.Delmismomodo,Arduinostienefuncionesparaleerunpindigitalyestablecerunpinparaelmododeentradaosalida.

LabibliotecadeE/SdeArduinosolopermitequelospinesdigitalesseescribandeformaindividual,yaquelospuertosutilizadosvariarándeunaplacaaotraylospinesnosepuedenasignardeformaconsecutiva.Entonces,encambio,lasfuncionessolousanunnúmerodepindigitalabstracto(0-13).AsíqueparaunArduino,elconceptodeun"puerto paralelo" no existe realmente, que es de donde viene la confusión. Pero bajo su capa de abstracción, todavía están allí en el microcontrolador incorporado.

Los pines del puerto real en el procesador pueden ser bastante diferentes de un procesador a otro, por ejemplo, aquí están las asignaciones para el Arduino Uno (8 bits ATmega 328P) y Arduino DUE (ARM SAM3X8E de 32 bits):

Pin #    Uno    DUE

0        PD0    A.8
1        PD1    A.9
2        PD2    B.25
3        PD3    C.28
4        PD4    C.26/A.29
5        PD5    C.25
6        PD6    C.24
7        PD7    C.23
8        PB0    C.22
9        PB1    C.21
10       PB2    C.29/A.28
11       PB3    D.7
12       PB4    D.8
13       PB5    B.27

Entonces, mientras que las asignaciones para el Uno son sencillas (utilizando primero todo el Puerto D, luego seis bits del Puerto B), las asignaciones de puertos para el DUE están por todas partes. Dos de los pines digitales (4 y 10) están conectados incluso a más de un pin de puerto del ARM.

Finalmente, puede haber otro conjunto de registros en un microcontrolador que permita que algunos de los pines del puerto se usen como entradas analógicas. Todos los pines así designados siempre serán tratados individualmente; no puedes leer un grupo de pines analógicos en paralelo. Y para casi todos los microcontroladores, los periféricos como UARTs, I²C, SPI, etc., suelen compartir pines con los puertos paralelos; cuando estos periféricos están habilitados, los pernos son tomados por el periférico y ya no están disponibles en los registros de puertos paralelos.

    
respondido por el tcrosley
6

Este tipo de cosas variará de una persona a otra, según la experiencia, la literatura que hayan leído y con quién han trabajado. Debido a que todos los bits de un puerto se pueden leer o escribir con una sola instrucción de máquina, es esencialmente un puerto paralelo. Y podría contrastarse con un puerto serie, ya que muchos microcontroladores tienen los integrados, y habrá un pin de E / S asociado que funciona independientemente de los otros.

    
respondido por el gbarry
1

Un GPIO pin es un propósito general de entrada / salida pin . Esto significa que se puede programar para que sea una entrada o una salida y, en este último caso, incluso se puede programar más:

  • Desagüe abierto
  • 3 estados
  • fuerza de manejo
  • niveles de salida

Debido a esto, no es raro que dos pines consecutivos en un grupo de (generalmente 8) pines estén programados de una manera diferente. En este caso, puede que incluso no tenga mucho sentido referirse a todo el grupo como puerto .

El término puerto paralelo se originó en el puerto al que estaban conectadas las impresoras. En el contexto de los microcontroladores, puede tener sentido referirse a un grupo de pines como puerto paralelo si se leen o escriben en paralelo, pero no en general. Por ejemplo, ciertos pines GPIO de un puerto de 8 bits pueden representar un puerto serie. Por lo tanto, no tendría mucho sentido hablar de los pines serie en el puerto paralelo x.

    
respondido por el Petrus

Lea otras preguntas en las etiquetas