miércoles, 26 de junio de 2013

Puertos de entrada/salida

Los puertos de entrada/salida nos permiten introducir (entrada) o extraer (salida) valores digitales en el microcontrolador a través de sus pines. Si se configuran como entrada permiten comprobar el valor de las señales digitales generadas por dispositivos externos como pulsadores o teclados a través de sus terminales. Cuando se configuran como salida permiten generar señales digitales para controlar dispositivos externos como LEDs y relés.

El microcontrolador MSP430G2553 dispone de dos puertos de entrada/salida. Estos puertos constan de 8 pines cada uno. Se utiliza la notación PX.x para denotar el pin x del puerto X. Así P1.2 es el pin 2 del puerto 1.

Los puertos de entrada/salida son periféricos que incorpora el microcontrolador. La CPU ve a los periféricos como un conjunto de registros. Modificando el valor de estos registros podemos configurar el periférico para que realice las funciones deseadas.

  • Registros P1DIR Y P2DIR:  nos permiten determinar la dirección de cada pin de los puertos E/S P1 y P2, es decir, determina si un pin va a actuar como entrada o como salida. Son registros de 8 bits, donde el i-ésimo bit se corresponde con el pin i-ésimo:
    • Si el bit i-ésimo está a 0 ==> el pin i-ésimo actúa como entrada.
    • Si el bit i-ésimo está a 1 ==> el pin i-ésimo actúa como salida.
  • Registros P1IN y P2IN: en caso de que el pin actúe como entrada, estos regisros, nos permiten determinar el valor de ese pin. Estos registros son de lectura, en consecuencia cualquier escritura es ignorada, provocando un aumento del consumo de corriente. Existen limitaciones para la señal de entrada que se introduce en un determinado pin.
    • Si el bit i-ésimo está a 0 ==> la señal conectada al pin i-ésimo se encuentra a nivel bajo.
    • Si el bit i-ésimo está a 1 ==> la señal conectada al pin i-ésimo se encuentra a nivel alto.
  • Registros P1OUT y P2OUT: en caso de que el pin actúe como salida, estos registros nos permiten determinar el valor de de esa salida. Existe una limitación de 48 mA para la cantidad máxima de corriente de salida.
    • Si el bit i-ésimo está a 0, la señal digital del pin i-ésimo toma el valor 0.
    • Si el bit i-ésimo está a 1, la señal digital del pin i-ésimo toma el valor 1.
  • Registros P1REN Y P2REN (Resistor ENable): cada pin de los puertos de E/S dispone de una resistencia que se puede habilitar mediante los bits de los registros P1REN y P2REN. Si el pin está configurado como entrada se pueden configurar resistencias de PULL-DOWN o PULL-UP en ese pin mediante los bits del registro P1OUT y P2OUT. EStas resistencias deben estar habilitadas en los registros P1REN Y P2REN. Si el bit i-ésimo se pone a 0, la resistencia de pull-down se configura en el pin i-ésimo. Si el bit i-ésimo se pone a 1, la resistencia de pull-down se configura en el pin-iésimo. Recordemos que una resistencia de pull-up es una resistencia que se conecta a VCC para poner un nivel alto en la salida cuando el transistor que hay conectado en ese pin no conduce. Nos permiten a su vez poner un nivel bajo a la salida cuando transistor conduce. La resistencia de pull-down realiza una función similar aunque ésta se conecta a tierra.
    • Si el bit i-ésimo se pone a 0, la resistencia se deshabilita.
    • Si el bit i-ésimo se pone a 1, la resistencia de habilita.
  • Oscilaciones: cada pin de los puertos entrada/salida P1 y P2 posee la capacidad de producir oscilaciones cuya frecuencia depende de la capacidad de carga del pin. Esto se hace haciendo uso de los registros P1SEL, P1SEL2, P2SEL Y P2SEL2. Si se selecciona la funcionalidad de oscilación de un pin, se deshabilitan automáticamente el resto de funcionalidades de dicho pin. A su vez no se permite habilitar la funcionalidad de oscilacón en más de un pin del dispositivo simultáneamente.
  • Interrupciones en los puertos de entrada/salida: los pines de los puertos E/S de P1 y P2 pueden genera interrupciones. Estas interrupciones se generan cuando se detecta un cambio en el nivel de la señal digital conectada al pin. Se puede elegir si ese cambio de nivel puede ser en flanco de subida o bajada. Todos los pines de un mismo puertos E/S comparten la misma interrupción, es decir, la interrupción presenta múltiples (en este caso 8, una por pin) fuentes. El flag de interrupción está asociado a múltiples fuentes y en consecuencia debe ser el programador el que lo desactiva (no se desactiva automáticamente al ejecutar la RTI). Las interrupciones generadas en los puertos E/S son enmascarables, es decir se pueden habilitar/deshabilitar de forma global a través del bit general de habilitación GIE o a través de bit de habilitación específicos. Para el caso de los puertos E/S, esos bits son los de los registros P1IE y P2IE.
    • Si ponemos el bit i-ésimo del registro P1IE a nivel bajo se deshabilita la interrupción para el pin i-ésimo de ese registro.
    • Si ponemos el bit i-ésimo del registro P1IE a nivel alto se habilita la interrupción para el pin i-ésimo de ese registro.
    • El funcionamiento es el mismo para el registro P2IE.
  • Flanco de subida/flanco de bajada: la interrupción se genera por un cambio de nivel en un pin de un puerto. Ese cambio de nivel se puede especificar mediante los bits de los registros P1IES y P2IES.
    • Si el bit i-ésimo del registro P1IES se pone a 0, la interrupción que se puede generar en el pin i-ésimo se genera en el flanco de subida.
    • Si el bit i-ésimo del registro P1IES se pone a 1, la interrupción que se puede generar en el pin i-ésimo se genera en el flanco de bajada.
  • Interrupciones pendientes: la CPU tiene constancia de una interrupción generada en un puerto E/S a través de los bits de los registros P1IFG y P2IFG. 
    • Si el bit i-ésimo del registro P1IFG está a nivel bajo, no hay interrupción pendiente asociada al pin i-ésimo del puerto 1.
    • Si el bit i-ésimo del registr P1IFG está a nivel alto, hay interrupción pendiente asociada al pin i-ésimo del puerto 1.
    • Una consideración importante es que si se modifican los registros P1DIR Y P2DIR, P1OUT, P2OUT, P1IES ó P2IES, se pueden activar los correspondientes flag de interrupción en alguno de los registros P1IFG ó P2IFG. Es recomendable inicializar a 0 dichos flags tras modificar alguno de los registros indicados. A su vez cada bit se pone de forma automática a 1 cuando se produce un flanco activo en el terminal de entrada asociado. Eso genera una interrupción pendiente.
  • Funcionalidad de un pin:  se puede seleccionar mediante los bits P1SEL, P2SEL, P1SEL2 Y P2SEL2. 
