海思配置及控制GPIO

GPIO配置

在使用某个GPIO之前,需要确保你所使用的GPIO已经完成了正确的配置,具体的配置需要查看你所使用的海思芯片提供的管脚定义表格,例如下图:
海思配置及控制GPIO_第1张图片
该表格指定了需要配置某个GPIO对应的寄存器以及每一位的说明,表格也会给出默认的配置值,但是建议还是自己检查寄存器是否配置正确。

寄存器读写

海思提供了工具btools,默认在系统根目录的bin文件夹下,提供了可进行寄存器操作的工具。直接输入btool即可查看相关指令

/ # btools
-h
        print help msg
-i
        install board tools
-u
        uninstall board tools
-V
        print version
------------------------------------------------------
 himc       : memory clear
 himd       : memory display (8bit)
 himd.l     : memory display (32bit)
 himm       : memory modify
 hivd       : video dump
 himdb      : video dump
 hiddrs     : ddr statistic
 i2c_read   : i2c device read
 i2c_write  : i2c device read
 ssp_read   : ssp device read
 ssp_write  : ssp device read
  • 其中显示的himc、himd、himd.l、himm这几个工具就提供了寄存器读写的功能,具体的每个工具的参数和定义百度即可,有很多的说明,这里就不一一赘述,只说明需要使用的工具;
  • 需要注意的是,在某些板子上,这几个工具不是默认安装了的,根据上图btool的说明,需要执行btools -i进行安装,安装完成后就可以使用了;
  • 接下来主要使用himd.l和himc这两个工具
    • himd.l:
      • 参数1:address,必选
      • 参数2:length,可选
      • 从address开始,以小端方式打印length字节长度的内容。
    • himc:
      • 参数1:address,必选
      • 参数2:length,必选
      • 参数3:value,必选
      • 从address开始,把 length字节长度的内容全部设置为value。

第一步:使用himd.l检查寄存器是否配置正确:

/ # himd.l 0x80040000 4
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himd.l
====dump memory 0x80040000====
0000:  da0cd8d9 de08d0dd 7774665f 0782819f
[END]

以上面的图示为例,假设我们需要查看的寄存器地址为0x80040000,长度为32位,使用himd.l 0x80040000 4表示显示0x80040000开始的4字节长度的内容,但是himd.l会默认显示16字节一行的内容,所以我们只需要管前面的4个字节:da0cd8d9,忽略后面的内容。
明显当前寄存器的值并不是我们设想中需要的0x00001000,接下来就需要用到himc进行寄存器修改

第二步:使用himc修改寄存器:

假设需要将0x80040000这个寄存器的值修改成0x00001000,执行如下命令即可:

/ # himc 0x80040000 4 0x00001000
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himc
====clear memory 0x80040000, length 4====
00000:  00 00 00 00                                      |....            |
[END]

再次调用himd.l工具查看寄存器内容,可以看到寄存器已被修改

/ # himd.l 0x80040000 4
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himd.l
====dump memory 0x80040000====
0000:  00001000 00001000 00001000 00000671
[END]

注意:需要根据芯片提供的资料确定你需要修改的寄存器,以上地址仅为范例,切勿改错

GPIO读写

完成了上述操作之后,GPIO已经完成了配置,接下来就能进行常规的GPIO控制了:

(1)将要操作的 GPIO 编号 export: 
echo N > /sys/class/gpio/export  
(2)在控制台使用 echo 命令设置 GPIO 方向(in or out):
echo out > /sys/class/gpio/gpioN/direction
(3)在控制台使用 cat 或 echo 命令查看 GPIO 输入值或设置 GPIO 输出值: 
查看输入值:cat /sys/class/gpio/gpioN/value 
输出低:echo 0 > /sys/class/gpio/gpioN/value 
输出高:echo 1 > /sys/class/gpio/gpioN/value 
(4)在控制台使用 echo 命令将操作的 GPIO 编号 unexport: 
echo N > /sys/class/gpio/unexport 

你可能感兴趣的:(海思)