对HI3531的GPIO使用的再分析
在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口。看到论坛中经常有朋友问海思为什么没有提供GPIO驱动。其实不然。
在海思SDK xxx/osdrv/tools/board_tools/reg-tools-1.0.0/source/tools/下 提供了himm的读写工具源码。
你也可以根据himm的源码来写一个文件设备操作的驱动。毕竟轮子已经有了,我们就没必要再去造轮子了。
这个工具是用来 配置海思寄存器的。当然可以稍加改造或者在应用直接使用来控制通用寄存器。
根据海思提供资料 ,配置一个通用GPIO需要做如下工作。
1. 参考“管脚复用控制寄存器”配置管脚的相应位,使能需要使用的 GPIO管脚功能。(这块大家自己去查复用寄存器表)
2. 配置寄存器 GPIO_DIR,选择 GPIO是作为输入还是输出。
GPIO用于输入:外部信号通过 GPIO 管脚送进来,此时可通过 GPIO_DATA 寄存器查看输入信号值。
注意:输入的信号会同时送到和 GPIO复用的管脚上。
GPIO用于输出:先向 GPIO_DATA 寄存器写入相应值后,再通过 GPIO输出写入值。
GPIO8 0x201D_0000
GPIO7 0x201C_0000
GPIO6 0x201B_0000
GPIO5 0x201A_0000
GPIO4 0x2019_0000
GPIO3 0x2018_0000
GPIO2 0x2017_0000
GPIO1 0x2016_0000
GPIO0 0x2015_0000
GPIOn对应的寄存器地址为:GPIOn基地址+该寄存器偏移地址。
下面是比较关键的一个问题:我们知道对GPIO_DATA的操作可以控制输出,如果DIR方向是输入,可以读取这个地址的值 。那么怎么进行位操作呢?
海思的手册给出如下解释。海思的DATA寄存器通过 一个10位的地址中的高8位进行位寻址。
比如我要操作
若地址为 0x3FC(0b11_1111_1100) ,则对 GPIO_DATA[7:0]这 8bit操作全部有效。
操作方式: 基地址+偏移地址 0x3FC就为便宜地址,如果对该地址的寄存器操作则对所有8个IO的控制有效。
若地址为 0x200(0b10_0000_0000) ,则仅对 GPIO_DATA[7]的操作有效。
另一个关键寄存器
GPIO_DIR 方向寄存器 偏移地至 0x400
下面举个栗子: (控制开发板3G电源)
比如控制GPIO0_1
基地址 GPIO0_BASE 0x2015_0000
GPIO_DIR = GPIO0_BASE + OFFSET(0x400) 0:输入 1:输出
则数据DATA寄存器地址 0b00_0000_1000 = 0x08
对了别忘了复用:
复用的基地址 0x200F0000 复用偏移地址 0x09c
该寄存器 bit0 控制复用 0 为GPIO 1为功能。
himm 0x200F009C 0
himm 0x20150400 2
himm 0x20150008 0xFF
附图:
3G_RST = RMII_TXD0 功能1 : GPIO0-2
3G_Power = RMII_TXEN 功能1: GPIO0-1
复用寄存器基地址 0x200F 0000
偏移地址
这是HI3531的/etc/init.d/rcS的内容,结合HIMM工具,我们分析一下。
#GPIO17 3~6
himm 0x200F0234 0
himm 0x200F0238 0
himm 0x200F023C 0
himm 0x200F0240 0
#GPIO17 DIR
himm 0x20260400 0x20
#GPIO17_5 BUZZER
himm 0x20260080 0x20
ifconfig eth0 192.168.0.140
ifconfig eth1 192.168.1.163
telnetd&
#GPIO17_5 BUZZER
himm 0x20260080 0x0
#GPIO17 3~6
himm 0x200F0234 0
himm 0x200F0238 0
himm 0x200F023C 0
himm 0x200F0240 0
这四行是定义GPIO17的3~6引脚为GPIO1的功能,即用作IO管理用。
地址计算为基地址0X200F0000, 再加上0X234, 定义GP17.3的地址。
#GPIO17 DIR
himm 0x20260400 0x20
这是定义GPIO17.5脚为输出引脚,即方向引脚。记住:0X400都是方向引脚,一个组只有一个寄存器
#GPIO17_5 BUZZER
himm 0x20260080 0x20
这里直接输出17_5的引脚为高电平,引脚为高,蜂鸣器开始响了。 0X20为0B0010_0000, 也就是BIT5, 管脚号是GPIO17_0~GPIO17_7,
这里的0x20260080 的数据寄存器
再加上偏移地址0X080, 计算方法为: 0X20260000 + (1 《 (5 + 2))
其中5为管脚号, 2为右移MASK地址PADDR[9:2]
#GPIO17_5 BUZZER
himm 0x20260080 0x0
在运行了网络配置和TELNET程序后,置GPIO17_5脚为低电平,关掉蜂鸣器。
对HI3531的GPIO使用的再分析的更多相关文章
- Node.js开发入门—HelloWorld再分析
在Node.js开发入门(1)我们用http模块实现了一个简单的HelloWorld站点,这次我们再来细致分析下代码.了解很多其它的细节. 先看看http版本号的HelloWorld代码: 代码就是这 ...
- Permutations II 再分析
记得第一遍做这题的时候其实是没什么思路的,但是第二次的时候,我已经有"结果空间树"的概念了.这时候再看https://oj.leetcode.com/problems/permut ...
- 再分析 返回值加引用&,const
本文主要分析,返回&,和返回值加const的作用. 返回& 定义一个数组模板: template<class T>class Array{ enum{size = 100} ...
- SparkHiveContext和直接Spark读取hdfs上文件然后再分析效果区别
最近用spark在集群上验证一个算法的问题,数据量大概是一天P级的,使用hiveContext查询之后再调用算法进行读取效果很慢,大概需要二十多个小时,一个查询将近半个小时,代码大概如下: try: ...
- CRM项目再分析建表
今天老师带着我们分析了一点项目的业务,我们就觉得有些地方呢 有一些不妥额地方,然后呢 我们就在原来表的基础上做了一些修改! 我们也把我们组的项目业务的工作分配了一下! 但是我们遇到了一个组员不和我们 ...
- ffmpeg tutorial01 再分析
如下图
- socket编程再分析(-)——基础
linux 网络编程-基础篇 0.Socket简介 socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Inter ...
- rpn网络结构再分析
这是rpn网络train阶段的网络结构图 rpn_conv1之前的网络是特征提取层,也是和fast rcnn共享的层.rpn_conv1是一层1*1的卷积,这一层是单独为rpn网络多提取一层特征,这一 ...
- 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_3 基于注解的自定义再分析
这里只需要 一是连接数据库的 二是映射的 注解是class的方式 dom4j技术获取xml的数据,这是xml的方式获取的下面几个关键的点 注解的方式回去dao类里面的几个主要的信息 User黄色的部 ...
随机推荐
- 【ASP.NET Core】MVC中自定义视图的查找位置
.NET Core 的内容处处可见,刷爆全球各大社区,所以,老周相信各位大伙伴已经看得不少了,故而,老周不考虑一个个知识点地去写,那样会成为年度最大的屁话,何况官方文档也很详尽.老周主要扯一下大伙伴们 ...
- Eclipse 配置运行Spark
本文主要记录Spark 在 Eclipse中报 找不到主类的问题.在新建Spark工程,然后add external jars 选择 spark-assembly-1.4.0-hadoop2.6.0. ...
- 【视频编解码·学习笔记】4. H.264的码流封装格式
一.码流封装格式简单介绍: H.264的语法元素进行编码后,生成的输出数据都封装为NAL Unit进行传递,多个NAL Unit的数据组合在一起形成总的输出码流.对于不同的应用场景,NAL规定了一种通 ...
- Snort初探
Snort初探 概念: Snort是一款开源的网络入侵防御系统(IPS),可以实时分析和记录网络数据包,你可以通过执行协议分析.内容搜索和匹配,从而发现各种网络攻击和可疑的探测.例如,缓冲区溢出.端口 ...
- [DeeplearningAI笔记]ML strategy_2_2训练和开发/测试数据集不匹配问题
机器学习策略-不匹配的训练和开发/测试数据 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.4在不同分布上训练和测试数据 在深度学习时代,越来越多的团队使用和开发集/测试集不同分布的数据来 ...
- Oracle-Linux安装配置python3.6环境
最近公司更换了linux系统的版本,从Ubuntu改为了oracle linux,相关的Python环境也要重新配置,记录一下基本配置的过程. 相关环境 系统:oracle linux7.3 系统自带 ...
- CSS中的字体属性和文本属性
1.CSS字体的属性 font 简写,作用是把所有的针对字体的属性设置在一个声明中 font-family 设置字体系列 font-size 设置字体尺寸 font-style 设置字体风格,ital ...
- sphinx的再创造coreseek的安装过程
CoreSeek详细安装过程:coreseek-3.2.14.tar.gz下载链接: http://pan.baidu.com/s/1o6DNesE 解压缩安装mmseg分词程序: .tar.gz c ...
- 下载vlc遭遇网络劫持
一次偶然的机遇,在公司下载"vlc播放器",下载之后安装完就变成了"搜狗手机助手".而且连续几次下载都是这样,我以为是我安装了搜狗输入法的缘故. ...
- Windows Azure Virtual Machine (34) Azure VM挂载WebDAV
<Windows Azure Platform 系列文章目录> 之前使用Azure VM,挂载box网盘.发现不能正常挂载,这里简单记录一下. 1.WebDAV的网络映射,需要WebCli ...