Xilinux PS与PL交互:裸机程序读写FPGA-REG

背景

当时在搞ZYNQ驱动的时候,出于TDD的思想,从最简单的功能开始验证。因此就涉及到了下面的需求。

PL侧会提供寄存器地址供PS端读写,这部分的寄存器在PL侧作为Avalon的IP,对PS端来说,就是一片物理地址。

PL

不做修改,但在其中Launch SDK

只要确保platform.h的内容是正确的,不这么做也没问题。

PS

工具是SDK。

NEW - Application,建一个HelloWord

使用Vivado生成的BSP

只使用以下代码:


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

int main()
{
	int i = 0, loop = 0;
    init_platform();

    print("Hello World

");
    while(1)
    {
    	loop++;
    	i++;
    	Xil_Out32(XPAR_M_AVALON_0_BASEADDR, i);
    	if(Xil_In32(XPAR_M_AVALON_0_BASEADDR) !=loop)
    	{
    		printf("loop %x, read %x
",loop, Xil_In32(XPAR_M_AVALON_0_BASEADDR));
    
    	}else{
    		printf("loop %x, OK
",loop);
    	}


    	if(Xil_In32(XPAR_AXI_GPIO_1_BASEADDR))
    	{
    		 Xil_Out32(XPAR_AXI_GPIO_0_BASEADDR , 1) ;
    	}else
    	{
    		Xil_Out32(XPAR_AXI_GPIO_0_BASEADDR , 0) ;
    	}
    
    }
    
    cleanup_platform();
    return 0;
}


右键 项目 Run As --RunConfiguration

  • 双击System Debugger
  • 勾选 全部

运行,测试。查看结果是否与PL端的预期一致(或者可以使用逻辑分析仪抓一下时序图)

如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
博客地址:https://www.cnblogs.com/schips/
原文地址:https://www.cnblogs.com/schips/p/xilinx_sdk_how_bare-machine_program_read-write_pl_side_regs.html