Você está na página 1de 14

Traduccin por: Fernando Hermosillo Reynoso Ing.

Comunicaciones y Electrnica




GPIO
(General Propuser Input Output)

















Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Capitulo 1
Informacin General
1.1 Introduccin
El perifrico de entradas/salidas de propsito general (GPIO) contiene Pines de propsito
general que pueden ser configurados como entrada o salida. Cuando son configurados
como una salida, t puedes escribir en un registro interno para controlar el estado a
manejar en el pin de salida. Cuando son configurados como entrada, t puedes detectar
el estado de la entrada por medio de la lectura del estado en un registro interno.

Adems, el perifrico GPIO puede producir interrupciones del CPU y eventos de
sincronizacin EDMA en diferentes modos de generacin de interrupciones/eventos.

La Figura 1.1 muestra el diagrama a bloques del GPIO.
Algunos pines del GPIO son multiplexados con otros pines de dispositivos, para detalles
en especfico del multiplexado de los bits del registro, ver el manual de datos del
dispositivo en especfico.
Todos los pines GPINT [0:15] son disponibles para sincronizacin de eventos de el EDMA
y como fuente de interrupciones de el CPU.


Figura 1.1: Diagrama a bloques del perifrico GPIO



a) Algunos de los pines GPn son multiplexados con otras seales de dispositivos.
b) Todas las GPINTn pueden usarse como interrupciones de CPU y sincronizacin de eventos de EDMA.
c) Los registros RIS_TRIG y FAL_TRIG, son registros internos del modulo GPIO y no son visibles por el CPU.

Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
1.2 Funciones de GPIO
T puedes configurar independientemente cada pin GPIO (GPn) como una entrada o una
salida usando los registros de direccin GPIO. El registro de direccin (DIR) especifica la
direccin de cada seal de GPIO. Un cero 0 lgico indica que el pin GPIO se configuro
como salida, y un uno 1 lgico indica como entrada.

Cuando se configura como salida, escribiendo un 1 a un bit del registro set data,
maneja el pin GPn correspondiente en un estado High lgico. Escribiendo un 1 en el
registro clear data maneja el pin GPn correspondiente en un estado Low lgico.

El estado de salida de cada pin GPn tambin puede ser directamente controlado
escribiendo en el registro Output data. Por ejemplo, para establecer el GP8 en un estado
lgico High, el software puede ejercer uno de los siguientes:
Escribir 0x100 en el registro SET_DATA.
Leer en el registro OUT_DATA, cambiar el octavo bit a 1, y escribir el nuevo
valor de nuevo en el registro OUT_DATA.

Para establecer el pin GP8 en un estado lgico low, el software puede ejercer alguno de
los siguientes:
Escribir 0x100 en el registro CLR_DATA.
Leer en el registro OUT_DATA, cambiar el octavo bit a 0, y escribir el nuevo
valor de vuelta en el registro OUT_DATA.
Note que escribir un 0 a los bits en los registros SET_DATA y CLR_DATA no afecta el
estado del pin GPIO. Tambin, cuando configura los pines GPIO como entrada, el escribir
en los registros SET_DAT, CLR_DATA u OUT_DATA no afectan el estado del pin.
Para un pin GPIO configurado como entrada, leer el registro input data (IN_DATA)
retornara el estado del pin.
Leer los registros SET_DATA o CLR_DATA, retornaran el valor en OUT_DATA, no el
estado actual del pin. El estado del pin esta disponible al leer el registro IN_DATA.






















Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
1.3 Generacin de interrupciones y eventos.

Cada pin del GPIO (GPn) pude configurarse para generar una interrupcin del CPU
(GPINTn) y un evento de sincronizacin para el EDMA (GPINTn). La interrupcin y el
evento EDMA pueden generarse en el flanco de subida (rising-edge), flanco de bajada
(falling-edge), o en ambos flancos por la seal de GPIO. La deteccin lgica del flanco
esta sincronizada al reloj del perifrico GPIO.
La direccin del pin GPIO no es necesario establecerse como entrada cuando se usa el
pin para generar la interrupcin y el evento EDMA. Cuando el pin GPIO se configura como
entrada, las transiciones en el pin disparan/activan la interrupcin y el evento EDMA.
Cuando el pin GPIO es configurado como salida, por software se puede cambiar el
registro de salida de GPIO para un cambio en el estado del pin y alternadamente disparar
la interrupcin y el evento EDMA.
Dos registros internos, RIS_TRIG y FAL_TRIG, especifican que flanco de la seal de GPn
genera una interrupcin y evento EDMA. Cada bit en esos dos registros corresponden a
un pin GPn. La tabla 1-1 describe la generacin de interrupcin y evento EDMA por el pin
GPn basndose en el bit de configuracin de los registros RIS_TRIG y FAL_TRIG.

