AMBA AXI – GPIO IP 설계 (3)

약 2분 소요

개요

지난 포스팅(AMBA AXI – GPIO IP 설계(2))에 이어서, Vitis IDE에서 작업을 이어가보자.
버튼을 누르면 해당 자리수의 LED가 켜지도록 구현할 것

소스 코드 작성

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include "xparameters.h"
#include "sleep.h"

typedef struct
{
	volatile uint32_t MODER;
	volatile uint32_t IDR;
	volatile uint32_t ODR;
} GPIO_TypeDef;

#define GPIOA_BASEADDR XPAR_GPIO_0_S00_AXI_BASEADDR
#define GPIOB_BASEADDR XPAR_GPIO_1_S00_AXI_BASEADDR

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASEADDR)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASEADDR)

int main() {
	GPIOA->MODER = 0x0f;
	GPIOB->MODER = 0x00;

	int btn_state = 0;

	while(1) {
		btn_state = GPIOB->IDR;
		GPIOA->ODR = btn_state;

		usleep(200000);
	}
	return 0;
}
  • xparameters.h 헤더를 include 해야 메모리 맵의 주소를 가져올 수 있음
    • XPAR_GPIO_0_S00_AXI_BASEADDR 주소 등이 매크로로 선언되어 있음
  • GPIOA->MODER = 0x0f;: GPIOA(LED) 4개에 대해서 모두 출력으로 선언
  • GPIOB->MODER = 0x00;: GPIOB(BTN) 4개에 대해서 모두 입력으로 선언
  • 버튼의 IDR레지스터로부터 값을 읽어와서 ODR에 그대로 출력 후 0.2초 sleep

빌드 및 실행

빌드

Pasted image 20260218160518.png

상단의 망치 모양 또는 프로젝트 우클릭 후 Build Project 클릭

실행 및 실행 결과 확인

Pasted image 20260218160618.png

Pasted image 20260218160901.png

Pasted image 20260218160911.png

결론

각 자리수 별 버튼 입력에 맞게 LED 4개가 모두 ON/OFF되는 것을 확인

Leave a Comment

error: Content is protected !!