打印
[技术问答]

【转载】新塘N32926 操作GPIO 寄存器的坑

[复制链接]
578|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LM莫|  楼主 | 2020-3-29 15:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. 问题描述
以前也用过Stm32这类处理器,操作GPIO只要按标准来配置一下寄存器之类的就好了。
项目中需要使用GPC3,4,5,6用作LED的控制口。板子启动过程中可以看到灯先会全部亮起。在启动Linux后,使用bash进行GPIO读写,虽然可以设置为I/O模式,但是设置为输出模式时,改变输出值,万用表量测毫无反应。
后续还使用到了GPG7,9作为输入口,也出现了类似GPIO无反应的问题。


使用特权

评论回复
沙发
LM莫|  楼主 | 2020-3-29 15:34 | 只看该作者
首先检查‘GPX n’在系统内编号是否有问题。新塘官方DEMO的README提示每个GPIO组有32个编址,百度到了一个资料说没有GPF,所以GPG直接接在GPE后面编号,这是要注意的,虽然这个错我一开始也没有犯。
README文档中,有一句这样的话:
The GPIO driver does not touch register MFSEL, and assumes the pin user application trys to control is configured as GPIO pin. In other words, the driver use the same pin must be unselect in kernel configuration.
Please make sure “menuconfig->device drivers->GPIO support->/sys/class/gpio” and “menuconfig->device drivers->GPIO support->W55FA92 GPIO support” are enabled in kernel configuration.
翻译过来就是,GPIO驱动不会检查复用寄存器的状态,默认认为操作的管脚已经配置为GPIO了。请确认kernel配置的时候GPIO功能已经打开了,并且相关引脚不要在kernel配置的时候复用为其它功能。
问题出现的原因其实全被包含在上面的那段话中。检查kernel的配置是毫无问题的。
后来使用了新塘提供的Keil DEMO,也就是无操作系统的程序,烧写GPIO的程序并运行,这几个管脚控制都毫无问题。说明管脚本身没有问题。
最后在师兄的指导下,使用操作系统SDK中自带的nvbitio程序,也就是对寄存器进行位操作的程序,查看了GPC的复用寄存器,发现GPC3 4 5 6都默认配置为了LCD显示屏的引脚。更改复用寄存器的值为GPIO配置后,问题解决。
对于后来使用的GPG7,9,上面这一招就不灵了。后来也是通过Keil的DEMO源码发现对于GPG管脚,会额外调用一个函数(见图1)。原来GPG7,9默认配置为了模拟音频之类的输入输出口,而且模拟管脚的复用是不归复用寄存器管的。因此按照DEMO内,对于GPG7,9的特殊操作,操作相应的寄存器,问题解决。

图1 Keil中DEMO对GPG的额外操作

使用特权

评论回复
板凳
LM莫|  楼主 | 2020-3-29 15:35 | 只看该作者
3. 问题解决的详细说明
首先就是具体管脚的复用寄存器对应的寄存器地址是什么。打开新塘的官方手册N3292x Design GuideX.pdf,检索GPCFUN0(我这里查到在84页),也就是GPC多功能寄存器0,找到这个寄存器的详细描述,以GPC3为例,如图2,可以看到:从15~12位(这是32位处理器,所以寄存器也是32位的)的每一位定义了GPC3的功能。因此把这4位都写成0即为GPIO功能。

图2 新塘手册中GPC3的多功能寄存器描述
同理,检索DEMO中出现的GPG7,9对应的REG_SHRPIN_AUDIO的AIN3_AEN和REG_SHRPIN_TOUCH的SAR_AHS_AEN两个位。找到对应寄存器的地址偏移(GPC0多功能寄存器为0x90),加上寄存器基址地址(0xb0000000),写入即可。


使用特权

评论回复
地板
晓伍| | 2020-4-6 15:54 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
5
八层楼| | 2020-4-6 15:55 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
6
观海| | 2020-4-6 15:55 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
7
guanjiaer| | 2020-4-6 15:55 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
heimaojingzhang| | 2020-4-6 15:55 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

447

帖子

3

粉丝