假设我构建了一个vivado Zynq FPGA项目,我想从在zynq上运行的c程序中写入和读取zynq的"M_AXI_GP0“端口,如下所示。此外,假设我想要在Zynq的"M_AXI_GP0“端口上读写的地址是地址"0x000A1000”。我该如何在下面的代码中做到这一点?我需要担心ARM中的虚拟地址到物理地址的转换吗?有没有XIL api可以做到这一点?等等。参见代码示例:
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
void write(uint32_t addr, uint32_t wdata) {
//????? how to implement
}
uint32_t read(uint32_t addr) {
return 0;
}
int main()
{
init_platform();
print("Hello World\n\r");
uint32_t beef;
write(0x000A1000, 0xDEADBEEF);
write(0x000A1004, 0x12345678);
beef = read(0x000A1000);
cleanup_platform();
return 0;
}

发布于 2019-06-12 10:13:34
"xil_ io.h“文件包含通用IO组件的接口,它封装了不需要任何特殊I/O处理的处理器的输入/输出函数:
u32 Xil_In32 (UINTPTR Addr);
void Xil_Out32 (UINTPTR Addr, u32 Value);"M_AXI_GP0“总线映射到Zynq地址映射中的PL或”可编程逻辑“地址区:
Xilinx Zynq: ARM Cortex A9 Memory Map
DDR 0x00000000 - 0x3FFFFFFF
PL 0x40000000 - 0xBFFFFFFF
Reserved 0xC0000000 - 0xDFFFFFFF
Memory mapped devices 0xE0000000 - 0xE02FFFFF
Reserved 0xE0300000 - 0xE0FFFFFF
NAND, NOR 0xE1000000 - 0xE3FFFFFF
SRAM 0xE4000000 - 0xE5FFFFFF
Reserved 0xE6000000 - 0xF7FFFFFF
AMBA APB Peripherals 0xF8000000 - 0xF8FFFFFF
Reserved 0xF9000000 - 0xFBFFFFFF
Linear QSPI - XIP 0xFC000000 - 0xFDFFFFFF
Reserved 0xFE000000 - 0xFFEFFFFF
OCM 0xFFF00000 - 0xFFFFFFFF发布于 2019-06-12 18:46:55
你看过here中的AXI GPIO驱动程序和示例了吗?您是否需要担心虚拟地址到物理地址的转换取决于您具体运行的是什么?您是否有裸机/RTOS设置?
https://stackoverflow.com/questions/56551365
复制相似问题