#define HW_REGS_BASE ( ALT_STM_OFST ) //STM基地址
#define HW_REGS_SPAN ( 0x04000000 ) //地址跨度
#define HW_REGS_MASK ( HW_REGS_SPAN - 1 )
virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, HW_REGS_BASE );//将L3外设的物理地址映射为虚拟地址,
h2p_lw_led_addr=virtual_base + ( ( unsigned long )( ALT_LWFPGASLVS_OFST + DATA_PIO_0_BASE ) & ( unsigned long)( HW_REGS_MASK ) ); //计算led的地址;
*(uint32_t*)h2p_lw_led_addr=0x8555;//控制LED
问题来了,查了头文件发现ALT_STM_OFST=0xFC000000,是STM模块地址,不是L3外设物理地址,
1)STM模块是什么?
2)为什么不映射L3的物理地址oxFF400000?
这位童鞋,ARM控制fpga的led灯你成功了么?
不知道你板子硬件的外围电路是什么样的,你看看板子上有没有stm的单片机,有的话,可能是这个了。
这么老的帖子还有人翻出来
LED并不是直接挂在L3上,而是slave peripheral device,挂在L4上 ,通过LW总线访问。
其地址实际是LWFPGASLAVES,只是写成HW_REGS_BASE+ALT_LWFPGASLVS_OFST格式(规范化)。
STM是外设区域的第一个模块,所以#define HW_REGS_BASE ( ALT_STM_OFST ),其实跟STM本身没有半毛钱关系
你好。你这个截图的手册叫什么名字,可否发一份到论坛分享一下?