자일링스 AXI GPIO 사용법

개요



Xilinx AXI GPIO를 Zynq와 Microblaze에서 사용하는 방법에 대해 공식 Baremetal Driver를 사용하여 씁니다.

환경


  • Vivado 2018.3

  • Bitstream 만들기



    2개의 LED를 GPIO1에, 2개의 스위치를 GPIO2에 연결했습니다.
    GPIO1은 All Outputs, GPIO2는 All Inputs 플래그를 활성화합니다.


    샘플 코드



    갑자기, LED를 켜고 스위치를 읽는 코드는 다음과 같습니다.Hello World 의 템플릿에 이것을 복사하면 초기화와 기본 동작을 시도할 수 있습니다.
    #include <stdio.h>
    #include "platform.h"
    #include "xil_printf.h"
    #include "xgpio.h"
    
    #define LED_CHANNEL 1
    #define SW_CHANNEL 2
    
    XGpio gpio_0;
    
    int main(){
        int status;
    
        init_platform();
    
        // AXI GPIOドライバの初期化
        status = XGpio_Initialize(&gpio_0, XPAR_GPIO_0_DEVICE_ID);
        if(status != XST_SUCCESS){
            xil_printf("XPAR_GPIO_0_DEVICE_ID initialization failed.\n");
            return XST_FAILURE;
        }
    
        // 入出力方向の設定 0:出力 1:入力
        XGpio_SetDataDirection(&gpio_0, LED_CHANNEL, 0x0);        // all output
        XGpio_SetDataDirection(&gpio_0, SW_CHANNEL,  0xFFFFFFFF); // all input
    
        // LED点灯 (32bitを一度にセット)
        XGpio_DiscreteWrite(&gpio_0, LED_CHANNEL, 0b11);
    
        // 指定したビットだけクリア (0にセット)
        XGpio_DiscreteClear(&gpio_0, LED_CHANNEL, (1<<1));
    
        // 指定したビットだけセット (1にセット)
        XGpio_DiscreteSet(&gpio_0, LED_CHANNEL, (1<<0));
    
        // スイッチの値を読み出し
        u32 sw_state = XGpio_DiscreteRead(&gpio_0, SW_CHANNEL);
        xil_printf("SW=%08x\n", sw_state);
    
        cleanup_platform();
        return 0;
    }
    

    인터럽트 활성화


    // AXI GPIOの割り込みを有効化 (GPIO2のみ有効)
    XGpio_InterruptEnable(&gpio_0, SW_CHANNEL);
    // AXI GPIOのグローバル割り込みを有効化
    XGpio_InterruptGlobalEnable(&gpio_0);
    
    // 割り込みハンドラ
    void GpioHandler(void *CallbackRef){
        XGpio *GpioPtr = (XGpio *)CallbackRef;
        // 割り込みをクリア
        XGpio_InterruptClear(GpioPtr, SW_CHANNEL);
    }
    

    MicroBlaze에서 GPIO 인터럽트를 테스트한 기사는 여기입니다.
    h tp : // / l lp. 하테나 bぉg. jp/엔트리/2018/09/24/005413

    참고



    내가 이전에 쓴 블로그이지만 블로그 이름으로 인해 기사가 찾기 어려웠기 때문에 Qiita에 재게재하고 있습니다.
    h tp : // / l lp. 하테나 bぉg. jp/엔트리/2017/11/06/204748

    좋은 웹페이지 즐겨찾기