前期

本博客是根据Hi3521A/Hi3520DV300硬件接口用户指南.pdf(其它都一样)写的,具体信息请参考文档,文档下载:https://download.csdn.net/download/u012478275/11264057

一、GPIO的配置

GPIO的设置一般为三步:1 设置gpio端口复用、2 设置GPIO口的方向、3 读取或者写入GPIO值;第一步不是每个GPIO口都是要配置的,如果你设置的GPIO端口有复用功能,那么你需要对GPIO对应复用寄存器进行配置,例如:文档中GPIO5_5是有复用功能的,0:PWM_OUT0  ; 1:GPIO5_5,所以把复用寄存器设置为1就是表示为GPIO5_5;但有些GPIO端口是没有复用功能的,例如GPIO0_0,这个就不需要复用寄存器的设置;

1、设置gpio端口复用

     所谓复用,就是指一个端口能同时干很多事,但是具体你要求他干啥,是需要设置的,这就是管脚复用寄存器的作用。
举个例子,如果我们想设置GPIO5_5,需要首先找到对应的管脚复用寄存器地址;通过手册查询,如果你想让这个管脚作为io口使用,需要给复用控制寄存器muxctrl_reg54这个寄存器里写0x01;管脚复用寄存器的基地址为0x120f_0000,muxctrl_reg54的偏移地址0xD8,所以这个寄存器的地址为0x120f00D8;

通过HIS自带的himm命令输入以下即可:
himm 0x120F00D8 0x01;

这样GPIO5_5对应管脚的功能就设置为了IO口,还有一个问题需要注意:在设置寄存器的时候要查看该寄存器其他bit位的作用,不要盲目的直接设置你需要设置的bit位,可能会其他bit给清除了,所以最好的做法是先读出寄存器的值,然后或上设置的位的值,再设置寄存器,这样就不会改变其他bit位的值;

2 设置GPIO口的方向

所谓方向,就是你是把io做输入用还是输出用。比如如果你的板子外接了个电池模块,你希望电池模块在没电的时候,能够给你的板子一个信号,告诉你没电了,这时你就需要将io口作为输入使用。反过来,如果你需要告诉外接的什么设备什么事情,那就要将io口做输出,设置GPIO口的方向,实际上就是写 GPIO_DIR寄存器。同样的,首先需要找地址,对于GPIO5的基地址为:0x121A_0000;GPIO_DIR的偏移地址为0x400,得到GPIO5_5的寄存器地址为0x121A_0400;然后GPIO_DIR寄存器里有8位,每一位对应一个GPIO的方向,如果你想把GPIO5_5的方向设为输出,则需要把BIT5置1;

输入命令:himm  0x121A0400  0x20(二进制 0010 0000)

3 读取或者写入GPIO值

GPIO_DATA为GPIO数据寄存器,用来对输入或输出数据进行缓存;当配置GPIO_DIR中对应位为输出时,写入GPIO_DATA 寄存器的值将会输出到相应的管脚(注意需要配置正确的管脚复用);如果配置为输入时,将会读取相应输入管脚的值。

注意:当GPIO_DIR相应的比特配置为输入时,有效读取的结果将返回管脚的值;当配置为输出的时候,有效读取的结果将返回写入的值。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]的操作有效。

同样的,首先需要找地址,对于GPIO5的基地址为:0x121A_0000;GPIO_DATA 的偏移地址为0x3FC,得到GPIO5_5的寄存器地址为0x121A_03FC,如果你想把GPIO5_5写入值为1时,则需要把BIT5置1;

输入命令:himm 0x121A03FC 0x20(二进制 0010 0000)

二、PWM 管脚配置

上面也说了,对于gpio端口复用功能,可以通过配置复用寄存器muxctrl_reg54,把这个gpio端口配置为PWM_OUT0的功能,配置为PWM管脚功能的歩聚:1、配置gpio复用;2、设置CORE PWM 参数;3、使能CORE 对应的PWM;

1、配置gpio复用

按照上面说明,只需要把muxctrl_reg54复用寄存器配置为0,即为PWM_OUT0功能,

执行命令:himm 0x120F00D8 0x00

2、设置CORE PWM 参数

根据所需的PWM 输出频率和占空比,计算出对应的PWM 计数周期数和高电平计数值。
计数周期数计算公式为:
    pwm_ period = (24000000 / Freq) −1
高电平计数值计算公式为:
    pwm_ duty = (24000000/ Freq)*duty −1

例如,芯片CORE电源调压控制由PWM0信号控制,如果需要PWM0 输出频率为
200KHz, 占空比为75%,配置步骤如下:

Pwm_period=(24000000/200000)-1 = 119
Pwm_duty=(24000000/200000) x 0.75-1=89

设置CORE PWM 参数:设置PERI_PMC0 [15:0]=0x77, PERI_PMC0 [31:16]=0x59;

PCM的基地址为0x120E_0000,PERI_PMC0的偏移地址:0x0000

