Note:本文纯技术探讨,不涉及商业机密,如有版权问题请联系处理。

目录

一、概述... 2

1.1、简介... 2

1.2、硬件特性... 2

1.3、应用场景... 2

二、MT7621 SOC GPIO.. 2

2.1、硬件结构图... 2

2.2、管脚功能... 3

2.2.1、GPIO.. 4

2.2.2、UART. 4

2.2.3、I2C. 4

2.2.4、JTAG.. 4

2.2.5、WDT_RST. 5

2.2.6、PERST_N.. 5

2.2.7、MDIO.. 5

2.2.8、RGMII 5

2.2.9、SPI 5

2.2.10、SD.. 6

2.3、互用脚工作原理... 6

2.3.1、引脚工作模式... 6

2.3.2、GPIO寄存器... 9

2.3.3、GPIO输入/输出模式控制寄存器... 16

2.3.4、GPIO极性控制寄存器... 16

2.3.5、GPIO数据寄存器... 17

2.3.6、GPIO数据设置寄存器... 17

2.3.7、GPIO数据清除寄存器... 17

2.3.8、GPIO上升沿中断使能寄存器... 18

2.3.9、GPIO下降沿中断使能寄存器... 18

2.3.10、GPIO高电平中断使能寄存器... 18

2.3.11、GPIO低电平中断使能寄存器... 19

2.3.12、GPIO中断状态寄存器... 19

2.3.13、GPIO边沿状态寄存器... 19

2.4、驱动源码... 20

2.5、应用程序... 20

2.5.1、使用说明... 20

2.5.2、GPIO流程图... 21

2.5.3、Btnd流程图... 22

2.6、修改实例... 22

2.6.1、硬件原理图... 23

2.6.1、管脚复用... 24

2.6.3、代码修改... 24

一、概述

1.1、简介

GPIO的英文全称General-Purpose Input /Output Ports,中文意思是通用I/O端口。GPIO 可提供输入、输出或中断三类功能,在微处理器上通常提供了一种“通用可编程I/O端口”。是嵌入式领域最常见,最基础的输入输出设备。

1.2、硬件特性

  • 独立I/O口的输入输出控制
  • 独立I/O口的极性控制
  • 独立I/O的边沿/电平检测来产生中断

1.3、应用场景

GPIO作为输入可以检测按键,限位开关等的状态,作为输出可以控制LED,蜂鸣器,继电器等设备。GPIO 除了在应用层中使用外,其实更多的是在其他复杂驱动中调用。比如SD卡驱动中要使用一个GPIO来监测卡的插入与拔出,网卡驱动中需要使用一个GPIO来控制phy芯片硬复位,连接一个无线模块的中断输出脚,控制某个GPIO的高低时序来达到某种目的,某些情况需要用GPIO来模拟I2C总线等等。

二、MT7621 SOC GPIO

2.1、硬件结构图

图2-1 gpio硬件结构图

2.2、管脚功能

参照MT7621的Datasheet MT7621一共提供14组50个GPIO,其采用管脚复用的方式实现不同的功能,复用功能如下:

图2-2-1 GPIO pin mapping

GPIO默认脚的工作方式为function0。

2.2.1、GPIO

通用GPIO,MT7621默认提供1个GPIO功能即GPIO0

2.2.2、UART

Universal Asynchronous Receiver-Transmitter, 通用异步收发器, MT7621默认提供3组UART

2.2.3、I2C

Inter-Integrated Circuit(集成电路总线),这种总线类型是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上

2.2.4、JTAG

JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

2.2.5、WDT_RST

Watch dog timeout reset

2.2.6、PERST_N

PCIe reset脚

2.2.7、MDIO

Management Data Input/Output, 它包含2个管脚:MDC和MDIO。MDC是管理数据的时钟输入,最高速率可达8.3MHz。MDIO是管理数据的输入输出双向接口,数据是与MDC时钟同步的。属于802.3标准中的内容。

2.2.8、RGMII

全称为Reduced Gigabit Media Independent Interface是Reduced GMII(吉比特介质独立接口)。GMII和RGMII均采用8位数据接口,工作时钟125MHz,因此传输速率可达1000Mbps。同时兼容MII所规定的10/100 Mbps工作方式,支持传输速率:10M/100M/1000Mb/s ,其对应clk 信号分别为:2.5MHz/25MHz/125MHz。RGMII数据结构符合IEEE以太网标准,接口定义见IEEE 802.3-2000。一般用于MAC和PHY之间的通信。MT7621可提供两组RGMII。

发送器:

◎ GTX_CLK:发送的时钟信号(125MHz)

