Verilog/Verilog 실습
Verilog microblaze led 키기
오버헤드프레스
2023. 5. 19. 14:27
버튼으로 led키는 실습
axi_gpio_LED를 더블 클릭하면 GPIO, GPIO2 두개 있는 것을 확인할 수 있는데 이번에 2번은 사용 X
AXI GPIO 를 추가하고
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;
}