关于海思芯片上GPIO的操作

雨林霖 2020-07-30 14:53:44 3187

GPIO的设置一般为三步:1 设置gpio端口复用、2 设置GPIO口的方向、3 读取或者写入GPIO值;第一步不是每个GPIO口都是要配置的,如果你设置的GPIO端口有复用功能,那么你需要对GPIO对应复用寄存器进行配置。


例如:上图中的GPIO6_7是有复用功能的,文档中GPIO5_5是有复用功能的,0:VI5_DAT7,
1: GPIO6_7,所以把复用寄存器设置为1就是表示为GPIO6_7;但有些GPIO端口是没有复用功能的,这个就不需要复用寄存器的设置。
1、设置gpio端口复用
所谓复用,就是指一个端口有多种功能,但是具体你要求实现其中一种功能,是需要设置的,这就是管脚复用寄存器的作用。
举个例子,如果我们想设置GPIO6_7,需要首先找到对应的管脚复用寄存器地址;通过手册查询,如果你想让这个管脚作为io口使用,需要给复用控制寄存器muxctrl_reg55这个寄存器里写0x01;管脚复用寄存器的地址为0x120F00DC。
通过海思自带的himm命令输入以下即可:
himm 0x120F00DC 0x01;
这样GPIO6_7对应管脚的功能就设置为了IO口,还有一个问题需要注意:在设置寄存器的时候要查看该寄存器其他bit位的作用,不要盲目的直接设置你需要设置的bit位,可能会其他bit给清除了,所以最好的做法是先读出寄存器的值,然后或上设置的位的值,再设置寄存器,这样就不会改变其他bit位的值。
2、设置GPIO口的方向
设置方向,就是把io做输入用还是输出用。做输入与输出可以在原理图上看出,对与CPU是输出就是输出,输入就是输入。设置GPIO口的方向,实际上就是写 GPIO_DIR寄存器。同样的,首先需要找地址,对于GPIO6的基地址为:0x121B_0000;GPIO_DIR的偏移地址为0x400,得到GPIO5_5的寄存器地址为0x121B_0400;然后GPIO_DIR寄存器里有8位,每一位对应一个GPIO的方向,如果你想把GPIO6_7的方向设为输出,则需要把BIT7置1;


输入命令:himm 0x121B0400 0x80(二进制 1000 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]的操作有效。

命令输入:himm 0x121b0200 0x80 (二进制 10 0000 0000)
ok!

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 2 1 评论 打赏
评论
1个
内容存在敏感词
手气红包
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
雨林霖
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区