打印
[matlab]

求助:驱动中ioremap地址映射问题

[复制链接]
2188|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luckylong|  楼主 | 2012-5-3 20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先简单说下我要做的是什么:用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!

相关帖子

沙发
luckylong|  楼主 | 2012-5-4 10:19 | 只看该作者
:(没人遇到过吗?》

使用特权

评论回复
板凳
ailiann| | 2012-5-4 10:41 | 只看该作者
我没遇到过 o(︶︿︶)o 唉

使用特权

评论回复
地板
luckylong|  楼主 | 2012-5-4 16:47 | 只看该作者
:'(哎 谁遇到过啊?

使用特权

评论回复
5
manshui| | 2012-5-5 00:30 | 只看该作者
你为什么不直接用基地址,而要用map呢?我没有用过linux。一般裸机上,直接用
LED_mWriteSlaveReg0(XPAR_LED_0_BASEADDR  ,0,123),就可以,linux下也可以吧。只有你的baseaddr没有错

使用特权

评论回复
6
liedc| | 2012-5-5 11:36 | 只看该作者
楼主可以试一下,楼上的建议

使用特权

评论回复
7
luckylong|  楼主 | 2012-5-7 09:18 | 只看该作者
:)呵呵  我搞好了 不是地址原因。据说linux下把物理地址映射成内存虚拟地址才可以访问设备的。

使用特权

评论回复
8
luckylong|  楼主 | 2012-5-7 09:19 | 只看该作者
5# manshui
:)呵呵  我搞好了 不是地址原因。据说linux下把物理地址映射成内存虚拟地址才可以访问设备的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

0

粉丝