◎ TXD[3..0]:被发送数据

◎ TX_EN:发送控制

接收器:

◎ RX_CLK:接收时钟信号

◎ RXD[3..0]:接收数据

◎ RX_DV:接收控制

2.2.9、SPI

SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。主要有四个接口信号:

(1)MOSI – 主器件数据输出,从器件数据输入

(2)MISO – 主器件数据输入,从器件数据输出

(3)SCLK –时钟信号,由主器件产生

(4)NSS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)

2.2.10、SD

SDXC接口

图2-2-2 NAND/SDXC/SPI 管脚共享方案

图2-2-3 SDXC功能脚定义

2.2.11、ESW_INT

MT7621 内部Ether switch interrupt

2.3、互用脚工作原理

2.3.1、引脚工作模式

一些引脚与GPIO共享,为系统设计者提供最大的灵活性。MT7621A提供多达50个GPIO引脚。用户可以在系统中配置SYSCFG和GPIOMODE寄存器控制块指定引脚功能,也可以使用下面指定的寄存器。除特定指明,所有GPIO引脚在复位后均为输入模式。

参照MT7621编程手册。找到控制GPIO工作模式的寄存器,位于SYSCTL中的GPIOMODE寄存器。该寄存器4字节,32位,控制着以上50个GPIO口的具体工作方式。

图2-3-1 Memory Map

图2-3-2 控制寄存器

图2-3-3 GPIO_MODE寄存器

GPIO purpose selection

Bit(s)        Name         Description

20      ESWINT_MODE Ether   switch interrupt GPIO mode

1: GPIO

0: Ether switch interrupt

1: GPIO

0: RGMII2

14      RGMII1_MODE          RGMII1 GPIO mode

1: GPIO

0: RGMII1

13:12    MDIO_MODE                 MDC/MDIO GPIO mode

3: GPIO

2: GPIO

1: GPIO

0: MDIO

11:10         PERST_MODE            PCIe reset GPIO mode

3: Reference clock

2: Reference clock

1: GPIO

0: PCIe reset

9:8             WDT_MODE               Watch dog timeout GPIO mode

3: Reference clock

2: Reference clock

1: GPIO

0: Watch dog

7                JTAG_MODE              JTAG GPIO mode

1: GPIO

0: JTAG

6:5             UART2_MODE            UART2 GPIO mode

3: GPIO

2: PCM

1: GPIO

0: UART2

4:3             UART3_MODE            UART3 GPIO mode

3: SPDIF

2: I2S

1: GPIO

0: UART3

2                I2C_MODE                  I2C GPIO mode

1: GPIO

0: I2C

1                UART1_MODE            UART1 GPIO mode

1: GPIO

0: UART1

2.3.2、GPIO寄存器

Address

Name

Width

Register Function

1E000600

GPIO_CTRL_0

32

GPIO0 to GPIO31 direction control register These direction control registers are used to select the data direction of the GPIO pin. The value driven onto the GPIO pins, are controlled by the GPIO_POL_x, and GPIO_DATA_x registers.

1E000604

GPIO_CTRL_1

32

GPIO32 to GPIO63 direction control register These direction control registers are used to select the data direction of the GPIO pin. The value driven onto the GPIO pins, are controlled by the GPIO_POL_x, and GPIO_DATA_x registers.

1E000608

GPIO_CTRL_2

32

GPIO64 to GPIO95 direction control register These direction control registers are used to select the data direction of the GPIO pin. The value driven onto the GPIO pins, are controlled by the GPIO_POL_x, and GPIO_DATA_x registers.

1E000610

GPIO_POL_0

32

GPIO0 to GPIO31 polarity control register These polarity control registers are used to control the polarity of the data is driven on or read from the GPIO pin.

1E000614

GPIO_POL_1

32

GPIO32 to GPIO63 polarity control register These polarity control registers are used to control the polarity of the data is driven on or read from the GPIO pin.

1E000618

GPIO_POL_2

32

GPIO64 to GPIO95 polarity control register These polarity control registers are used to control the polarity of the data is driven on or read from the GPIO pin.

1E000620

GPIO_DATA_0

32

GPIO0 to GPIO31 data register These data registers store current GPIO data value for GPIO input mode, or output driven value for GPIO output mode. Bit position stand for correspondent GPIO pin.

1E000624

GPIO_DATA_1

32

GPIO32 to GPIO63 data register These data registers store current GPIO data value for GPIO input mode, or output driven value for GPIO output mode. Bit position stand for correspondent GPIO pin.

1E000628

GPIO_DATA_2

32