Tabla 1-1 Opciones de configuracin de interrupcin y evento EDMA por GPIO.

Bit n RIS_TRIG Bit n FAL_TRIG Generacin de interrupcin y evento EDMA
0 0 GPINTn (interrupcin y evento EDMA) deshabilitado
0 1 GPINTn es disparado por un flaco de bajada por el GPn
1 0 GPINTn es disparado por un flaco de subida por el GPn
1 1 GPINTn es disparado por ambos flacos por el GPn
Fin de la tabla 1-1

RIS_TRIG y FAL_TRIG no estn accesibles o visibles directamente para el CPU. Esos
registros son accedidos indirectamente por los registros SET_RIS_TRIG,
CLR_RIS_TRIG, SET_FAL_TRIG y CLR_FAL_TRIG.

Escribiendo un 1 en un bit del registro SET_RIS_TRIG establece el bit correspondiente
en el registro RIS_TRIG. Escribiendo un 1 en un bit del registro CLR_RIS_TRIG limpia el
bit correspondiente en el registro RIS_TRIG. Escribiendo en los registros SET_FAL_TRIG
y CLR_FAL_TRIG, funciona del mismo modo en el registro FAL_TRIG.

Leer en los registros SET_RIS_TRIG CLR_RIS_TRIG retorna el valor del registro
RIS_TRIG. Leer desde los registros SET_FAL_TRIG CLR_FAL_TRIG retorna el valor
del registro FAL_TRIG.

Para usar los pines GPIO como fuentes para las interrupciones del CPU y eventos EDMA,
el bit 0 en el banco interrupt enable (BINTEN) debe de establecerse en 1.











Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
1.4 Operacin al detener la emulacin
El perifrico GPIO no esta afectado por la emulacin halts.


















































Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Capitulo 2
Registros

2.1 Informacin General de los Registros
El perifrico GPIO es configurado de acuerdo a los registros enlistados en la Tabla 2-1.
Para la direccin en memoria de esos registros, consulte el manual de datos del
dispositivo.

Tabla 2-1 Registros de GPIO
Offset Acrnimo Nombre del Registro Disponible en
0008 BINTEN Registro de Habilitacin de Interrupcin por Banco Seccin 2.2.1
0010 DIR Registro de Direccin
0014 OUT_DATA Registro de Datos de Salida
0018 SET_DATA Registro de establecimiento de datos (set)
001C CLR_DATA Registro de Limpiar Datos (clear)
0020 IN_DATA Registro de Datos de Entrada
0024 SET_RIS_TRIG Registro de Set Flanco de Subida para Interrup.
0028 CLR_RIS_TRIG Registro de Clear Flanco de Subida para Interrup.
002C SET_FAL_TRIG Registro de Set Flanco de Bajada para Interrup.
0030 CLR_FAL_TRIG Registro de Clear Flanco de Bajada para Interrup.
Fin de la Tabla 2-1

Direccin de memoria en la EVM TMS320C6657LS para GPIO: 0x02320000


























Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
2.2 Registros GPIO
Esta seccin ilustra la capa de bit para los registros de GPIO y provee una descripcin
para cada campo de los registros.

2.2.1 Registro de Habilitacin de Interrupcin por Banco
Para usar los pines del GPIO como fuentes de interrupcin del CPU y eventos EDMA, el
bit 0 en el banco Registro Habilitacin de Interrupciones (BINTEN) debe estar en set.
La Figura 2-1, muestra el Registro de Habilitacin de Interrupcin por Banco y la Tabla 2-
2 describe los campos.

Figura 2-1 Registro de Habilitacin de Interrupcin por Banco (BINTEN)


Tabla 2-2 Descripcin de los campos en el Registro de Habilitacin de Interrupcin por
Banco
Bit Campo Descripcin
31-1 Reservado La locacin del bit reservado siempre se lee como 0. Un valor escrito en
este campo no tiene efecto.
0 EN Habilita todos los pines GPIO como fuentes para el CPU del DSP.
0 = Deshabilita la interrupcin por GPIO
1 = Habilita la interrupcin por GPIO
Fin de la Tabla 2-2

