2017-07-26 31 views
0

我正在尝试使用Vxworks 6.9从ARM cortex A8 ona板读取FPGA(altera cyclone IV)寄存器。如何在C/C++中访问VXworks上的物理地址?

例如

#define My_FPGA_IP_Address_Base 0x00000400 
    #define mm_avalon 0x25000000 

    int main(){ 
    vxWorks_read_fromAddr (mm_avalon + My_FPGA_IP_Address_Base) ; //how can I get this on Vxworks 
    } 

谁能帮助我,在此先感谢

+1

可能的重复[如何从VxWorks中的RTP访问我的存储器映射I/O设备(FPGA)](https://stackoverflow.com/questions/113001/how-do-i-access-my -memory-mapped-io-device-fpga-from-a-rtp-in-vxworks) – solidpixel

+0

正确的方法是通过内核中的设备驱动程序进行连接。通过设计,您不应该从RTP –

回答

-1

你应该能够使用虚拟地址来访问使用普通指针寄存器。

int* myRegister = mm_avalon + My_FPGA_IP_Address_Base + registerOffset; int myRegisterValue = *myRegister;

*myRegister = 10;

假设你的寄存器写使能。

看看this post这似乎与更多信息有关。

+0

中获得内存映射IO,这要感谢您的支持,但是我可以通过哪些Vxworks API从硬件中读取数据? – sam60

+0

您不需要任何系统调用或特殊功能,只需在程序中像全局内存位置那样访问寄存器即可。 – Nomios

+0

对不起,它没有工作,int * myregister =(int *)0x25000400;那么我做了一个简单的printf:我得到一个错误:“由于信号11,RTP 0x824abfd8已被删除。”;你确定我们可以通过使用一个简单的c-pointer从物理地址读取吗? – sam60