前言

海思提供的himm工具,能在linux命令行中,直接对gpio进行操作,对于调试来说非常方便

himm的位置

如果已经按照要求完整地编译了海思的sdk,那么这个目录下,将生成许多工具

osdrv/pub/bin/board_uclibc

主要关注这两个,可以发现本质上himm就是btools

-rwxrwxrwx 1 root root   45564  7月 13 10:41 btools
lrwxrwxrwx 1 root root       6  7月 13 10:41 himm -> btools

因此将btools放到板子上,并且建立链接,做好之后,如下

~ # ls /usr/sbin/btools -l
-rwx------    1 root     root         45564 Jan  1 08:11 /usr/sbin/btools
~ # ls /usr/sbin/himm -l
lrwxrwxrwx    1 root     root             6 Jan  1 08:11 /usr/sbin/himm -> btools

引脚的设置

本次实验的目的,是自由地设置uart3的rx和tx引脚输出高电平和低电平,因此先找引脚相关的地址、寄存器说明信息

取消复用功能

首先看这个文档的引脚复用章节,目的是要将复用功能改为普通GPIO功能

因为一般的引脚,都默认是复用功能,而不是作为普通的GPIO使用的

ReleaseDoc\zh\00.hardware\chip\Hi3531DV100_PINOUT_CN.xlsx

在第三个表:管脚复用寄存器中,搜索UART3,即可找到这两个引脚,根据它的说明,这个地址0x120F0218、0x120F021C设置为1,将作为串口功能使用,设置为0,就是普通的GPIO功能

因此,在Linux命令行中执行以下命令,第一条设置UART3_RXD为GPIO23_6,第二条设置UART3_TXD为GPIO23_7

himm 0x120F0218 0
himm 0x120F021C 0

此处可以看到它的打印信息,告诉我们从默认的1变为0了

~ # himm 0x120F0218 0
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:himm
0x120F0218: 0x00000001 --> 0x00000000
[END]
~ # himm 0x120F021C 0
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:himm
0x120F021C: 0x00000001 --> 0x00000000
[END]

设置引脚的方向为输出

根据经验,第一步先设置引脚的方向寄存器为输出,第二步设置数据寄存器,找到如下文档,其它的芯片也类似,这个目录下文档不多

ReleaseDoc\zh\00.hardware\chip\Hi3531DV100 H.265编解码处理器用户指南.pdf

找到 外围设备 章节,找到 GPIO ,首先它告诉我们GPIO分很多组,每组都有自己的基地址,因此要找这个基地址,在 14.5.4 GPIO 寄存器概览 中,找到GPIO23的基地址为0x122C_0000

然后要找方向寄存器和数据寄存器的偏移地址,及每一位的说明

首先找到GPIO方向控制寄存器,它的偏移地址为0x400,它的地址也就是 0x122C0000 + 0x400 = 0x122C0400

接下来,看这个寄存器怎么设置,根据它的描述,0为输入,1为输出,一共有8个比特位,分别对应GPIO23_0到GPIO_7,低位与低位相对应

我们想让GPIO23_6和GPIO23_7作为输出引脚,因此要将此寄存器的最高2位设为1,也就是0xC0

在linux命令行中,输入

himm 0x122C0400 0xC0

打印信息如下

~ # himm 0x122C0400 0xC0
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:himm
0x122C0400: 0x00000000 --> 0x000000C0
[END]

设置数据寄存器

海思的数据寄存器跟一般的有点不一样,它设置了一个类似写保护的功能,也就是说,想写寄存器,先得打开写保护

先看一下海思的原文,个人感觉第一次看可能有点难懂,不知道到底说的是什么,那我再分析一下

GPIO_DATA 寄存器利用 PADDR[9:2]实现了读写寄存器比特的屏蔽操作。该寄存器对应 256 个地址空间。PADDR[9:2]分别对应 GPIO_DATA[7:0],当相应的 bit 为高时,则可以对相应的位进行读写操作;反之,若对应 bit 为低则不能进行操作。例如:

  • 若地址为 0x3FC(0b11_1111_1100),则对 GPIO_DATA[7:0]这 8bit 操作全部有效。

  • 若地址为 0x200(0b10_0000_0000),则仅对 GPIO_DATA[7]的操作有效。

往上翻一下,找到GPIO的偏移地址,发现数据寄存器GPIO_DATA的偏移地址并不是一个固定值,而是0x000~0x3FC

二进制为 0000 0000 0011 1111 1100,发现低2位[0-1]都是0,然后[2-9]位,可以是0或1

这就是它的保护机制,要想设置某一个位,必须将此处的偏移地址对应位设为1

以GPIO23_6和GPIO23_7举例

  • 想要设置GPIO23_6,它是第7位,因此偏移地址为0100 0000 00

  • 想要设置GPIO23_7,它是第8位,因此偏移地址为1000 0000 00

  • 想要两位一起设置,7和8都选中,因此偏移地址为1100 0000 00

现在两个口一起设置,偏移地址换算成16进制就是0x300,因此在Linux命令行中,输入

himm 0x122C0300 0xFF