2.2.2 Registro de Direccin (DIR)
El registro de direccin (DIR) determina si se tiene un pin GPIO como entrada o como
salida. Por defecto, todos los pines del GPIO estn configurados como entradas.
Cuando un pin GPIO esta configurado como salida, el buffer de salida del GPIO lo
controla el pin GPIO. Si es necesario poner el buffer de salida GPIO en un estado de alta
impedancia, el pin GPIO debe configurarse como pin de entrada (DIRn = 0). Al resetear,
los pines GPIO se ponen en modo entrada por defecto.
La Figura 2-2 muestra el registro de Direccin y la Tabla 2-3 describe sus campos.

Figura 2-2 El Registro Direccin (DIR)








Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Tabla 2-3 Descripcin de los campos del registro Direccin.

Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 DIRn Controla la direccin de el pin GPn
0 = Pin GPn configurado como salida.
1 = Pin GPn configurado como entrada.
Fin de la Tabla 2-3


2.2.3 Registro de dato de salida (OUT_DATA)
El registro de GPIO de datos de salida (OUT_DATA) indica el valor a ser controlado en un
pin que ha sido configurado como salida.
La Figura 2-3 muestra el registro de dato de salida y la Tabla 2-4 describe sus campos.


Figura 2-3 Registro de dato de salida (OUT_DATA)





Tabla 2-4 Descripcin de los campos del registro Datos de Salida.
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 OUTn Controla el estado del drive del pin GPn correspondiente. Esos bits no
afectan el estado del pin cuando este es configurado como entrada.
Leyendo estos bits retornan el valor del registro, no el estado del pin.
Fin de la Tabla 2-4


2.2.4 Registro Set Data (SET_DATA)
El registro de GPIO SET_DATA provee una alternativa media de controlador de salida en
alto para el GPIO. Escribiendo un 1 en el bit del registro SET_DATA setea el bit
correspondiente en el registro de Dato de salida. Si se escribe un 0 esto no tendr
efecto. Leyendo el registro SET_DATA, regresa el contenido de el registro de dato de
salida.
La Figura 2-4 muestra el registro SET_DATA y la Tabla 2-5 describe sus campos.


Figura 2-4 Registro DATA_SET






Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica

Tabla 2-5 Descripcin de los campos del registro SET_DATA
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 SETn Escribiendo un 1 setea el bit correspondiente del registro dato de
salida. Leyendo este registro regresa el contenido del registro de dato de
salida. Escribiendo un 0 no tiene efecto.
0 = No hay efecto
1 = Setea el bit correspondiente del registro de dato de salida.
Fin de la Tabla 2-5


2.2.5 Registro Clear Data (CLR_DATA)
El registro de GPIO Clear Data (CLR_DATA) provee una alternativa media de
controlador de salida en bajo para el GPIO. Escribiendo un 1 en el bit del registro
CLR_DATA Limpia el bit correspondiente en el registro de Out Data. Si se escribe un
0 esto no tendr efecto. Leyendo el registro CLR_DATA, regresa el contenido de el
registro de dato de salida.
La Figura 2-5 muestra el registro CLR_DATA y la Tabla 2-6 describe sus campos.


Figura 2-5 Registro CLR_DATA


Tabla 2-6 Descripcin de los campos del registro CLR_DATA
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 CLRn Escribiendo un1 Limpia el bit correspondiente del registro dato de
salida. Leyendo este registro regresa el contenido del registro de dato de
salida. Escribiendo un 0 no tiene efecto.
0 = No hay efecto
1 = Limpia el bit correspondiente del registro de dato de salida.
Fin de la Tabla 2-6


2.2.6 Registro Input Data (IN_DATA)
El registro de GPIO Input Data (IN_DATA) refleja el estado del pin GPIO. Cuando se lee, el registro
Input Data regresa el estado del pin GPIO independientemente del estado del bit correspondiente
en los registros de Direction y Output Data.
La figura 2-6 muestra el registro Input Data y la Tabla 2-7 describe sus campos.


Figura 2-5 Registro IN_DATA




Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Tabla 2-7 Descripcin de los campos del registro IN_DATA
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 READINx Regresa el estado del pin GPn correspondiente.
Fin de la Tabla 2-7


