GPIO

18
GPIO (General Propuser Input Output) Traducción por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrónica

Transcript of GPIO

GPIO(General Propuser Input Output)

Capitulo 1 Informacin General1.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.1.2 Funciones de GPIOT 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.

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_TRIGBit n FAL_TRIGGeneracin de interrupcin y evento EDMA

00GPINTn (interrupcin y evento EDMA) deshabilitado

01GPINTn es disparado por un flaco de bajada por el GPn

10GPINTn es disparado por un flaco de subida por el GPn

11GPINTn 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.

1.4 Operacin al detener la emulacinEl perifrico GPIO no esta afectado por la emulacin halts.

Capitulo 2

Registros

2.1 Informacin General de los RegistrosEl 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 GPIOOffsetAcrnimoNombre del RegistroDisponible en

0008BINTENRegistro de Habilitacin de Interrupcin por BancoSeccin 2.2.1

0010DIRRegistro de Direccin

0014OUT_DATARegistro de Datos de Salida

0018SET_DATARegistro de establecimiento de datos (set)

001CCLR_DATARegistro de Limpiar Datos (clear)

0020IN_DATARegistro de Datos de Entrada

0024SET_RIS_TRIGRegistro de Set Flanco de Subida para Interrup.

0028CLR_RIS_TRIGRegistro de Clear Flanco de Subida para Interrup.

002CSET_FAL_TRIGRegistro de Set Flanco de Bajada para Interrup.

0030CLR_FAL_TRIGRegistro de Clear Flanco de Bajada para Interrup.

Fin de la Tabla 2-1

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

2.2 Registros GPIOEsta 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 BancoBitCampoDescripcin

31-1ReservadoLa locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

0ENHabilita 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)

Tabla 2-3 Descripcin de los campos del registro Direccin.

BitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0DIRnControla la direccin de el pin GPn0 = 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.BitCampoDescripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0OUTnControla 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

Tabla 2-5 Descripcin de los campos del registro SET_DATABitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0SETnEscribiendo 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 efecto1 = 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_DATABitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0CLRnEscribiendo 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 efecto1 = 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

Tabla 2-7 Descripcin de los campos del registro IN_DATABitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0READINxRegresa 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_TRIGBitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0SETRISnEscribiendo 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 efecto1 = 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. 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_TRIGBitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0CLRRISnEscribiendo 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 efecto1 = 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

Tabla 2-10 Descripcin de los campos del registro SET_FAL_TRIGBitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0SETFALnEscribiendo 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 efecto1 = 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_TRIGBitCampo Descripcin

31-16ReservadoReservado. La locacin del bit reservado siempre se lee como 0. Un valor escrito en este campo no tiene efecto.

15-0CLRFALnEscribiendo 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 efecto1 = Limpia el bit correspondiente en FAL_TRIG

Fin de la Tabla 2-10

Capitulo 3

EjemplosCdigo 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))

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;}Traduccin por: Fernando Hermosillo Reynoso Ing. Comunicaciones y Electrnica