[Beijing Xunwei] Configuración de GPIO Terminator i.MX6ULL

En los capítulos 9.1 y 9.2, presentamos estos dos registros "SW_MUX_CTL_PAD_XX_XX" y "SW_PAD_CTL_PAD_XX_XX" para configurar los pines IO. En este capítulo, aprenderemos sobre la configuración de funciones GPIO (GPIO es una función multiplexada de pines IO) . Por ejemplo, el IO de GPIO1_IO00 se puede multiplexar en 9 funciones de multiplexación como I2C2_SCL, ENET1_REF_CLK1, GPIO1_IO00, WDOG3_WDOG_B, etc. GPIO1_IO00 es solo una de ellas. Para qué función de multiplexación está configurada específicamente, debe mirar este IO en nuestro diseño de hardware. Qué función está diseñada. Si usamos este pin para controlar el diodo emisor de luz LED, entonces nuestro programa configurará este IO en modo GPIO, y luego necesitamos configurar la función GPIO, podemos consultar el Capítulo 28 del manual "Entrada de propósito general / Salida (GPIO) ". En este capítulo podemos ver la estructura de GPIO como se muestra en la Figura 1:


Inserte la descripción de la imagen aquí

Figura 1

En la figura anterior podemos ver dos lugares marcados con casillas rojas (1, 2), uno de los cuales contiene dos registros Este es el registro para configurar la multiplexación IO y los atributos de la función IO presentado en el Capítulo 6.2. Los 2 lugares indican los registros que deben configurarse cuando se usa IO como GPIO (un total de 8): GPIO.DR, GPIO.GDIR, GPIO.PSR, GPIO.ICR1, GPIO.ICR2, GPIO.EDGE_SEL, GPIO. IMR, GPIO.ISR, en el capítulo 6.2 anterior, presentamos que i.MX6 ULL tiene 5 grupos de GPIO, y cada grupo de GPIO tiene estos 8 registros. Veamos estos registros por separado:
Primero, el registro GPIOx_DR, como se muestra en la Figura 2. :


Inserte la descripción de la imagen aquí

Figura 2

Este registro es un registro de datos, 32 bits, cada bit corresponde a un GPIO, cuando el GPIO está configurado para emitir, escriba 1 en el bit correspondiente, GPIO emitirá un nivel alto, escriba 0, GPIO emitirá un nivel bajo. Si el GPIO está configurado como entrada, luego lea el bit correspondiente de este registro, puede obtener el estado de GPIO correspondiente (0 o 1).

Luego está el registro GPIOx_GDIR, como se muestra en la Figura 3:


Inserte la descripción de la imagen aquí

imagen 3

Este registro también es de 32 bits y cada bit corresponde a un GPIO Este registro se utiliza para establecer si el GPIO es de entrada o salida. (El bit correspondiente se establece en 0, el GPIO correspondiente se establece en el modo de entrada; el bit correspondiente se establece en 1, el GPIO correspondiente se configura en el modo de salida).

Luego está el registro GPIOx_PSR, como se muestra en la Figura 4:


Inserte la descripción de la imagen aquí

Figura 4

Este registro también es de 32 bits y cada bit corresponde a un GPIO Este registro se utiliza para leer el estado (nivel alto y bajo) del GPIO correspondiente.

Luego está el registro GPIOx_ICR1, como se muestra en la Figura 5:


Inserte la descripción de la imagen aquí

Figura 5

Este registro es un registro de control de interrupciones. Cada grupo de GPIO tiene hasta 32 GPIO. Este registro se usa para configurar los 16 GPIO inferiores. Este registro es de 32 bits, y cada dos bits representan un GPIO. Estos dos bits se usan para configurar el modo de disparo de interrupciones. :
00 Disparador de
nivel bajo 01 Disparador de nivel alto
10 Disparador de borde ascendente
11
Disparador de borde descendente Tome GPIO1_IO3 como ejemplo, si está configurado como disparador de nivel alto, GPIO1.ICR1 = 1 << 6.

Luego está el registro GPIOx_ICR2, como se muestra en la Figura 6:


Inserte la descripción de la imagen aquí

Figura 6

Este registro también es un registro de control de interrupciones. Cada grupo de GPIO tiene hasta 32 GPIO. Este registro se usa para configurar los 16 GPIO altos. Este registro es de 32 bits, y cada dos bits representan un GPIO. Estos dos bits se usan para configurar el modo de disparo de interrupciones :
00 Disparador de
nivel bajo 01 Disparador de nivel alto
10 Disparador de borde ascendente
11
Disparador de borde descendente Tome GPIO1_IO7 como ejemplo, si está configurado como disparador de nivel alto, GPIO1.ICR1 = 1 << 2.

Luego está el registro GPIOx_IMR, como se muestra en la Figura 7:


Inserte la descripción de la imagen aquí

Figura 7

Este registro es un registro de máscara de interrupción. Cada bit corresponde a un GPIO. Si la interrupción de un GPIO está habilitada, entonces establezca el bit correspondiente a este registro en 1. Si la interrupción de un determinado GPIO está deshabilitada, establezca el bit correspondiente de este registro en 0.

Luego está el registro GPIOx_ISR, como se muestra en la Figura 8:


Inserte la descripción de la imagen aquí

Figura 8

Este registro es un registro de estado de interrupción, un total de 32 bits, cada uno correspondiente a un gpio, siempre que se genere una interrupción GPIO, el bit correspondiente se establecerá en 1, podemos leer este registro para determinar si se genera la interrupción GPIO . Cuando terminamos de procesar la interrupción, debemos borrar el bit de bandera de interrupción correspondiente (como escribir 1 en el bit correspondiente del registro, es decir, para borrar el bit de bandera de interrupción).

Luego GPIOx_EDGE_SEL, como se muestra en la Figura 9:


Inserte la descripción de la imagen aquí

Figura 9

Este registro se utiliza para establecer la interrupción de flanco. Este registro anulará la configuración de ICR1 e ICR2, y un GPIO corresponde a un bit. El bit correspondiente se establece en 1, entonces es equivalente a configurar el GPIO correspondiente para que se active en los flancos ascendente y descendente (ambos flancos).

Hasta ahora hemos terminado de introducir todos los registros de GPIO.Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/BeiJingXunWei/article/details/108507048
Recomendado
Clasificación