Verilog/Verilog 실습

Verilog microblaze led 키기

오버헤드프레스 2023. 5. 19. 14:27

버튼으로 led키는 실습

axi_gpio_LED를 더블 클릭하면 GPIO, GPIO2 두개 있는 것을 확인할 수 있는데 이번에 2번은 사용 X

 

AXI GPIO 를 추가하고 

 

 

parameter.h
parameter.h 파일 안에 주소가 있음
xgpio.h

ctrl + space 누르면 자동완성이 뜸

 

basys3 버튼 동작에 따른 led키기 코드

 

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"

#define BTN_ID XPAR_AXI_GPIO_BTN_DEVICE_ID
#define LED_ID XPAR_AXI_GPIO_LED_DEVICE_ID
#define BTN_CHANNEL 1
#define LED_CHANNEL 1
#define BTN_MASK 0b1111

int main()
{
    init_platform();

    print("started\n\r");

    XGpio_Config *cfg_ptr;
    XGpio led_device, btn_device;
    u32 data;  //unsigned 32bit

    //Initialize Led Device
    cfg_ptr = XGpio_LookupConfig(LED_ID);
    XGpio_CfgInitialize(&led_device, cfg_ptr, cfg_ptr->BaseAddress);
    XGpio_SetDataDirection(&led_device, LED_CHANNEL, 0); //AVR에서 1주면 출력 0 주면 입력, vitis 에서는 반대

    cfg_ptr = XGpio_LookupConfig(BTN_ID);
    XGpio_CfgInitialize(&btn_device, cfg_ptr, cfg_ptr->BaseAddress);
    XGpio_SetDataDirection(&btn_device, BTN_CHANNEL, BTN_MASK); //AVR에서 1주면 출력 0 주면 입력, vitis 에서는 반대

    while(1){
    	data = XGpio_DiscreteRead(&btn_device, BTN_CHANNEL); //현재 무슨 버튼이 눌렸는지 알 수 있다
    	XGpio_DiscreteWrite(&led_device, LED_CHANNEL,data & BTN_MASK);
    }

    cleanup_platform();
    return 0;
}

가운데 버튼 클릭 시