как использовать больше GPIO в дизайне Zybo с помощью Vivado?

Я новый пользователь Xilinx Vivado и Zybo. Я следовал руководству по ссылке ниже: http://www.dbrss.org/zybo/tutorial1.html и он работает хорошо.

затем я добавил канал для GPIO и соединил его с коммутаторами. и вот файл .c:

/* Borrowed from ZynqBook Tutorials */

/* Include Files */
#include "xparameters.h"
#include "xgpio.h"
#include "xstatus.h"
#include "xil_printf.h"

/* Definitions */
#define GPIO_DEVICE_ID  XPAR_AXI_GPIO_0_DEVICE_ID   /* GPIO device that LEDs are connected to */
#define LED 0x00                                    /* Initial LED value - 0000 */
#define LED_DELAY 10000000                          /* Software delay length */
#define LED_CHANNEL 1                               /* GPIO port for LEDs */
#define SW_CHANNEL 2
#define printf xil_printf                           /* smaller, optimized printf */

XGpio Gpio;                                         /* GPIO Device driver instance */

int LEDOutputExample(void)
{

    //volatile int Delay;
    int Status;
    int led = LED; /* Hold current LED value. Initialize to LED definition */

        /* GPIO driver initialization */

        Status = XGpio_Initialize(&Gpio, GPIO_DEVICE_ID);
        if (Status != XST_SUCCESS) {
            return XST_FAILURE;
        }

        /*Set the direction for the LEDs to output. */
        XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0x00);
        XGpio_SetDataDirection(&Gpio, SW_CHANNEL, 0x0F);

        /* Loop forever blinking the LED. */
            while (1) {
                /* Write output to the LEDs. */
                led = XGpio_DiscreteRead(&Gpio, SW_CHANNEL);
                XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, led);

                /* Flip LEDs. */
                //led = ~led;


                /* Wait a small amount of time so that the LED blinking is visible. */
                //for (Delay = 0; Delay < LED_DELAY; Delay++);
            }

        return XST_SUCCESS; /* Ideally unreachable */
}

/* Main function. */
int main(void){

    int Status;

    /* Execute the LED output. */
    Status = LEDOutputExample();
    if (Status != XST_SUCCESS) {
        xil_printf("GPIO output to the LEDs failed!\r\n");
    }

    return 0;
}

но когда я поменял переключатели, светодиоды остались в исходном состоянии. В чем проблема? Спасибо!


person steli    schedule 12.08.2015    source источник


Ответы (1)


Во-первых, вы должны не забыть изменить аппаратную часть и добавить новое IP-ядро AXi_GPIO для коммутаторов (на данный момент у вас есть только 1, которое предназначено только для светодиодов). Также какова цель использования коммутаторов, когда вы пытаетесь получить мигающий светодиод? в вашем коде много проблем. вам нужно больше узнать об использовании vivado с SDK, вы не можете просто добавить больше выходных данных из SDK. Я настоятельно рекомендую вам ознакомиться с учебным пособием xilinx vivado, которое бесплатно доступно на их веб-сайте. это очень хорошо объясняет все основы.

person James Maknoon    schedule 13.01.2016