免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1960 | 回复: 0
打印 上一主题 下一主题

请教ioremap之后操作硬件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-21 11:52 |只看该作者 |倒序浏览
我想测试一下经过ioremap之后的地址是否可以直接对寄存器直接操作。
测试3个功能:
1、是否可以对一个物理地址进行多次ioremap
2、ioremap返回的地址是否可以直接对物理寄存器进行操作
3、多个虚拟地址是否都可以正常操作一个物理地址。
先放上代码

#define ULCON1     ((volatile unsigned *)0x50004000)

unsigned long* vaddr1;
unsigned long* vaddr2;


    u32 tmp;
    vaddr1 = ioremap(ULCON1,4);
    printk("vaddr1:%x:%x\n",vaddr1,*vaddr1);
    *vaddr1=0xff;
    udelay(100);
    printk("*vaddr1:%x\n",*vaddr1);
    printk("ioread32:%x\n",ioread32(vaddr1));
    vaddr2 = ioremap(ULCON1,4);
    printk("vaddr2:%x:%x\n",vaddr2,*vaddr2);
    tmp = ioread32(vaddr2);
    printk("tmp:%x\n",tmp);


这是测试能否操作寄存器的一段代码
我通过对同一个寄存器两次ioremap,得到两个虚拟地址vaddr1和vaddr2,他们都对应一个真实的物理地址ULCON1.
在第一个vaddr1处写入一个数6,然后再从vaddr2处读出来。
可是运行结果打印如下:
  1. vaddr1:c4812000:0
  2. *vaddr1:0
  3. ioread32:0
  4. vaddr2:c4814000:0
  5. tmp:0
复制代码


结果说明vaddr1根本没有改变寄存器ULCON1的值(*vaddr1:0)。

请教高人,这是什么原因。我需要做什么?
(补充:代码运行在嵌入式平台,芯片是s3c2440)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP