先简单说下我要做的是什么:用XPS添加一个自定义led的IP核 然后把硬件bit流下载带fpga板子上,同时将linux系统移植到fpga板子上,通过编写linux下的led驱动程序 控制led灯亮。
这个led的ip核中有2个寄存器,原始设备物理地址是这样分配的
#define XPAR_LED_0_BASEADDR 0xCB400000
#define XPAR_LED_0_HIGHADDR 0xCB40FFFF
2个reg0和reg1寄存器偏移地址是这样的
#define LED_USER_SLV_SPACE_OFFSET (0x00000000)
#define LED_SLV_REG0_OFFSET (LED_USER_SLV_SPACE_OFFSET + 0x00000000)
#define LED_SLV_REG1_OFFSET (LED_USER_SLV_SPACE_OFFSET + 0x00000004)
之前xps里面生成库文件时候,会自动生成led核的读写寄存器函数LED_mWriteSlaveReg0(baseaddress,0,value)和
LED_mReadSlaveReg0(BaseAddress, 0)
至此,硬件部分结束。然后下面是驱动里面的:
#define REG_BASE XPAR_LED_0_BASEADDR
#define REG_HIGH XPAR_LED_0_HIGHADDR
static unsigned long reg_remapped_address;
const static unsigned long remap_size = REG_HIGH - REG_BASE + 1;
通过物理地址虚拟地址映射得到:
reg_remapped_address = (unsigned long ) ioremap(REG_BASE, remap_size);
好,现在的问题1是,我用LED_mWriteSlaveReg0(reg_remapped_address ,0,123)是否可以将123写到实际的寄存器reg0中?(实验灯不亮证明好像不行)。
我看网上有的说是用linux里面的writeb/w/l(123,reg_remapped_address ),问题2是这个write函数的参数是虚拟地址,它可以智能的找到led物理设备,并把123写到寄存器reg0里面吗?
问题3是,如果这2个方法都不行,正确的应该怎么做?急!急!
弄了好久都没结果,求帮助啊。我qq834370927! |