在一个嵌入式系统中使用最多的莫过于 通用输入输出 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

附图:

<ignore_js_op> 
<ignore_js_op> 
3G_RST  =  RMII_TXD0     功能1 : GPIO0-2

3G_Power = RMII_TXEN      功能1:    GPIO0-1

复用寄存器基地址 0x200F 0000

偏移地址
<ignore_js_op>

Hi35xx 通用GPIO 使用篇(板子3G电源控制脚说明)的更多相关文章

  1. [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...

  2. linux通用GPIO驱动,写GPIO文件不立即生效问题解决

    Linux开发平台实现了通用GPIO的驱动,用户通过,SHell或者系统调用能控制GPIO的输出和读取其输入值.其属性文件均在/sys/class/gpio/目录下,该目录下有export和unexp ...

  3. CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 广东职业技术学院  欧浩源 一.CC2530的引脚概述 CC2530微控制器采用QFN40封装,有40 个引脚.其中,有21个数字I/O端口,其中 ...

  4. 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 小蜜蜂科教 / 广东职业技术学院  欧浩源 [通用I/O端口视频教程:https://v.qq.com/x/page/x0793aol7us.ht ...

  5. NUC972当检测到sd卡时,在sd卡驱动中操作gpio开启sd卡的电源,解决sd卡因低电压有时识别不正常的问题

    1.根据硬件原理图,找到对应控制sd卡电源的gpio引脚,并在sd卡驱动文件中定义操作改该引脚的宏 2.在sd卡检测函数中,使用glib增加开sd卡电源的操作,如此当sd卡每次被检测到时,驱动中就会自 ...

  6. 通用GPIO模拟串口,提供源代码,本人经过测试OK(第一版)

    --------------------------serial.h------------------------------------------ #ifndef _SERIAL_H_ #def ...

  7. (一)GPIO 编程实验 LED 流水灯控制

    7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...

  8. WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)

    一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一)  小理论 WS2812B是一种智能控制LED光源,将控制电路 ...

  9. CC1310电源管脚

    对于48pin脚的CC1310而言,属于电源类的管脚如下: 上述电源类管脚的关系如下: 1 VDDS类管脚 VDDS类管脚包括VDDS.VDDS2.VDDS3和VDDS_DCDC四个管脚.其中VDDS ...

随机推荐

  1. Gogoing 场景调研(补)

    一.典型用户 蜗居在学校的大学生 二.场景描述 编号 用户故事 故事价值 (点数) 1 作为一名大学生,只知道学习 2 经常打游戏而无所事事的大学生 1.背景 (1)典型用户:张晨建 (2)用户的需求 ...

  2. 【贪心算法】POJ-3040 局部最优到全局最优

    一.题目 Description As a reward for record milk production, Farmer John has decided to start paying Bes ...

  3. Failed to execute request because the App-Domain could not be created. Error: 0x8007000e 存储空间不足,无法完成此操作。

    今天业务发现,服务器上的网站无法访问了. 页面报错: Server Application UnavailableThe web application you are attempting to a ...

  4. Alpha版本冲刺(三)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最 ...

  5. Scrum 项目4.0&&5.0

    MY—HR 成员: 角色分配 学号 博客园 4.0团队贡献分 5.0团队贡献分 丘惠敏 PM项目经理 201406114203 http://www.cnblogs.com/qiuhuimin/ 19 ...

  6. sqlsever实现更改字段名

    新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default '默认值' null ...

  7. js对象进行浅复制,深拷贝的方法

    js对象浅拷贝和深拷贝详解   本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷 ...

  8. 将博客搬至CSDN和和自己的网站

    将博客同步一份到CSDN去, CSDN博客地址:https://blog.csdn.net/klkfl ---------------- 分割线 2018-10-7 自己用typecho 搭建了一个博 ...

  9. Sysprep错误一则

    准备搭建一台基于Windows2008的域控,通过ISO文件装完系统后,照例使用Windows Update打全了补丁.同时,考虑到经常使用Powershell,所以手动再装上了PS5.1 .因为准备 ...

  10. 绿色计算大赛决赛 第二阶段 消息传递(斯坦纳树 状压dp+spfa)

    传送门 Description 作为公司老板的你手下有N个员工,其中有M个特殊员工.现在,你有一个消息需要传递给你的特殊员工.因为你的公司业务非常紧张,所以你和员工之间以及员工之间传递消息会造成损失. ...