免费注册 查看新帖 |

Chinaunix

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

ARM GPIO物理地址与虚拟地址映射的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-02 15:26 |只看该作者 |倒序浏览
今天在阅读一个GPIO驱动程序的时候 遇到了寄存器映射的问题,后追踪到最底层的函数  S3C_ADDR(x) 函数 在源代码中有如下 一些宏定义:
我现在的问题是:
  #define S3C_VA_IRQ        S3C_ADDR(0x00000000)        /* irq controller(s) */
#define S3C_VA_SYS        S3C_ADDR(0x00100000)        /* system control */
#define S3C_VA_MEM        S3C_ADDR(0x00200000)        /* memory control */
#define S3C_VA_TIMER        S3C_ADDR(0x00300000)        /* timer block */
#define S3C_VA_WATCHDOG        S3C_ADDR(0x00400000)        /* watchdog */
#define S3C_VA_UART        S3C_ADDR(0x01000000)        /* UART */
这些宏定义中国的0x0x00000000,0x00100000。。。。是依据什么得出来的?
    请高手解答  谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-08-05 09:55 |只看该作者
我也感觉很迷糊

论坛徽章:
2
卯兔
日期:2013-09-22 20:08:052015亚冠之广州富力
日期:2015-05-18 17:31:30
3 [报告]
发表于 2011-08-14 07:43 |只看该作者
这个你应该去看你芯片的寄存器的SPEC,最终都是去写的某个控制寄存器的位。

论坛徽章:
0
4 [报告]
发表于 2011-08-15 17:44 |只看该作者
首先设定一个基准地址A(物理地址),这些寄存器在A中的偏移就是你所说的数值。
这些宏定义的都是虚拟地址,并且表示一个模块的控制器的起始地址,S3C_ADDR的值是0x30000000与基准地址进行线性计算的结果。

论坛徽章:
0
5 [报告]
发表于 2011-12-25 12:24 |只看该作者
我刚开始也觉得很迷糊,但是经过仔细的分析,我得到了下面的分布图C:\Documents and Settings\lenovo\桌面\11.jpg

论坛徽章:
0
6 [报告]
发表于 2011-12-25 12:26 |只看该作者
我大概画了画分布图

11.jpg (59.62 KB, 下载次数: 41)

虚拟储存器分布图

虚拟储存器分布图

论坛徽章:
0
7 [报告]
发表于 2012-03-20 17:27 |只看该作者
ding

论坛徽章:
0
8 [报告]
发表于 2012-03-21 14:57 |只看该作者
不懂,想了解,帮顶

论坛徽章:
0
9 [报告]
发表于 2012-10-27 16:09 |只看该作者
不错啊!就是要深入下去
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP