Aprendizaje ZYNQ-GPIO-MIO

ZYNQ tiene tres tipos de GPIO: MIO, EMIO y AXI_GPIO.

Ug585 MIO y EMIO

1 、 MI

E / S multiuso, interfaz IO multifunción, asignada en Bank0 y Bank1 de GPIO, pertenece a la parte PS de Zynq. Hay 54 pines fuera del chip. Estos pines se pueden usar para GPIO, SPI, UART, TIMER, Ethernet, USB y otras funciones. Cada pin tiene múltiples funciones al mismo tiempo, por lo que se llama multifunción. Estos IO están conectados directamente a la EP. No es necesario agregar restricciones de pines, la señal MIO es transparente para la parte PL y es invisible. Por lo tanto, la operación de MIO puede considerarse como una operación de PS pura.

xparameters.h
#define XPAR_PS7_GPIO_0_DEVICE_ID 0
#define XPAR_PS7_GPIO_0_BASEADDR 0xE000A000
#define XPAR_PS7_GPIO_0_HIGHADDR 0xE000AFFF

La dirección base del registro de estado y control GPIO es: 0xE000_A000 La capa inferior de la operación del software bajo nuestro SDK es la operación del espacio de direcciones de la memoria.
Un puerto GPIO necesita al menos dos registros, un registro de control de puerto de E / S de uso general para el control y un registro de datos de puerto de E / S de uso general para almacenar datos.
El registro GPxCON es un registro de control, cada bit corresponde a un pin, un bit del cual se establece en 0, el pin correspondiente es un pin de salida, y cuando es 1, es un pin de entrada.
GPxDAT es un registro de datos. Cuando se establece un pin como entrada, lea este registro para saber si el estado de nivel del pin correspondiente es alto o bajo. Cuando el pin se establece como salida, escriba este registro para hacer que la salida del pin sea de nivel alto o nivel bajo.

Bank0 tiene 32 pines MIO, Bank1 tiene 22 pines MIO, 54 pines están conectados directamente al PS a través de MIO, sin configuración de hardware, use directamente el software SDK para la programación.

 

Comprensión de GPIO

1. GPIO es un dispositivo periférico que se utiliza para observar y controlar los pines del dispositivo.

2. MIO, que multiplexa el acceso desde el periférico PS y la interfaz de memoria estática al pin PS.

3. GPIO se puede programar de forma independiente y dinámica como entrada / salida y modo de interrupción.

4. GPIO se divide en cuatro bancos.

5. El software controla el GPIO a través de un conjunto de registros mapeados en memoria.

6. Grupo de registro:

(1) DATA_RO, utilizado para reflejar el estado de los pines del dispositivo.

(2) DATOS, cuando GPIO está configurado como salida, este registro puede controlar el valor de salida.

(3) MASK_DATA_LSW, utilizado para proteger los 16 bits inferiores de DATA.

(4) MASK_DATA_MSW, utilizado para proteger los 16 bits superiores de DATA.

(5) DIRM, usado para controlar si el pin de E / S se usa como entrada o salida, 0 es para habilitar la unidad de entrada y 1 es para habilitar la unidad de salida.

(6) OEN, cuando la E / S está configurada como salida, este registro se usa para encender / apagar la habilitación de salida, 0 es para apagar la habilitación de entrada y 1 es para encender la habilitación de salida.

7. MIO [8: 7] se utiliza como el pin VMODE durante el reinicio del sistema para configurar el voltaje del banco MIO. Después del reinicio, solo se puede utilizar como señal de salida.

 

Cómo iniciar GPIO

1. Inicialice el controlador GPIO

2. Configure la dirección GPIO para la salida.

3. Configure la habilitación de salida (asigne 1 al pin 10).

4. Escriba la salida en el pin GPIO.

 

 

Código de luz led de control MIO

#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
#define MIO0_LED 0
XGpioPs_Config * ConfigPtr;
XGpioPs Gpio;
main ()
{     printf ("PRUEBA GPIO \ n"); / * 初始化 GPIO * /     ConfigPtr = XGpioPs_LookupConfig (GPIO_DEVICE_ID);     XGpioPs_CfgInitialize (& Gpio, ConfigPtr, ConfigPtr-> BaseAddr);



    / * Establecer la dirección GPIO para la salida * /
    XGpioPs_SetDirectionPin (& Gpio, MIO0_LED, 1);
    / * Establecer la habilitación de salida (asignar pin10 a 1) * /
    XGpioPs_SetOutputEnablePin (& Gpio, MIO0_LED, 1);

    / * Escribir salida en el pin GPIO * /
    XGpioPs_WritePin (& Gpio, MIO0_LED, 0x1);
}

Supongo que te gusta

Origin blog.csdn.net/m0_55636008/article/details/115265701
Recomendado
Clasificación