执行命令: himm 0x120E0000  0x00590077

3、使能CORE 对应的PWM

使能CORE 对应的PWM: 设置PERI_PMC4 [0]=1;

PCM的基地址为0x120E_0000,PERI_PMC4的偏移地址:0x0010

执行命令:himm 0x120E0010 0x01

PERI_PMC4

如果想通过代码操作GPIO,请查看博主文章:https://blog.csdn.net/u012478275/article/details/94125742

海思芯片上GPIO操作相关推荐

  1. 从零开始在海思芯片上部署uboot、kernel、rootfs、mpp

    前言 本文介绍的是拿到海思芯片的开发板和海思的SDK开发包,在裸机上部署uboot.kernel.rootfs.mpp的过程,其中不涉及uboot.kernel.rootfs.mpp的细节,主要是介绍 ...

  2. 在海思芯片上使用GDB远程调试

    0.载GDB安装包,下载地址:Index of /gnu/gdb,使用8.2版本 1.见下面链接: 在海思芯片上使用GDB远程调试_大橙子疯的博客-CSDN博客_海思gdb调试 和 arm-linux ...

  3. 海思3559AV100上运行自己训练的yolov3

    1.简介 现在海思芯片上只支持将caffemodel转成wk文件,然而网上也没有caffe-yolov3,只能使用darknet-yolov3进行训练,然后将模型文件转换成caffemodel文件,再 ...

  4. 海思芯片部署MPP并验证功能

    1. 前期准备 1.1搭建好开发环境: 1.这里说的是以个人电脑进行开发:安装好虚拟机,在虚拟机中搭建好nfs服务器,确保开发板可以挂载上虚拟机: 2.确保开发板和PC可以通过串口通信: 1.2熟悉海 ...

  5. 海思3559A上编译Valgrind源码操作步骤

    注:按照以下步骤可以在海思板子上正常编译valgrind源码并生成valgrind可执行文件,但可能还不能在海思板子上正常使用. 1. 从http://valgrind.org/downloads/? ...

  6. 海思3559A上编译GDB源码操作步骤及简单使用

    1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新稳定版8.3,即gdb-8.3.tar.gz,解压缩: 2. 在gdb-8.3目录下,创建一个build.sh脚本文件,内容如下 ...

  7. 海思3559A上编译OpenCV4.1.0源码操作步骤

    1. 从https://github.com/opencv/opencv/releases 下载opencv源码opencv-4.1.0.zip并解压缩: 2. 修改最顶层的CMakeLists.tx ...

  8. 海思3559A上编译LIVE555源码操作步骤

    1. 从http://www.live555.com/liveMedia/public/ 下载live.2019.06.28.tar.gz,并解压缩: 2. 生成静态库,拷贝一份config.arml ...

  9. 海思3559A上编译FFmpeg源码操作步骤

    1. 从https://github.com/FFmpeg/FFmpeg/releases 下载你需要的版本: 2. 因为ffmpeg编译选项较多,为了更方便的了解有哪些选项,可将编译选项写入到一个文 ...

最新文章

  1. 【转自知乎】:localhost、127.0.0.1 和 本机IP 三者的区别?
  2. python爬虫框架实例项目_python爬虫框架scrapy实例详解
  3. SpringMVC源码——未完待续
  4. 独家揭秘!阿里大规模数据中心的性能分析 1
  5. Boost:Porthopper服务测试程序
  6. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结
  7. IOS的 testflight测试设置
  8. Elasticsearch 5.6.5 安装head插件
  9. RVC使用指南(四)-集群状况
  10. Pig 实现关键词匹配
  11. HDFS Archival Storage
  12. svn中文语言包安装(最详细步骤)*
  13. 如何在古董级IPAD上修改植物大战僵尸游戏金币
  14. 服务器显示共享文件夹的图标,Win7共享文件夹上的小锁图标怎么关闭?
  15. 腾讯校招都会问些什么?| 五面腾讯(Java岗)经历分享
  16. 转:SWOT分析法与职业生涯规划
  17. 学会这两招,你就知道怎样图片转文字
  18. 前端页面查看PDF文档内容总结
  19. 上传下载永不限速之文叔叔
  20. 大学生mysql实训心得_大学生实训心得体会范文(精选3篇)

热门文章

  1. 【Proteus仿真】【STM32单片机】火灾监测报警系统设计
  2. 笨鸟先飞学编程系列之三 函数(转自聚星亭)
  3. 男人衬衫讲究雅致简单
  4. FL Studio for 21 Windows版 Producer Edition v21.0.3 Build 3517官方中文免费终极解锁版下载
  5. Pandoc latex 转 word (docx)
  6. Oracle数据库新建默认表空间并指定用户
  7. (二)open image dataset v5 数据集解析
  8. 支付宝小程序跳转H5连接(无需添加白名单)
  9. QR 二维码布局(五)
  10. MS17-010 漏洞永恒之蓝445漏洞复现