无法从自定义AXI外设寄存器读取数据

问题描述 投票:0回答:1

我正在使用Zynq板,其中创建了自定义AXI 4 lite从属外围设备,然后从IP存储库中添加了该外围设备。并在vivado中创建了可综合的自定义IP(正弦波IP),并且还编写了一个C代码来读取此IP输出(我想从寄存器中读取数据)。但是它以某种方式显示出差异。而不是我的期望。

[我在此附上屏幕截图和我的C代码。但是从长远来看,它显示了一些垃圾内存状态。这里,我期待正弦波输出。 (以数字形式)请,关于我可能在哪里出错或在C代码中遗漏了什么,建议我纠正或建议

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9lQ3NtUC5wbmcifQ==” alt =“在此处输入图像描述”>

#include "xil_printf.h"
#include "xil_io.h"
#include "xparameters.h"
#include "xil_types.h"
#include "xparameters_ps.h"


#include <stdio.h>
//Definitions for peripheral  MYIPINETHREE_0 //
#define XPAR_ MYIPINETHREE_0_DEVICE_ID 0
#define XPAR_ MYIPINETHREE_0_S00_AXI_BASEADDR 0x43C00000
#define XPAR_ MYIPINETHREE_0_S00_AXI_HIGHADDR 0x43C0FFFF

int main(){
    u32 baseaddr;
    int sine, sinephase, enable,reg ;
    while (1)
    {
    xil_printf("start of ip test\r");

    if (enable == 1)
                    reg = 0xFFFFFFFF;
        else
                reg = 0x00000000;
     Xil_Out32(0x43C00000, 32 );
sine = Xil_In32(baseaddr+4);

    xil_printf("\r state: %d", sine);
     Xil_Out32(0x43C00000, 32);
     sinephase = Xil_In32(baseaddr+4);
        xil_printf("\r state: %d", sinephase);
    return 0;
}
}
c fpga xilinx vivado zynq
1个回答
0
投票

开始:您从不会初始化baseaddr,而是使用它来读取。

而且我也不能说,因为我不知道如何验证您的地址正确。通常,您应该使用xparameters.h文件中的定义,Xilinx板级软件包程序会将它们放在其中。我看不到这种情况。

我有些怀疑,因为我所有的Xilinx AXI地址都以0x800开头...但是那可能是因为我使用的是其他FPGA。

© www.soinside.com 2019 - 2024. All rights reserved.