求问在ZYNQ上跑linux,怎样开发多寄存器的AXI4_IP的驱动

题主既然看了1个寄存器的驱动程序,想必知道要实现哪些函数了,那这部分我就不说了。单说用4个寄存器有什么不同。把用户空间的参数取过来之后,按照参数,分别写指定的寄存器。在FPGA的IP中(verilog文件),有个在AXI模板中例化LED接口的模块。默认有四个寄存器,把不同的寄存器的最低位连接到LED接口上。
■网友
很简单啊 。首先软件寄存器(也就是写驱动会用到的那个硬件地址)适合硬件逻辑一一对应的,你说的一个寄存器的最低四位映射到了4个LED,那是因为32位的寄存器至少可以分别控制32个LED,如果再加寄存器岂不是浪费。当然如果你非要用4个软件寄存器,那么你在建立IP的时候就建立4个32位软件寄存器,然后你用每一个32位寄存器的任意一位去控制一个LED就可以了,比如:LED1 = slv_reg0;LED2 = slv_reg1;LED3 = slv_reg2;LED4 = slv_reg3;所以说这并不是Linux驱动的问题,而是你硬件支持不的事情,你的硬件设计了多少个软件寄存器,那么驱动应该(而且是必须)根据这些寄存器去控制,具体的控制逻辑必然要遵循你硬件设计逻辑。驱动仅仅是配合硬件而已。
■网友
使用/dev/mem或者UiO,这俩种方法各有优缺点
■网友
最近我也遇到这个问题~ 同求


    推荐阅读