2.2.7 Registro de Interrupcin por flanco de subida en set (SET_RIS_TRIG)
El registro del GPIO de disparo de subida (RIS_TRIG) configura la deteccin lgica del
flanco para disparar una interrupcin y eventos EDMA por GPIO en el flanco de subida en
seales del GPIO. Configurar un bit en 1 en el registro RIS_TRIG causa una interrupcin y
evento EDMA (GPINTn) correspondiente a ser generada en el flanco de subida del GPn.
El registro RIS_TRIG no es directamente accesible por el CPU; este debe de ser
configurado usando lo registros SET_RIS_TRIG y CLR_RIS_TRIG.
Escribiendo un 1 en un bit del registro SET_RIS_TRIG setea* el bit correspondiente en
RIS_TRIG. Escribir un cero no tiene efecto. Leer el registro SET_RIS_TRIG regresa el
valor en el registro RIS_TRIG.
La Figura 2-7 muestra el registro SET_RIS_TRIG y la Tabla 2-8 describe sus campos.


Figura 2-7 Registro SET_RIS_TRIG



Tabla 2-8 Descripcin de los campos del registro SET_RIS_TRIG
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 SETRISn Escribiendo 1, habilita la deteccin por flanco de subida en el pin GPn
correspondiente. Leer este registro regresa el estado del registro
RIS_TRIG.
0 = No hay efecto
1 = Setea el bit correspondiente en RIS_TRIG
Fin de la Tabla 2-8


2.2.8 Registro de Interrupcin por flanco de subida en Clear (CLR_RIS_TRIG)
El registro del GPIO de disparo de subida (RIS_TRIG) configura la deteccin lgica del
flanco para disparar una interrupcin y eventos EDMA por GPIO en el flanco de subida en
seales del GPIO. Configurar un bit en 1 en el registro RIS_TRIG causa una interrupcin y
evento EDMA (GPINTn) correspondiente a ser generada en el flanco de subida del GPn.
El registro RIS_TRIG no es directamente accesible por el CPU; este debe de ser
configurado usando lo registros SET_RIS_TRIG y CLR_RIS_TRIG.

Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Escribiendo un 1 en un bit del registro CLR_RIS_TRIG Limpia el bit correspondiente en
RIS_TRIG. Escribir un cero no tiene efecto. Leer el registro CLR_RIS_TRIG regresa el
valor en el registro RIS_TRIG.
La Figura 2-8 muestra el registro CLR_RIS_TRIG y la Tabla 2-9 describe sus campos.


Figura 2-8 Registro CLR_RIS_TRIG

Tabla 2-9 Descripcin de los campos del registro CLR_RIS_TRIG
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 CLRRISn Escribiendo 1, deshabilita la deteccin por flanco de subida en el pin GPn
correspondiente. Leer este registro regresa el estado del registro
RIS_TRIG.
0 = No hay efecto
1 = Limpia el bit correspondiente en RIS_TRIG
Fin de la Tabla 2-9
*Setea: del Ingles set, setea es un tecnicismo para hacer referencia a la palabra set.

2.2.9 Registro de Interrupcin por flanco de bajada en Set (SET_FAL_TRIG)
El registro del GPIO de Disparo de Bajada (FAL_TRIG) configura la deteccin lgica del
flanco para disparar una interrupcin y eventos EDMA por GPIO en el flanco de bajada en
seales del GPIO. Configurar un bit en 1 en el registro FAL_TRIG causa una interrupcin
y evento EDMA (GPINTn) correspondiente a ser generada en el flanco de bajada del
GPn. El registro FAL_TRIG no es directamente accesible por el CPU; este debe de ser
configurado usando lo registros SET_FAL_TRIG y CLR_FAL_TRIG.
Escribiendo un 1 en un bit del registro SET_FAL_TRIG Setea el bit correspondiente en
FAL_TRIG. Escribir un cero no tiene efecto. Leer el registro SET_FAL_TRIG regresa el
valor en el registro FAL_TRIG.
La Figura 2-9 muestra el registro SET_FAL_TRIG y la Tabla 2-10 describe sus campos.


Figura 2-9 Registro SET_FAL_TRIG


Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Tabla 2-10 Descripcin de los campos del registro SET_FAL_TRIG
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 SETFALn Escribiendo 1, habilita la deteccin por flanco de subida en el pin GPn
correspondiente. Leer este registro regresa el estado del registro
FAL_TRIG.
0 = No hay efecto
1 = Setea el bit correspondiente en FAL_TRIG
Fin de la Tabla 2-10


