天嵌 ARM开发社区

 找回密码
 注册
查看: 2842|回复: 4

s3c2410_gpio_cfgpin解读疑问

[复制链接]
菜鸟学ARM 发表于 2012-3-14 08:13:40 | 显示全部楼层 |阅读模式
在看Embedsky_gpio.c的时候,刚开始就卡住了

for (i = 0; i < 4; i++)
        {
                s3c2410_gpio_cfgpin(gpio_table[i], gpio_cfg_table[i]);
                s3c2410_gpio_setpin(gpio_table[i], 0);
        }
当i=0的时候,
s3c2410_gpio_cfgpin(gpio_table[0], gpio_cfg_table[0]);
即s3c2410_gpio_cfgpin(37,( 01<<10));

但是进入到s3c2410_gpio_cfgpin函数里面之后:
对于这一段有些疑问
switch (function) {
        case S3C2410_GPIO_LEAVE:
                mask = 0;
                function = 0;
                break;

        case S3C2410_GPIO_INPUT:
        case S3C2410_GPIO_OUTPUT:
        case S3C2410_GPIO_SFN2:
        case S3C2410_GPIO_SFN3:
                if (pin < S3C2410_GPIO_BANKB) {
                        function -= 1;
                        function &= 1;
                        function <<= S3C2410_GPIO_OFFSET(pin);
                } else {
                        function &= 3;
                        function <<= S3C2410_GPIO_OFFSET(pin)*2;
                }
        }
就是说fuction传进来的值为(01<<10),意思是将GPB5设置为输出(00为输入,01为输出,芯片手册上有)
但是进入swith我们发现没有一个能匹配的值。

还有就是void __iomem *base是什么

embedsky_lhh 发表于 2012-3-14 10:09:33 | 显示全部楼层
        con  = __raw_readl(base + 0x00);
        con &= ~mask;
        con |= function;

        __raw_writel(con, base + 0x00);
function他一般不需要进switch处理的,__iomem 就是声明一IO内存。
回复

使用道具 举报

 楼主| 菜鸟学ARM 发表于 2012-3-14 10:20:59 | 显示全部楼层
那这段在这里有什么作用呢,在什么时候会进入到switch里面呢
回复

使用道具 举报

embedsky_lhh 发表于 2012-3-14 11:52:12 | 显示全部楼层
菜鸟学ARM 发表于 2012-3-14 10:20
那这段在这里有什么作用呢,在什么时候会进入到switch里面呢

比如 s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPB5_OUTP);
       和s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPIO_OUTPUT);
效果一样的,而前者在switch中就没有case对应,后者就有,但最后赋给GPBCON寄存器的值还是同一个,不知道我这样讲你明白了没
回复

使用道具 举报

friendpy 发表于 2012-3-14 19:08:14 | 显示全部楼层
我明白了,谢谢版主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-4 13:19 , Processed in 2.027838 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表