CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 8337|回复: 4

A20 gpio口控制,采用寄存器+linux驱动方式,可控制任意引脚

[复制链接]
发表于 2015-5-3 15:47:26 | 显示全部楼层 |阅读模式
本帖最后由 ahha007 于 2015-5-5 15:12 编辑

拿到板子之后,马上按照教程自己编译 kernel rootfs,下载到SD卡,可以运行,兴奋不已
之后就想怎么控制一个简单的 LED 灯。
我的方式查阅 芯片手册,根据寄存器来写。最后发现起始挺简单的

设置步骤如下:
1 .设置管脚输入或者输出 模式
2 .如果输入,可能还要加上拉
3 .写入输出数据 或者 读入输入数据

至于寄存器,则需要大家去翻阅芯片手册文档了。
简单地说下:
比如我要让 CB3 板子上的蓝灯 点亮

步骤如下:
1 查看原理图,找到 蓝灯 对应的 管脚为 PH21
2 寄存器映射
        #define PORT_REG_BASE                0x01C20800                //gpio 寄存器基地址
        porth_cfg = ioremap(PORT_REG_BASE + 0x104, 4);        porth_data = ioremap(PORT_REG_BASE + 0x10C, 4);
这些寄存器地址就得我们去看芯片手册才能知道了

3.设置输出模式

        /* 设置为输出 */
        *porth_cfg &= ~(0x7 << 20);
        *porth_cfg |= (0x01 << 20);

4. 输出 1
       *porth_data |= (1<<21);

就这么简单
,当然点亮一个 LED 灯只是起点,学会这种操作寄存器的方式,最重要的是我们可以自己控制任意引脚。这样就可以根据外围模块的接口协议,控制到相应的模块。

例如我刚刚用 两个 IO 口模拟出 I2C 时序,用来控制 TTP229 ,触摸按键模块,测试可行
代码我上传了,可以参考下

代码是 linux驱动框架的






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 2015-5-3 21:05:12 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

发表于 2015-5-4 20:45:22 | 显示全部楼层
不错哦
回复 支持 反对

使用道具 举报

发表于 2015-5-5 15:11:11 | 显示全部楼层
给力,赞赞赞
回复 支持 反对

使用道具 举报

发表于 2015-10-8 09:48:13 | 显示全部楼层
谢谢LZ呀,正研究这个呢
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-5-5 10:06 , Processed in 0.021585 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部