免费注册 查看新帖 |

Chinaunix

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

请教一个关于关于读写寄存器的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-17 09:36 |只看该作者 |倒序浏览
我看了一个程序,上面吧
.start =0x56000060,
.end   =0x56000068,   //GPGCON,GPGDAT,GPGUP三个寄存器地址空间
.flags =IORESOURCE_MEM,
这样的一个地址空间映射后,基地址赋给了s3c2410_key_base,然后在按键中断后,读取down = readw(s3c2410_key_base + 4); 这个是读取GPGDAT的值,没错吧?可是按键是和GPG0,GPG3,GPG5,GPG6,GPG7,GPG11相连的,GPGDAT是GPG口所有的io口的数据结存器么,这样读取GPGDAT是把GPG0、GPG1,GPG2,GPG3,GPG4,GPG5,GPG6。。。。。所有的数值都读取出来了么?



还有,定义了int pin = button_irqs->pin-S3C2410_GPIO_BANKG;其中button_irqs->pin就是S3C2410_GPG0,S3C2410_GPG3,S3C2410_GPG5,等和按键相连的GPIO口,
我想问下S3C2410_GPIO_BANKG是干什么用的?
最后读取的数据data =!(down & (1<<(pin & 0x0f)));  是怎么获取到该GPIO口的值的?
小弟硬件不太好,帮忙解释下不胜感激

论坛徽章:
0
2 [报告]
发表于 2010-07-17 10:23 |只看该作者
1,GPGDAT是个32位寄存器,比如GPG0只是其中一位,你可以去看一下它们的宏定义;
2,int pin = button_irqs->pin-S3C2410_GPIO_BANKG,这个S3C2410_GPIO_BANKG应该是作为一个基址,与button_irqs->pin做减法后结果pin是位数;
3.,这个是C语言基础吧...1<<(pin & 0x0f)是先取pin的低八位(设为N),然后。。。去翻C语言书

论坛徽章:
0
3 [报告]
发表于 2010-07-17 10:47 |只看该作者
获取到该GPIO口的值,上面已经定义了start =0x56000060,

通过指针1<<(pin & 0x0f)直接就得到了该GPIO口的值

论坛徽章:
0
4 [报告]
发表于 2010-07-17 10:48 |只看该作者
S3C2410_GPIO_BANKG是自己定义的GPIO,详情可参考其手册
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP