新塘N32926 操作GPIO 寄存器的坑
前段时间要使用新塘的N32926开发项目,需要使用到GPIO控制输入输出。本来很简单的东西,踩到了坑,特此记录下来。如果是需要看GPIO例程的,请查看新塘资料包的DEMO
1. 问题描述
以前也用过Stm32这类处理器,操作GPIO只要按标准来配置一下寄存器之类的就好了。
项目中需要使用GPC3,4,5,6用作LED的控制口。板子启动过程中可以看到灯先会全部亮起。在启动Linux后,使用bash进行GPIO读写,虽然可以设置为I/O模式,但是设置为输出模式时,改变输出值,万用表量测毫无反应。
后续还使用到了GPG7,9作为输入口,也出现了类似GPIO无反应的问题。
2. 问题分析定位和解决
首先检查‘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