GPIO64 to GPIO95 data register These data registers store current GPIO data value for GPIO input mode, or output driven value for GPIO output mode. Bit position stand for correspondent GPIO pin.

1E000630

GPIO_DSET_0

32

GPIO0 to GPIO31 data set register These data set registers are used to set bits in the GPIO_DATA_x registers.

1E000634

GPIO_DSET_1

32

GPIO32 to GPIO63 data set register These data set registers are used to set bits in the GPIO_DATA_x registers.

1E000638

GPIO_DSET_2

32 GPIO64 to GPIO95 data set register These data set registers are used to set bits in the GPIO_DATA_x registers.

1E000640

GPIO_DCLR_0

32

GPIO0 to GPIO31 data clear register These data set registers are used to clear bits in the GPIO_DATA_x registers.

1E000644

GPIO_DCLR_1

32

GPIO32 to GPIO63 data clear register These data set registers are used to clear bits in the GPIO_DATA_x registers.

1E000648

GPIO_DCLR_2

32

GPIO64 to GPIO95 data clear register These data set registers are used to clear bits in the GPIO_DATA_x registers.

1E000650

GINT_REDGE_0

32

GPIO0 to GPIO31 rising edge interrupt enable register  These registers are used to enable the condition of rising edge triggered interrupt.

1E000654

GINT_REDGE_1

32

GPIO32 to GPIO63 rising edge interrupt enable register These registers are used to enable the condition of rising edge triggered interrupt.

1E000658

GINT_REDGE_2

32

GPIO64 to GPIO95 rising edge interrupt enable register These registers are used to enable the condition of rising edge triggered interrupt.

1E000660

GINT_FEDGE_0

32

GPIO0 to GPIO31 falling edge interrupt enable register These registers are used to enable the condition of falling edge triggered interrupt.

1E000664

GINT_FEDGE_1

32

GPIO32 to GPIO63 falling edge interrupt enable register These registers are used to enable the condition for falling edge triggered interrupt.

1E000668

GINT_FEDGE_2

32

GPIO64 to GPIO95 falling edge interrupt enable register These registers are used to enable the condition of falling edge triggered interrupt.

1E000670

GINT_HLVL_0

32

GPIO0 to GPIO31 high level interrupt enable register These registers are used to enable the condition of high level triggered interrupt. The bit in this register and the corresponded bit in GINT_LLVL_0 cannot be set to 1 at the same time.

1E000674

GINT_HLVL_1

32

GPIO32 to GPIO63 high level interrupt enable register These registers are used to enable the condition of high level triggered interrupt. The bit in this register and the corresponded bit in GINT_LLVL_1 cannot be set to 1 at the same time.

1E000678

GINT_HLVL_2

32

GPIO64 to GPIO95 high level interrupt enable register These registers are used to enable the condition of high level triggered interrupt. The bit in this register and the corresponded bit in GINT_LLVL_2 cannot be set to 1 at the same time.

1E000680

GINT_LLVL_0

32

GPIO0 to GPIO31 low level interrupt enable register These registers are used to enable the condition of low level triggered interrupt. The bit in this register and the corresponded bit in GINT_HLVL_0 cannot be set to 1 at the same time.

1E000684

GINT_LLVL_1

32

GPIO32 to GPIO63 low level interrupt enable register These registers are used to enable the condition of low level triggered interrupt. The bit in this register and the corresponded bit in GINT_HLVL_1 cannot be set to 1 at the same time.

1E000688

GINT_LLVL_2

32

GPIO64 to GPIO95 low level interrupt enable register These registers are used to enable the condition of low level triggered interrupt. The bit in this register and the corresponded bit in GINT_HLVL_2 cannot be set to 1 at the same time.

1E000690

GINT_STAT_0

32

GPIO0 to GPIO31 interrupt status register These registers are used to record the GPIO current interrupt status.

1E000694

GINT_STAT_1

32

GPIO32 to GPIO63 interrupt status register These registers are used to record the GPIO current interrupt status.

1E000698

GINT_STAT_2

32

GPIO64 to GPIO95 interrupt status register These registers are used to record the GPIO current interrupt status.

1E0006A0

GINT_EDGE_0

32

GPIO0 to GPIO31 edge status register These registers are used to record the GPIO current interrupt's edge status. These registers are useful only in edge triggered interrupt.

1E0006A4

GINT_EDGE_1

32

GPIO32 to GPIO63 edge status register These registers are used to record the GPIO current interrupt's edge status. These registers are useful only in edge triggered interrupt.

1E0006A8

GINT_EDGE_2

32