En resumen:
  • P1DIR y P2DIR: nos permiten determinar si un pin de un puerto va a actuar como entrada (0) o como salida (1).
  • P1IN y P2IN: en caso de que el pin actúe como entrada, el valor que toma la señal de entrada se almacena en este registro.
  • P1OUT y P2OUT: en caso de que el pin actúe como señal de salida, la salida se puede configurar mediante estos registros.
  • P1REN y P2REN: cada pin dispone de una resistencia. Esta resistencia se puede habilitar/deshabilitar con los pines de estos registros. Si se habilita la resistencia, se puede determinar el tipo de resistencia (pull-up(1) o pull-down(0)), mediante los registros P1OUT y P2OUT.
  • P1SEL, P1SEL2, P2SEL, P2SEL2: permiten determinar el modo de funcionamiento de un determinado puerto (que el puerto funcione como E/S, produzca oscilación, etc.).
  • P1IE y P2IE: las interrupciones generadas por los puertos E/S son enmascarables. Se pueden habilitar/deshabilitar mediante los bits de habilitación individual o el bit general de habilitación. En el caso de los puertos E/S, los bits de habilitación individual específicos son los bits de este registro.
  • P1IES y P2IES: nos permite determinar si la interrupción que se genera en un puerto se hace por flanco de subida (0) o bajada (1).
  • P1IFG y P2IFG: cuando se genera una interrupción de E/S se activa un flag asociado a esa interrupción. En el caso de los puertos E/S, ese flag es uno de los bits de estos registros. Si el bit está a 1 indica que existe una interrupción pendiente, si está a 0 no hay interrupción pendiente.
Una consideración importante es el comportamiento que presenta el dispositivo cuando se enciende. Por defecto, las interrupciones que se generan en los puertos se encuentran deshabilitadas (registros P1IE y P2IE 0x0000). 

Los pulsadores (P1 y P2) son entradas del micro. Estos se encuentran conectados a tierra, en consecuencia para generar valores es necesario hacer uso de resistencias de pull-up (conectadas a VCC), de forma que si se pulsa se meta un 0 (flanco de bajada se produce) y si se despulsa se pone un 1 flanco de subida.

4 comentarios:

  1. Excelente aporte es muy difícil encontrar esta información tan clara!!!!!

    ResponderEliminar
  2. http://www.lcc.uma.es/~blas/pfHaskell/gentle/index.html

    ResponderEliminar
  3. https://www.investopedia.com/accounts/signupnewsletter/?id=9889340&pre=simulator&subid=dfp&rec=8%2C21%2C24&precheck=1&source=dfp

    ResponderEliminar
  4. Casino Bonus Codes - December 2021
    No herzamanindir.com/ deposit bonus casino promotions. We recommend poormansguidetocasinogambling 2021 casino https://jancasino.com/review/merit-casino/ bonus codes and promos for gri-go.com new players. We also list ventureberg.com/ new casino bonuses for December 2021.

    ResponderEliminar