Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CAPITULO 2 – PARTE I
PUERTOS Y MÓDULOS DE ENTRADA/SALIDA
El computador interactúa con el mundo exterior a través de los periféricos, y el nexo de
comunicación entre los periféricos y el CPU son las interfaces de entrada/salida (abreviado:
interfaz de E/S), y habrán tantas interfaces como periféricos diferentes hayan conectados al
computador. En un microcontrolador, cuando la interfaz es compleja, es decir, involucra un
circuito secuencial como parte de su control, se le suele denominar “módulo de Entrada/Salida”
o abreviadamente “módulo de E/S” (I/O module). Cuando la interfaz tiene por finalidad la
comunicación con un equipo remoto, se le suele denominar línea de comunicación.
Por ejemplo, el microcontrolador TM4C123GH6PM cuentan con los siguientes módulos de E/S:
Contadores/temporizadores (timer/counter)
Conversor análogo-digital de 10 bits
Reloj perro guardián (watchdog timer)
Módulo de comunicación serial asíncrona (UART)
Módulo de comunicación síncrona SSI (serial synchronous interface)
Módulo de comunicación I2C (Two wire interface)
Tiene más de un módulo de E/S de cada tipo
Los microcontroladores por lo general tienen más módulos de E/S y puertos que pines para la
conexión de los mismos a los periféricos. Por ejemplo, en el microcontrolador TM4C123GH6PM
el pin PD2 puede utilizarse como una interfaz digital de propósito general (GPIO), como una
entrada analógica o para recepción de datos del SSI1 o el SSI2, pero no puede emplearse para
más de una de esas opciones a la vez. Si por ejemplo se emplea como línea de recepción del SSI1
ya no puede emplearse como pin GPIO, ni como entrada analógica.
CAPITULO2Parte1rev12.docx 1 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
un grupo de registros que permite configurar los pines del puerto como entrada o salida, escribir
valores (0 o 1) en los pines configurados como salida, y leer los valores presentes en los pines del
puerto (0 o 1) sea que estén configurados como entrada o como salida.
Así como las memorias están conformadas por registros, cada uno identificado por un número
que es su dirección, de la misma manera cada registro de E/S tiene una dirección que lo
identifica. El uso de la interfaz o módulo de E/S, por tanto, consiste en la escritura y lectura de
estos registros de E/S.
Dependiendo de la arquitectura del CPU y del diseño del computador, hay dos maneras como el
CPU accede a los registros de E/S. Estas dos maneras se denominan:
Entrada/salida aislada
Entrada/salida mapeada en memoria
Estas dos maneras no son excluyentes. En el caso del ATmega88, por ejemplo, se emplean
ambas. En el caso de los núcleos Cortex-M3 y Cortex-M4, sólo emplean el segundo.
Entrada/salida aislada
El CPU cuenta con un espacio de direcciones de registros de E/S que es independiente del
espacio de memoria. Para acceder a los registros de E/S, el CPU cuenta con instrucciones
especiales para la escritura o lectura de estos registros. Normalmente el espacio de registros de
E/S es más pequeño que el de registros de memoria, y al igual que para la memoria, comienzan a
partir de la dirección 0.
CAPITULO2Parte1rev12.docx 2 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Ejemplo 1: El microcontrolador ATmega88A tiene un espacio de datos con direcciones que van
de $000 a $4FF de las cuales el rango de $020 a $0FF es para los registros de E/S (224
direcciones). Se dice que “los registros de E/S están mapeados en memoria de $020 a $0FF”.
La memoria SRAM de 1KB ocupa las direcciones $0100 a $4FF, y los registros del CPU R0 a
R31 están mapeados en las direcciones $000 a $01F.
Un mapa de memoria es un diagrama o tabla que muestra el rango de direcciones ocupado por
todas las memorias e interfaces de E/S que tiene un microcontrolador, y en el caso más general un
computador. En el caso de los microcontroladores, si los registros del CPU también tienen
asignados direcciones de memoria, también se indican en este diagrama (por ejemplo, el
ATmega88).
Para la arquitectura del núcleo Cortex-M4, la compañía ARM Limited ha definido un mapa de
memoria fijo, la cual debe seguir cualquier fabricante de microcontroladores que emplee este
núcleo y que se muestra en la siguiente figura. Este mapa de memoria junto con las reglas que
ha definido ARM Limited, se denomina modelo de memoria (memory model) del núcleo
Cortex-M4.
CAPITULO2Parte1rev12.docx 3 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Fig. 1 Mapa de memoria general del núcleo Cortex-M4. Cualquier microcontrolador con este núcleo tendrá
este mapa de memoria. Esta figura es también válida para el núcleo Cortex-M3.
Puede observarse en la figura que la región establecida para la memoria SRAM es de 0.5GB
(512MB) y para la memoria de programa también. Además, la región para la memoria SRAM
necesariamente debe comenzar en la dirección 0x2000.0000 y la memoria de programa en la
dirección 0x0000.0000.
De esto podemos deducir que nunca encontraremos un microcontrolador con núcleo Cortex-M4 o
Cortex-M3 que tenga más de 512MB de memoria RAM.
Observar también que está definida una región para los registros de E/S (bloque Peripheral en la
figura), así que no habrá un microcontrolador con núcleo Cortex-M4 cuyos registros de E/S
comiencen por ejemplo en la dirección 0x3000.0000.
CAPITULO2Parte1rev12.docx 4 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Fig. 2 Mapa de memoria del TM4C123GH6PM. Las regiones para registros de E/S son de 4KB y comienzan
en múltiplos de 0x1000.
Para cada módulo de E/S hay una región de 4KB. La dirección menor de cada región se llama
dirección base (base address). Por ejemplo, la dirección base del puerto D es 0x4000.7000.
CAPITULO2Parte1rev12.docx 5 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Fig. 3 Los puertos del microcontrolador TM4C123GH6PM. En rectángulos del mismo color y formato están
los pines que pertenecen al mismo puerto.
Observar que cada pin del puerto tiene un nombre y un dígito del 0 al 7 que lo identifica. Por
ejemplo, el pin N°18 es el pin PA1 del puerto A. En algunos pines al lado de cada nombre hay
una diagonal y otro nombre. Este nombre hace referencia a la función alternativa que puede tener
el pin cuando no se emplea como GPIO. Para el pin N°18, la función alternativa es como señal
U0Tx, línea de transmisión del módulo de E/S UART0. Algunos pines del microcontrolador
tienen hasta nueve funciones alternativas. La figura sólo muestra algunas de ellas, y sólo de
algunos pines.
Puede observarse además, que los pines de un mismo puerto no son todos adyacentes entre sí. La
razón para denominar a los pines 1, 4, 45, 46, 47, 48, 57 y 58 como puerto B no tiene que ver con
CAPITULO2Parte1rev12.docx 6 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
su disposición en el circuito integrado, sino con la manera como se relacionan con los registros de
E/S, como veremos a continuación.
La manera en que se emplean los registros en cada puerto es similar, razón por la cual se
explicará en detalle para el puerto B.
El puerto B
El puerto B consta de 8 pines que son: PB0, PB1, PB2, PB3, PB4, PB5, PB6 y PB7.
Cuenta con los siguientes registros de E/S:
GPIO_PORTB_DIR_R para configurar los pines como entrada o salida.
GPIO_PORTB_DATA_R para escribir un valor en los pines configurados como salida, o
para leer el valor presente en los pines del puerto.
GPIO_PORTB_DEN_R para habilitar los pines para señales digitales.
GPIO_PORTB_PUR_R para activar las resistencias de pull-up.
GPIO_PORTB_PDR_R para desactivar las resistencias de pull-up.
Además, hay un registro que no pertenece a ninguno de los módulos GPIO, y que permite activar
la señal de reloj que llega a dichos módulos y es el siguiente:
SYSCTL_RCGCGPIO_R
Con excepción de SYSCTL_RCGCGPIO_R, todos los registros mencionados están en la región
de memoria que corresponde al puerto B. Estos registros de E/S tienen direcciones en el espacio
de datos, como se indica en la siguiente tabla.
CAPITULO2Parte1rev12.docx 7 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
La dirección base para los registros de E/S del puerto B es 0x4000.5000. En los manuales no se
especifica la dirección completa de cada registro, sino a cuántas direcciones por encima de la
dirección base está. Este número se llama desplazamiento (offset), y es el valor que aparece en los
manuales. Para determinar la dirección de un registro empleamos la siguiente ecuación:
Dirección registro E/S = Dirección base + offset
A cada pin del puerto B le corresponde un bit de cada registro de E/S. El bit que le corresponde
es el número que aparece en el nombre del pin. Por ejemplo, al pin PB5 le corresponden los bits
5 de los registros GPIODIR, GPIODEN, GPIOPDR, GPIOPUR y GPIODATA. En cambio al pin
PB0 le corresponden los bits 0 de estos registros.
Los bits 8 al 31 son reservados, y no debemos modificarlos.
Usaremos la siguiente notación para explicar el manejo del puerto.
CAPITULO2Parte1rev12.docx 8 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Cada pin del puerto B puede configurarse como entrada o salida independientemente de los
demás. Escribiendo un 1 en el bit DIRn se configura el pin PBn como salida, escribiendo un 0 se
configura como entrada.
Ejemplo: Para configurar los pines PB0, PB3, PB5 como salidas y los pines PB1,
PB2, PB4, PB6 y PB7 como entradas, tendría que escribirse el siguiente valor en
registro GPIO_PORTB_DIR_R:
bit 31 8 7 6 5 4 3 2 1 0
GPIODIR reservado 0 0 1 0 1 0 0 1
Como los pines PB7, PB6, PB4, PB2 y PB1 están configurados como entrada, los valores escritos no los
afectarán, pero lo mejor es garantizar que no modificamos esos bits, para lo cual usaremos técnicas de
enmascaramiento que se explican más adelante.
Ejemplo:
En la Fig. 4 se muestra un circuito con un pulsador (P1) y un diodo led (D1). Los condensadores
C1 y C2 se emplean para desacoplar (filtrar) el ruido presente en la fuente de alimentación. El pin
38 es la línea de inicio (RESET). La resistencia R1 limita la corriente que entrega el
microcontrolador por el pin PB1.
CAPITULO2Parte1rev12.docx 9 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
bit 31 8 7 6 5 4 3 2 1 0
GPIOPUR reservado 0 0 0 0 0 0 0 1
bit 31 8 7 6 5 4 3 2 1 0
GPIODATA reservado 0 0 0 0 0 0 1 0
Al estar el bit 0 de GPIODIR en 0, se configura el pin PB0 como entrada. Los demás bits valen 1,
con lo cual los pines PB1 a PB7 están configurados como salida.
El bit 0 de GPIOPUR vale 1con lo cual la resistencia de pull-up del pin PB0 se activa.
El pin PB1 está configurado como salida, y el bit 1 de GPIODATA vale 1, este valor aparecerá en
el pin PB1 (nivel alto) generándose una tensión positiva en la salida cercana a los 3,3V con lo
cual se prenderá el led D1.
Los pines PB2 a PB7 están configurados como salida, y el valor escrito en los bits 2 a 7 de
GPIODATA es 0. Este valor aparecerá en los pines PB2 a PB7 y será una tensión cercana a los
0V.
CAPITULO2Parte1rev12.docx 10 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Una vez escritos los valores indicados en GPIODIR y GPIOPUR, podrá leerse también el estado
de los pines del puerto B. Cada vez que se lea el registro GPIODATA, el estado del pulsador se
encontrará en el bit 0 (pues está conectado al pin PB0). Si dicho bit vale 0, el pulsador está
presionado, y si vale 1 el pulsador no está presionado.
El problema radica en no tener un camino eléctrico que llegue al nodo A cuando el interruptor
está abierto. En la Fig. 6 se muestra una solución al problema.
CAPITULO2Parte1rev12.docx 11 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
3,3V. Cuando el interruptor esté cerrado el nodo A estará a 0V, y habrá una tensión de 3,3V en
R1, circulando una corriente de 0.33mA. En la Fig. 6b puede apreciarse que ahora cuando el
interruptor está cerrado la salida B está en 3,3V (1 lógico) y cuando está abierto la salida está en
0V (0 lógico). En resumen, se ha logrado tener una señal lógica binaria en función al estado del
interruptor (cerrado 1, abierto 0).
La resistencia R1 se llama “resistencia de pull-up” (pull-up resistor) por tener conectado uno de
sus terminales a la tensión positiva de la fuente de alimentación, y el otro terminal a otro nodo (en
nuestro ejemplo el nodo A).
En el ejemplo de la Fig. 4 hay conectado un pulsador (P1), que cuando no está presionado tiene
sus dos terminales abiertos, presentándose la misma situación de la Fig. 5. Por ello, para evitar los
problemas mencionados, se activa la resistencia de pull-up interna del pin PB0.
Para completar el ejemplo del circuito, y lograr que el led D1 se prenda debemos hacer un
programa que haga que el CPU escriba el valor 0b11111110 en GPIODIR, el valor 0b00000001
en GPIOPUR, y el valor 0b00000010 en GPIODATA del puerto B.
El puerto F tiene sólo cinco pines (PF0 ... PF4) por lo tanto sólo se deben emplear los bits 0 a 4
de los registros de E/S de dicho puerto.
CAPITULO2Parte1rev12.docx 12 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
bit 31 16
RCGCGPIO
R
15 6 5 4 3 2 1 0
R5 R4 R3 R2 R1 R0
R R/W R/W R/W R/W R/W R/W
0 0 0 0 0 0
Valor inicial: 0x0000.0000
Dir. Base: 0x400F.E000 Offset 0x608
R0: puerto A
R1: Puerto B
...
R5: Puerto F
Cada bit, del 0 al 5, permite activar la señal de reloj de uno de los puertos GPIO. Un 1 es para
activar el reloj en dicho puerto y 0 para desactivarlo. Observar que el valor inicial de este registro
es cero, es decir, ningún puerto está activado.
Por ejemplo, si queremos emplear el puerto B, debemos poner a 1 el bit 1 (R1) de este registro.
bit 31 16
PRGPIO
R
15 6 5 4 3 2 1 0
R5 R4 R3 R2 R1 R0
R R/W R/W R/W R/W R/W R/W
0 0 0 0 0 0
Valor inicial: 0x0000.0000
Dir. Base: 0x400F.E000 Offset 0xA08
Cada bit, del 0 al 5 es para conocer el estado de la señal de reloj de cada puerto (bit 0 puerto A,
bit 1 puerto B,..., bit 5 puerto F). Un 1 significa que el puerto puede accederse, un 0 que aún no
está listo.
Por ejemplo, si se activó la señal de reloj del puerto B con el registro RCGCGPIO, debemos
esperar a que el bit 1 del registro PRGPIO se ponga a 1 antes de leer o escribir el los registros de
E/S de dicho puerto.
CAPITULO2Parte1rev12.docx 13 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Ejemplos en lenguaje C
Ejemplo 1
Configurar los pines PB3, PB6 y PB7 del puerto B como salidas y los demás pines del puerto B
como entradas.
Solución
Los pines del puerto B se configuran con el registro GPIO_PORTB_DIR_R. Se debe escribir un
1 para configurar un pin como salida y 0 para configurarlo como entrada. Debe entonces
escribirse el número 0b11001000 (binario) o 0xC8 (hexadecimal) en el registro GPIODIR. La
instrucción sería la siguiente:
Solución
Antes de poder configurar el puerto B, debemos activar su señal de reloj. Para ello debemos
poner a 1 el bit 1 del registro RCGC2.
SYSCTL_RCGCGPIO_R = 0x02; // bit 1 en 1
Según lo explicado para dicho circuito se quiere configurar los pines PB1 a PB7 como salida (bits
1 a 7 de GPIODIR deben valer 1), configurar el pin PB0 como entrada (bit 0 de GPIODIR debe
valer 0) y tener su resistencia de pull-up activada (bit 0 de GPIOPUR debe valer 1), y para
prender el led debe escribirse un 1 en bit 1 del registro GPIODATA.
El valor a escribir en GPIODIR debe ser entonces 0b11111110 (0xFE en base 16), el valor a
escribir en GPIOPUR 0b00000001 (0x01 en base 16) y el valor a escribir en GPIODATA
0b00000010.
La porción de programa que logra esto es:
GPIO_PORTB_DIR_R = 0xFE;
GPIO_PORTB_PUR_R = 0x01;
GPIO_PORTB_DATA_R = 0x02;
En el enunciado se puso “porción de programa”, pero ¿no es suficiente con esas instrucciones?
¿Qué le falta al programa y por qué?
En lenguaje C debe haber una función de nombre main que es la que se ejecuta al comenzar a
ejecutarse el programa.
CAPITULO2Parte1rev12.docx 14 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
#include <stdint.h>
void main(void)
{
uint32_t temp;
SYSCTL_RCGCGPIO_R = 0x02; // Activamos reloj en puerto B
while ((SYSCTL_PRGPIO_R & 0x02)== 0); // Hay que esperar a que bit 1
// de PRGPIO esté en 1
// para que esté realmente activado el reloj
GPIO_PORTB_DIR_R = 0xFE; // Pin PB0 entrada y los demás salida
GPIO_PORTB_PUR_R = 0x01; // Activamos resistencia pull-up en PB0
GPIO_PORTB_DATA_R = 0x02; // Prendemos el led (PB1 a 1)
while (1){
}
}
En el programa la sentencia:
while ((SYSCTL_PRGPIO_R & 0x02)== 0);
Hace que el CPU espere a que el bit 1 del registro PRGPIO se ponga a 1, y cuando ello ocurra se ejcutará la siguiente
instrucción del programa.
Para lograr lo anterior, se emplean técnicas de enmascaramiento de bits, que se explican la parte II de este capítulo.
El hecho que el UART1 pueda conectarse al pin PC5, no significa que sea el único módulo de
E/S que podría hacer uso de dicho pin. En la Fig. 8 se muestra qué módulos de E/S podrían hacer
uso del pin PC5. De hecho, para casi todos los pines de E/S puede escogerse entre más de un
módulo de E/S la señal a enviar al pin, o recibir desde el pin (en caso de señales de entrada).
CAPITULO2Parte1rev12.docx 15 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Fig. 7 Multiplexaje de pines del módulo E/S UART1. La señal U1Tx puede conectarse a los pines PC5 o PB1.
La señal U1Rx a los pines PC4 o PB0.
CAPITULO2Parte1rev12.docx 16 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Fig. 8 Multiplexaje del pin PC5. Además de ser pin GPIO (PC5), puede conectarse a otros seis módulos de
E/S. Se muestra el nombre de cada módulo y las señales que podrían llegar al pin. Sólo una de ellas puede
usarse por vez.
En los registros GPIOAMSEL y GPIOAFSEL hay un bit de configuración por pin. En el registro
GPIOPCTL hay 4 bits de configuración por pin, con lo cual, teóricamente podrían haber hasta 16
opciones por pin. En el caso del TM4C123GH6PM, el pin con más opciones es el pin 28 (PF0)
que tiene 8 funciones alternativas, además de poder usarse como pin GPIO PF0.
Registro GPIOAFSEL
Hay un registro por puerto GPIO. El nombre específico de cada registro es GPIO_PORTx_AFSEL_R con
x=A, B, C, D, E o F. De estos registros se emplean los bits 0 a 7 para los puertos de 8 pines (A, B, C, D),
los bits 0 a 3 para el puerto E (es de 4 pines) y los bits 0 a 4 para el puerto F (es de 5 pines).
CAPITULO2Parte1rev12.docx 17 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
bit 31 8 7 6 5 4 3 2 1 0
GPIOAFSEL RESERVADO AFSEL
0x420 R R/W R/W R/W R/W R/W R/W R/W R/W
- - - - - - - -
bit x = 0: Pin x configurado como GPIO y controlado por registros GPIO
bit x = 1: Pin es controlado por algún módulo de E/S (alternate function)
Registro GPIOAMSEL
Este registro, uno por puerto, permite seleccionar, en los puertos que pueden tener funciones
analógicas, si se quiere emplear para una función analógica o digital. Si se conectara una señal
digital a un pin configurado para señales analógicas, puede malograrse el circuito
integrado. Por eso es importante, configurar el pin para señales analógicas sólo si se van a
emplear con este tipo de señal. Cuando se selecciona para funciones digitales, queda protegida la
parte analógica por un circuito de aislamiento interno.
bit 31 8 7 6 5 4 3 2 1 0
GPIOAMSEL RESERVADO GPIOAMSEL
0x528 R R/W R/W R/W R/W R/W R/W R/W R/W
0 0 0 0 0 0 0 0
bit x = 0: Funciones analógicas de Pin x desactivadas. Pin x puede tener funciones digitales.
bit x = 1: Funciones analógicas de Pin x activadas. Pin x no podrá tener funciones digitales.
Este registro sólo existe para puertos B, C, D y E, pues son los únicos con funciones analógicas. En lenguaje
C se llaman GPIO_PORTB_AMSEL _R, GPIO_PORTC_AMSEL _R, GPIO_PORTD_AMSEL _R y
GPIO_PORTE_AMSEL_R
Registro GPIOPCTL
Este registro es el registro que permite seleccionar entre las diferentes funciones alternativas del
pin, sean éstas analógicas o digitales. Hay cuatro bits por pin, que corresponden a un dígito
hexadecimal. Si se representa el valor como número hexadecimal de 32 bits, habrá 8 dígitos
hexadecimales, correspondiendo el de más a la derecha (dígito menos significativo) a la
configuración del pin Pn0 (n=A, B, C, D, E o F), el siguiente dígito al pin Pn1, y así
sucesivamente. El manual del microcontrolador tiene una tabla de título “GPIO Pins and
Alternate Functions”2 donde especifica, para cada pin, qué valor corresponde a qué función
alternativa.
Para seleccionar la función GPIO en un pin, se pone a cero el valor del campo respectivo (los 4
bits).
Se presenta a continuación el detalle del registro GPIOPCTL. Cada campo de 4 bits (nible) está
etiquetado como PMCx, siendo x el número de pin del puerto (0 a 7). Para seleccionar la función
GPIO se pone el campo correspondiente a cero.
2
“Tiva™ TM4C123GH6PM Microcontroller DATA SHEET”, Rev. D, Texas Instruments, 2013.
CAPITULO2Parte1rev12.docx 18 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPIOPCTL PMC7 PMC6 PMC5 PMC4
0x52C RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW
valor inicial - - - - - - - - - - - - - - - -
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PMC3 PMC2 PMC1 PMC0
RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW
- - - - - - - - - - - - - - - -
A continuación se presenta una porción de la tabla 23-5 del manual del microcontrolador.
Ejemplo
Configurar el pin PD4 para que esté la señal digital de recepción (entrada) U6Rx del módulo
UART6, y los demás pines del puerto queden configurados como pines de salida GPIO y que
estén en nivel bajo (0 lógico).
Solución
Para poder emplear los pines del puerto D, debemos activar primero la señal de reloj de dicho
puerto utilizando el registro RCGCGPIO. Como es el puerto D, hay que poner a 1 el bit 3. En
lenguaje C sería así:
Como sólo quiere emplearse el pin PD4 con una función alternativa, pondremos a 1 el bit 4 del
registro GPIOAFSEL del puerto D, y los demás en cero. En lenguaje C sería así:
La señal U6Rx es una señal digital de entrada, y los demás pines se emplearán como pines GPIO,
los cuales son digitales, por lo tanto, debemos aislar la parte analógica de estos pines (hacemos
AMSEL = 0).
CAPITULO2Parte1rev12.docx 19 26/03/2019
Curso: Sistemas Digitales
Especialidad: Ing. Electrónica Profesor: Ing. Hugo Pratt
Pontificia Universidad Católica del Perú Área de circuitos y sistemas
Queremos que todos los pines, con excepción de PD4 sean salidas. PD4 debe ser entrada pues
U6Rx es una señal de entrada. Esto lo configuramos con el registro GPIODIR del puerto D.
Deshabilitar la parte analógica no significa que se habilitó la parte digital de cada pin. Hay que
hacerlo explícitamente con el registro GPIODEN que habilita la parte digital del puerto.
Como queremos que todos los pines de salida estén en 0 lógico, escribiremos 0 en cada bit del
registro GPIODATA.
while (1){
}
}
CAPITULO2Parte1rev12.docx 20 26/03/2019