绵阳市淘金网络科技有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00143- 858031
邮箱:service@zmkuykj.com

当前位置:首页 >> 产品展示 >> 默认分类 >> 正文

海思芯片.通用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复用的管脚上。

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(0011_1111_1100) ,则对 GPIO_DATA[7:0]这 8bit操作全部有效。
操作方式: 基地址+偏移地址,0x3FC就为偏移地址,如果对该地址的寄存器操作则对所有8个IO的控制有效。
若地址为 0x200(0010_0000_0000) ,则仅对 GPIO_DATA[7]的操作有效。
另一个关键寄存器 ,GPIO_DIR 方向寄存器 偏移地至 0x400

继续举例子:
比如控制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 0x 2
 himm 0x 0xFF
附图:

3G_RST = RMII_TXD0 功能1 : GPIO0-2
3G_Power = RMII_TXEN 功能1: GPIO0-1
复用寄存器基地址 0x200F 0000

偏移地址