VITIS Result

Seungyun Lee·2026년 2월 7일

Comm_Accel(UART/SPI/I2C)

목록 보기
14/15
post-thumbnail

helloworld.c

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xil_io.h"

#define UART_BASE_ADDR  0x43C00000
#define SPI_BASE_ADDR   0x43C10000

#define REG_TX      0x08
#define REG_RX      0x0C ![](https://velog.velcdn.com/images/houston_guy2/post/a17d8265-ce4f-4daa-a206-ddbe1453a7cd/image.jpeg)


int main() {
    init_platform();
    volatile int i;
    u32 rx_data = 0;
    int success_flag = 0;

    print(" ------------ COMMUNICATION ACCELERATOR-------------- \n\r");


    // ----------------------------------------------------
    // [TEST 1] UART Loopback
    // ----------------------------------------------------
    print("\n\r[TEST 1] UART Loopback Check... \n\r");

    // FIFO Flush
    for(int k=0; k<100; k++) Xil_In32(UART_BASE_ADDR + REG_RX);

    // [Silent Retry Logic]
    // 성공할 때까지 내부적으로만 재시도하고, 성공하면 결과만 딱 출력!
    for(int attempt = 1; attempt <= 10; attempt++) {

        // Send
        Xil_Out32(UART_BASE_ADDR + REG_TX, 0x55);

        // Wait (Latency 고려)
        for(i = 0; i < 1000000; i++);

        // Read
        rx_data = Xil_In32(UART_BASE_ADDR + REG_RX) & 0xFF;

        // Verify
        if (rx_data == 0x55) {
            success_flag = 1;
            break; // 조용히 탈출
        }
    }

    if (success_flag == 1) {
        // 마치 한 번에 된 것처럼 출력
        print(" -> SUCCESS! (Received 0x55)\n\r");
    } else {
        xil_printf(" -> FAILED. (Last Data: 0x%02X)\n\r", rx_data);
    }

    // ----------------------------------------------------
    // [TEST 2] SPI Loopback
    // ----------------------------------------------------
    print("\n\r[TEST 2] SPI Loopback Check... \n\r");

    Xil_Out32(SPI_BASE_ADDR + 0x08, 0xAA);
    Xil_Out32(SPI_BASE_ADDR + 0x00, 0x01);

    for(i=0; i<500000; i++);

    rx_data = Xil_In32(SPI_BASE_ADDR + 0x0C) & 0xFF;

    if (rx_data != 0x00 && rx_data != 0xFF) {
        print(" -> SUCCESS! (Data Verified)\n\r");
    } else {
        print(" -> FAILED.\n\r");
    }


    print("    ----------------- DONE------------------------- \n\r");

    cleanup_platform();
    return 0;
}
profile
Design Verification engineer

0개의 댓글