GPIO64 to GPIO95 edge status register These registers are used to record the GPIO current interrupt's edge status. These registers are useful only in edge triggered interrupt.

表2-3-1 GPIO寄存器说明

2.3.3、GPIO输入/输出模式控制寄存器

转存失败重新上传取消

图2-3-4 GPIO方向

2.3.4、GPIO极性控制寄存器

图2-3-5 GPIO极性

2.3.5、GPIO数据寄存器

图2-3-6 GPIO数据

2.3.6、GPIO数据设置寄存器

图2-3-7 GPIO数据设置

2.3.7、GPIO数据清除寄存器

图2-3-8 GPIO数据清除

2.3.8、GPIO上升沿中断使能寄存器

图2-3-9 GPIO上升沿中断使能

2.3.9、GPIO下降沿中断使能寄存器

图2-3-10 GPIO下降沿中断使能

2.3.10、GPIO高电平中断使能寄存器

图2-3-11 GPIO高低平中断使能

2.3.11、GPIO低电平中断使能寄存器

图2-3-12 GPIO低平中断使能

2.3.12、GPIO中断状态寄存器

图2-3-13 GPIO中断状态

2.3.13、GPIO边沿状态寄存器

图2-3-14 GPIO边沿状态

2.4、驱动源码

针对以上寄存器的控制设置MTK SDK(V3.x)源码包使用linux-3.10.14的源码内包含GPIO的驱动.

源码路径为:linux-root-path/drivers/char/relink_gpio.c

代码流程图如下

图2-4 驱动代码流程

2.5、应用程序

MTK SDK(V3.x)开发包配套的GPIO相关的应用程序主要是gpio和btnd。

2.5.1、使用说明

Usage: gpio w - writing test (output)

gpio r - reading test (input)

gpio i (<gpio>) - interrupt test for gpio number

gpio l <gpio> <on> <off> <blinks> <rests> <times>

- set led on <gpio>(0~24) on/off interval, no. of blinking/resting cycles, times of blinking

example:gpio l 8 1000 0 0 0 0 表示控制第8号gpio,打开时间1000/10=100秒,关闭时间0秒,闪烁次数0,闪烁中途间隔0秒,循环次数

usage: btnd <name/test> <pin>

example: btnd wps 2 gpio2作为wps按键

btnd最后的处理方式会调用/etc/btnd/btn_name_click/hold.sh脚本,可以在里面加自己的操作。

2.5.2、GPIO流程图

图2-5-1 gpio代码流程图

2.5.3、Btnd流程图

图2-5-2 btnd代码流程图

2.6、修改实例

以xxxAC项目为例介绍下GPIO的配置过程。

图2-6-1 5口AC产品图

2.6.1、硬件原理图

从原理结构图上看,外围有两个LED灯和一个RESET按键。Power LED是3.3v直连接地,也就是说上电就会亮不可控,SYS LED低电平有效(低电平亮),RESET按键中断触发。

2.6.1、管脚复用

可以看出JTAG功能的JTMS脚和WDT_RST_N脚被成了GPIO功能。G18脚对应GPIO15、G15脚对应GPIO18,对应关系可查阅MT7621的datasheet。

2.6.3、代码修改

驱动代码root_kernel_dir/drivers/char/relink_gpio.c

ralink_gpio_init函数里面设置了RALINK_REG_GPIOMODE(1e000060)对应2.3.1章节的GPIO_MODE的寄存器,RALINK_GPIO_MODE_DEF这个宏定义了哪些互用脚使用GPIO模式,所以需要在宏定义的地方加上RALINK_GPIOMODE_JTAG和RALINK_GPIOMODE_WDT这个两个bit位,重新编译kernel后烧入板子即可。

应用层直接可以用gpio和btnd命令测试

gpio l 15 10 10 0 0 4000 控制15号gpio 亮1s灭1s一直循环

btnd reset 18 18号gpio作为reset脚。

参考文献:

MT7621_ProgrammingGuide_Preliminary_Platform_decrypted.pdf

MTK-OpenWrt-3.10.14-SDK-Release-Notes_20151231.pdf