2.2.10 Registro de Interrupcin por flanco de bajada en Clear (CLR_FAL_TRIG)
El registro del GPIO de Disparo de Bajada (FAL_TRIG) configura la deteccin lgica del
flanco para disparar una interrupcin y eventos EDMA por GPIO en el flanco de bajada en
seales del GPIO. Configurar un bit en 1 en el registro FAL_TRIG causa una interrupcin
y evento EDMA (GPINTn) correspondiente a ser generada en el flanco de bajada del
GPn. El registro FAL_TRIG no es directamente accesible por el CPU; este debe de ser
configurado usando lo registros SET_FAL_TRIG y CLR_FAL_TRIG.
Escribiendo un 1 en un bit del registro CLR_FAL_TRIG Limpia el bit correspondiente en
FAL_TRIG. Escribir un cero no tiene efecto. Leer el registro CLR_FAL_TRIG regresa el
valor en el registro FAL_TRIG.
La Figura 2-10 muestra el registro CLR_FAL_TRIG y la Tabla 2-11 describe sus campos.


Figura 2-10 Registro CLR_FAL_TRIG

Tabla 2-11 Descripcin de los campos del registro CLR_FAL_TRIG
Bit Campo Descripcin
31-16 Reservado Reservado. La locacin del bit reservado siempre se lee como 0. Un
valor escrito en este campo no tiene efecto.
15-0 CLRFALn Escribiendo 1, deshabilita la deteccin por flanco de subida en el pin GPn
correspondiente. Leer este registro regresa el estado del registro
FAL_TRIG.
0 = No hay efecto
1 = Limpia el bit correspondiente en FAL_TRIG
Fin de la Tabla 2-10




Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Capitulo 3
Ejemplos
Cdigo de ejemplo #1:
/*
*Titulo: Definicin de los registros para GPIO
*Autor: TI
*Notas: Extrados del archivo .gel generado en CCS v5.2.1.00018 de TI
*/
#define GPIO_BASE 0x02320000
#define GPIO_BITEN (*(unsigned int*) (GPIO_BASE + 0x0008))
#define GPIO_DIR (*(unsigned int*) (GPIO_BASE + 0x0010))
#define GPIO_OUT_DATA (*(unsigned int*) (GPIO_BASE + 0x0014))
#define GPIO_IN_DATA (*(unsigned int*) (GPIO_BASE + 0x0020))
#define GPIO_CLR_RIS_TRIG (*(unsigned int*) (GPIO_BASE + 0x0028))
#define GPIO_CLR_FAL_TRIG (*(unsigned int*) (GPIO_BASE + 0x0030))




































Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica
Cdigo de ejemplo #2:
/*
*Titulo: Configurar un pin GPIO como entrada/salida
*Autor: Fernando Hermosillo Reynoso
*/
/*Definiciones de memoria*/
#define GPIO_BASE 0x02320000
#define GPIO_BITEN (*(unsigned int*) (GPIO_BASE + 0x0008))
#define GPIO_DIR (*(unsigned int*) (GPIO_BASE + 0x0010))
#define GPIO_OUT_DATA (*(unsigned int*) (GPIO_BASE + 0x0014))
#define GPIO_IN_DATA (*(unsigned int*) (GPIO_BASE + 0x0020))
#define GPIO_CLR_RIS_TRIG (*(unsigned int*) (GPIO_BASE + 0x0028))
#define GPIO_CLR_FAL_TRIG (*(unsigned int*) (GPIO_BASE + 0x0030))

#define DIR0 0x0000FFFE
#define DIR1 0x0000FFFD
#define DIR2 0x0000FFFB
#define DIR3 0x0000FFF7
#define DIR4 0x0000FFEF
#define DIR5 0x0000FFDF
#define DIR6 0x0000FFBF
#define DIR7 0x0000FF7F
#define DIR8 0x0000FEFF
#define DIR9 0x0000FDFF
#define DIR10 0x0000FBFF
#define DIR11 0x0000F7FF
#define DIR12 0x0000EFFF
#define DIR13 0x0000DFFF
#define DIR14 0x0000BFFF
#define DIR15 0x00007FFF

/*
*Habilitar/Deshabilitar la interrupcin por GPIO*/
*En este caso las deshabilitaremos, por defecto estn deshabilitadas*/
* GPIO_BINTEN = GPIO_BINTEN|0x00000001; Habilitar Interrupciones
*/

/*
*Seleccionar la direccin de un pin de GPIO como salida/entrada
*/
Void set_dir_output (unsigned int direction);

Void main ()
{
GPIO_DIR&=0x0000FFFE; //Pin GP0 como salida, todos los dems como entrada
set_dir_output (DIR0&DIR1);

}

Void set_dir_output (unsigned int direction)
{
DIR=DIR&direction;
}

Você também pode gostar