为什么设置0xFF,因为省事,其它位是被屏蔽的,因此只会将我们需要的位设为1

虽然打印信息告诉我们从0x00变为0xff,但是我们再设为0,看一下打印信息

~ # himm 0x122C0300 0xFF
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:himm
0x122C0300: 0x00000000 --> 0x000000FF
[END]
~ # himm 0x122C0300 0x0
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:himm
0x122C0300: 0x000000C0 --> 0x00000000
[END]

发现是从0xc0变为0x00,我们之前要设数据寄存器为1100 0000,不就是0xc0吗,说明这样是没用问题的

海思himm工具的使用相关推荐

  1. 海思himm的使用:

    在装载文件系统的时候,himm就已经加入了,可以到控制台中输入himm,会打印出它的使用方式,和使用办法. himm一般是sonser初始化使用的,比如在mpp/ko/load3516a文件为例: 这 ...

  2. 在ubuntu16.0403X64上安装海思交叉编译工具链

    博主原文如下:https://blog.csdn.net/m0_37182543/article/details/80315969 使用sudo apt-get install lib32z1,发现装 ...

  3. 海思I2C工具i2c_read使用地址的规则

    使用i2c_read工具时,该使用7位地址还是8位地址时遇到了一点小麻烦,记录一下. i2c_read地址要使用8位,最后一位填0即可.

  4. 使用海思自带的i2c工具访问i2c设备

    1 前言   linux下开发i2c设备驱动,一般分为两个阶段,第一阶段是驱动实现,第二阶段是调试.驱动实现即是对i2c设备的正确访问,包括读.写.控制.而第二阶段,一般用于需要调整参数的i2c设备, ...

  5. 海思3515,交叉编译opencv2.4.9

    编译环境: 我使用的是vmare虚拟机下的redhat9.0,交叉编译工具为海思3515官方配的编译工具gcc-3.4.3-uClibc,opencv版本为2.4.9.cmake版本为3.1.1,使用 ...

  6. 海思开发板遇到的问题启发性的链接

    网络问题 Failed to start Raise network interfaces after upgrading to 16.04 networking - Failed to start ...

  7. 海思开发板hi3559移植带opengl的qt并成功运行血泪史

    几个必不可少的流程:环境linux系统 1,安装海思交叉编译工具.2,编译qt库,配置qt编译构件,拷贝qt库到板子3,编译海思sdk(为编译gpu做准备).4,编译海思gpu kernel.5,修改 ...

  8. 海思HI3518e开发板 SDK安装使用

    已经完成了海思sdk包的相关实验, 1 安装海思交叉编译工具链由于工具链是32位的,64位的ubuntu需要安装32位的兼容包: 2 中间遇到问题,使用aptitude安装lib32z1和lib32s ...

  9. 海思3518ev200学习记录(2) - 交叉编译官方webRTC

    系列文章目录 海思3518ev200学习记录(1)- 根据用户手册烧录系统镜像 海思3518ev200学习记录(2) - 交叉编译官方webRTC 海思3518ev200学习记录(3) - 编译 am ...

最新文章

  1. 关于卷积的6个基本知识
  2. eax ax ah al
  3. 最大似然估计MLE和最大后验估计MAP理解
  4. java list 转 scala_Java与Scala集合互转
  5. python加密程序_Python加密程序
  6. (数据库系统概论|王珊)第一章绪论-第三节:数据库系统的结构
  7. Collections和Collection的区别:
  8. SQL:postgresql一条sql语句查询多个count
  9. 测试游戏平均帧率的软件,游戏帧数,游戏帧数测试软件
  10. webqq机器人java_一步一步来做WebQQ机器人-(二)(第一次登陆)
  11. 一套SCDM脚本建模与二次开发攻略
  12. win10和win11系统,手机或者其他设备连接不上电脑热点,一直在转圈圈的解决方法
  13. commit 和 push 的临界点
  14. 网盘上传文件服务器失败原因,百度网盘上传文件一直失败是什么情况?具体解决方法...
  15. Swing界面设计工具
  16. 尝试阅读和理解 PairRE: Knowledge Graph Embeddings via Paired Relation Vectors
  17. SQL Server Note [vaynexiao]
  18. 做事先做人 做人先立德
  19. BI_开发_问题:ORA-26002: Table DWH.W_XACT_TYPE_D has index defined upon it.
  20. 学习工行MySQL研发管控和治理实践的过程

热门文章

  1. App软著申请过程全记录
  2. 新版短视频去水印小程序源码 支持多家短视频平台去水印
  3. Monkey测试时禁止下拉状态栏
  4. Impala/Hive现状分析与前景展望【转载】
  5. 消灭电脑的弹窗广告和浏览器广告
  6. 重装win10、ubuntu和双系统
  7. 如何实现消息功能_如何实现变频器一拖二甚至一拖多功能?
  8. 计算机毕业设计SSMHY口腔门诊系统【附源码数据库】
  9. 我能贡献什么-《卓有成效的管理者》第3章
  10. 求职信高中生计算机,高中生求职信模板 求职信