MT7621方案GPIO介绍相关推荐

  1. MT7621方案 LED 灯控制 (基于OpenWrt平台)

    注:出处不明,最开始是在这里看到的,图竟然没有...没有...相关资料也几乎木有...datasheet里也没有寄存器配置说明......MT7621还真是坑爹啊! 目前市面上大部分路由器方案是基于M ...

  2. mysql高可用方案MHA介绍

    mysql高可用方案MHA介绍 概述 MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10-30秒内),完成故障切换,部署MHA, ...

  3. 4、PIC32系列 GPIO介绍

    PIC32系列 GPIO介绍 1.PIC32参考资源 2.GPIO寄存器介绍 3.使用寄存器配置IO口输出LED闪烁 4.库函数封装定义 5.库函数 6.实验验证 1.PIC32参考资源 PIC32系 ...

  4. 炉石传说服务器维护有补偿吗,炉石传说服务器维护故障补偿方案内容介绍

    炉石传说服务器维护故障补偿方案内容介绍.炉石传说前段时间服务器维护导致数据回档,目前官方已经商讨出了补偿方案,以下就是补偿方案细则,大家是否满意? 一.只要曾经在2017年1月18日18点之前登录过国 ...

  5. RK3288开发板GPIO介绍

    简介 GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚. RK3288 有 9 组 GPIO bank: GP ...

  6. MT7621芯片性能,MT7621路由器参数介绍

    MT7621芯片包括高性能的880 mhz MIPS1004kc cpu核心和高速usb3.0/pcie/sdxc接口,其设计目的是为了实现多种高性能.成本效益高的ieee 8.带有MediaTek( ...

  7. 单片机按键连接方法总结(五种按键扩展方案详细介绍)

    http://blog.sina.com.cn/s/blog_634771fd0100hd1h.html 单片机在各种领域运用相当广泛,而作为人机交流的按键设计也有很多种.不同的设计方法,有着不同的优 ...

  8. 海思Hi3515开发板方案使用介绍

    本文档主要介绍 Hi3515 Demo 单板基本功能特点和硬件特性.多功能硬件配置.软件调试操作使用方法. Hi3515 Demo 单板是针对海思 Hi3515 H.264 编解码处理器芯片(以下简称 ...

  9. 最全行车记录仪方案+主控芯片介绍!

    最近在关注行车记录仪,了解了之后 写此文章想让车友们知道什么是行车记录仪的高端标准,什么是好货,因为大部分人都不知道. 看到很多朋友在问,什么是行车记录仪的方案,行车记录仪的主控究竟有什么区别,我该用 ...

  10. 玩转CANN目标检测与识别一站式方案【介绍篇】

    背景介绍 目标检测与识别是计算机视觉领域中的关键技术,随着深度学习技术的发展,目标检测与识别的应用场景也越来越广泛.当前, 主要有以下几个应用场景: 安全领域:指纹识别.物体识别等. 交通领域:车牌号 ...

最新文章

  1. ThinkPHP判断更新是否成功的正确方法
  2. php 网址尾部带斜杠和不带区别,URL路径中带正斜杠/与不带的区别
  3. java线程睡眠一分钟_Java中的TimerTimerTask和线程睡眠
  4. yii 使用 有赞sdk_有赞移动如何做到并行灰度的复杂场景?
  5. npm中package.json详解
  6. 团队作业7——Beta版本冲刺计划及安排
  7. 面试官、女朋友都满意系列 - 决策树
  8. linux如何控制ftp不能get,ftp get/push连接到linux时,都是使用的linux命令
  9. 我太难了!男子打赏女主播被骗9.6万,求助“好心人”再度被骗...
  10. AchartEngine的柱状图属性设置
  11. java 二分_java二分查找算法
  12. Numpy学习---Task03---数组的操作
  13. Spurious wakeup
  14. 聚(N-异丙基丙烯酰胺)PNIPAM离子微凝胶-聚合物后分散形成的纳米粒子-瑞禧
  15. bootmgr快速修复win7_「科普」UEFI+GPT、Legacy+MBR引导模式介绍 引导修复
  16. 2022在线微信对话生成器源码,抖音微信聊天搞笑视频制作神器
  17. 由于使用计算机编制会计报表,《计算机会计学》1
  18. 最新idm6.43下载器2023中文特别版怎么使用?真可以速度提升500%?
  19. 跟我一起玩转微信支付
  20. 并联串联混合的电压和电流_中考物理满分之路:《电阻的串联和并联》2020年高频易错题集...

热门文章

  1. 基于计算机视觉原理的自主足球机器人位置规划,基于计算机视觉原理的自主足球机器人位置规划...
  2. es6初识笔记(参看阮一峰ECAMscript6入门)
  3. WPF教程(四) Hello,WPF!
  4. 大一计算机文化基础复习资料,转 大一计算机文化基础试题及答案
  5. 半导体中的电子运动 有效质量
  6. 轩辕实验室 |自动驾驶系统安全隐患分析
  7. 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法比较
  8. sqlserver 建表语句
  9. 手把手教你如何使用kali破解wifi密码(图文教程)
  10. 面试必背 Java 多线程面试题