MT7628/MT7688平台上如何配置任何一个管脚为GPIO模式

来源:互联网 发布:mysql 不等于空 编辑:程序博客网 时间:2024/06/07 05:38

这里必须吐槽下:MTK的东西坑很多,MTK的工程师吃屎的,给出的demo就是一个废物。

回归正题,MT7688AN平台的管脚是复用的,很多时候需要把某个管脚去设置为GPIO,去控制LED,或者读取GPIO的电平。

注意:本文适用非OPENWRT平台,后续会推出OPENWRT平台

设置一个管脚为GPIO的步骤分为:

1.配置管脚功能为GPIO模式

2.配置管脚GPIO为输出模式/输入模式

3.写GPIO 数据寄存器/读GPIO数据寄存器


看似很简单,但需要理解MTK的 相关文档。本文使用系统自带的reg工具配置寄存器。

举个例子,我们要控制GPIO#43。

经查阅《MT7628_Datasheet.pdf》,得知GPIO#43为管脚P0_LED_AN,


1.配置管脚功能为GPIO模式,

经查阅《MT7628_ProgrammingGuide_20140428(E2).pdf》,管脚P0_LED_AN的复用功能是由System Control的寄存器GPIO2_MODE控制,

当GPIO2_MODE的3:2位为1时即为GPIO模式







使用reg配置寄存器GPIO2_MODE:

reg s 0

reg w  64  4


2.配置GPIO#43 为输出模式

经查阅《MT7628_ProgrammingGuide_20140428(E2).pdf》,GPIO#43 有GPIO_CTRL_1控制:


GPIO_CTRL_1的地址为10000604,使用如下配置:

reg w  604 800


3.写数据

经查阅《MT7628_ProgrammingGuide_20140428(E2).pdf》,GPIO#43 有GPIO_DATA_1控制:


GPIO_DATA_1的地址为10000624,

写0

reg w  624 0

写1

reg w  624 FFFFFFFF

这是可以看到该管脚的电平发生变化了

注意:GPIO必须做上拉或者下拉

说明:本文的控制方法是忽略了对相关GPIO的影响,稍微改进就可以用到项目中