GPIO与IOMUX

GPIO与IOMUX

  • 1 GPIO
    • 1.1 何为GPIO?
    • 1.2 GPIO常用寄存器
      • 1.2.1 GPIO direction register (GPIOx_GDIR)
      • 1.2.2 GPIO data register (GPIOx_DR)
      • 1.2.3 GPIO pad status register (GPIOx_PSR)
    • 1.3 GPIO时钟
    • 1.4 GPIO逻辑结构
  • 2 IOMUX
    • 2.1 何为IOMUX
    • 2.2 IOMUX逻辑图
      • 2.2.1 IOMUX和PAD
      • 2.2.2 PAD和Module
  • 3 IOMUX设置PAD为GPIO实例
    • 3.1 寻找实例和对应的PAD
      • 3.1.1 设置SW_MUX_CTL_PAD_GPIO1_IO00
      • 3.1.2 设置SW_PAD_CTL_PAD_GPIO1_IO00
      • 3.1.3 设置实例GPIO1全组属性

1 GPIO

1.1 何为GPIO?

GPIO只是一个CPU内提供的一种功能外设CPU外部的I/O引脚会被赋予一种功能(GPIO、UART、I2C等);该功能由CPU内外设提供,具体是什么功能由IOMUX单元(I/O复用选择器)控制。

GPIO(General Purpose Input/Output)是芯片的外设功能模块 ,每个GPIO外设连接到了外部的I/O引脚上,和GPIO外设相连的I/O引脚(I/O引脚相较于GPIO更加远离CPU) 起着通用输入输出的功能,所以被称为 GPIO 引脚。
但是,I/O引脚不仅和GPIO外设相连,还可以和芯片内部其它外设相连,比如和UART、IIC、SPI等外设相连作为通信外设的接口引脚,和定时器相连作为PWM输出引脚,等等。

1.2 GPIO常用寄存器

GPIO特性:
通用输入/输出逻辑功能:
• 使用数据寄存器进行特定数据输出(GPIO_DR)
• 控制信号方向(GPIO_GDIR)
• 使能核心通过读取pad寄存器对应的采样输入通讯信号(GPIO_PSR).
GPIO interrupt capabilities:
• 支持32种中断
• 定义中断沿

1.2.1 GPIO direction register (GPIOx_GDIR)

A GPIO signal can operate as a general-purpose input/output when the IOMUX is set to GPIO mode.

GPIO direction register (GPIO_GDIR)来确定是GPIO是输入还是输出。当为输入模式bit=0,对应输入情况由GPIO_PSR位读取确定。

GPIO与IOMUX_第1张图片

1.2.2 GPIO data register (GPIOx_DR)

32位寄存器储存数据,时刻准备加载到output line中。
GPIO模式由IOMUX确定,由GPIO_GDIR确定输入还是输出;DR寄存器数据加载入output中。
• If GDIR[n] is set and IOMUXC input mode is GPIO, then reading DR[n] returns the contents of DR[n].
• If GDIR[n] is cleared and IOMUXC input mode is GPIO, then reading DR[n] returns the corresponding input signal’s value.
• If GDIR[n] is set and IOMUXC input mode is not GPIO, then reading DR[n] returns the contents of DR[n].
• If GDIR[n] is cleared and IOMUXC input mode is not GPIO, then reading DR[n] always returns zero.
GPIO与IOMUX_第2张图片

1.2.3 GPIO pad status register (GPIOx_PSR)

GPIO_PSR is a read-only register. Each bit stores the value of the corresponding input signal (as configured in the IOMUX). This register is clocked with the ipg_clk_s clock, meaning that the input signal is sampled only when accessing this location. Two wait states are required any time this register is accessed for synchronization.

1.3 GPIO时钟

  1. 先查阅手册,找到GPIO的时钟隶属于哪一组;
    GPIO与IOMUX_第3张图片
  2. 去到Clock章节寻找对应的clock name:IPG_CLK_S
    GPIO与IOMUX_第4张图片
  3. 去查对应的寄存器,以CCM_CCGR0为例:

GPIO与IOMUX_第5张图片


1.4 GPIO逻辑结构

GPIO与IOMUX_第6张图片

  1. PADx:它代表了芯片上的一个内部引脚。
  2. IOMUX复用选择器:芯片的每个PAD通过IOMUXC中的MUX寄存器和PAD寄存器设置,可以支持多种功能(如GPIO、IIC、USART…)。每一个PAD的功能都需要有IOMUXC决定;被设置完功能的PAD就体现为外部IO引脚
  3. Block外设功能控制块:例如具有PWM输出功能的引脚,它需要PWM外设的支持。
  4. GPIO外设:GPIO模块是每个PAD都具有的外设,但不一定每一个PAD都会使用。当需要赋予PAD引脚GPIO功能时,就要在通过IOMUX沛公功能后,再配置GPIO外设中的各个寄存器(DR、GDIR、PSR…)。
  5. 与其它引脚的连接:这里是另一个引脚PAD2,它与PAD1有一根信号线连接,表示部分引脚的输出可以作为另一个引脚的输入。
  6. 外部IO = 内部PAD + 外设

2 IOMUX

2.1 何为IOMUX

它是CPU内部的控制器,负责给PAD赋予不同功能,使得PAD在外部展现出不同的功能;而PAD的外部就是IO引脚;因此实现IO复用

2.2 IOMUX逻辑图

2.2.1 IOMUX和PAD

GPIO与IOMUX_第7张图片

  1. 一个PAD可以去链接多个模块(module),从而实现PAD输入输出信号的复用功能;这里说明一个PAD可能有几种ALT。
  2. 当需要链接一个模块并实现功能时,首先需要给PAD赋予功能(SW_MUX_CTL_PAD_x);在赋予功能后(如GPIO后)启动那些功能属性(SW_PAD_CTL_PAD_x)。
  3. 每一个PIN是PAD在IOMUXC确定后,通过IOMUX Cell链接对应module之后对外展现的引脚。
  4. 每一个PAD都有很多个外设模块可以链接,每一种外设模块对应PAD的一种ALT

2.2.2 PAD和Module

GPIO与IOMUX_第8张图片

  1. 每一个PAD都有一个IOMUIX Cell对应用于控制它;但是并不是每一个PAD会配有自己独立的模块;模块是共用的。
  2. PAD的复用是通过IOMUX Cell去分配这个PAD接受/输出数据是经过哪一个模块;
  3. PAD复用后(ALT选择后),与模块实例下的某一个端口相连;

3 IOMUX设置PAD为GPIO实例

3.1 寻找实例和对应的PAD

位于手册 Muxing Options
在这里插入图片描述
GPIO与IOMUX_第9张图片
从左到右分别为:实例(功能)、实例端口、PAD、PAD应该被设置为ALTx
外部信号按模块实例分组的,每个信号的复用选项以及用于将信号路由到所选 PAD 的寄存器。

  1. 当你需要PIN(外部引脚)实现一个功能时,这个功能是由模块(CPU内外设)实现的;而PAD负责传输数据;实际信号流动顺序:外部信号(IO引脚)—module—PAD
  2. 实际使用中根据需要的功能去找实例和实例端口,再由端口去找可以链接这个模块端口的PAD;并完成对PAD的设置。

以实例GPIO1组下端口IO1为例:Pad为GPIO1_IO01,模式为ALT5。

3.1.1 设置SW_MUX_CTL_PAD_GPIO1_IO00

所有的Pad设置均是如此,先设置SW_MUX_CTL_PAD_xxx
GPIO与IOMUX_第10张图片

GPIO与IOMUX_第11张图片
查手册,因此寄存器通过位运算设置低四位为:0101

3.1.2 设置SW_PAD_CTL_PAD_GPIO1_IO00

设置这个Pad的属性,比如驱动能力、是否使用上下拉电阻等。

3.1.3 设置实例GPIO1全组属性

注意:对于单个引脚(IO和Pad)需要设置它的功能(属于哪个module)和引脚属性,但是设置只是针对当前引脚的功能和属性;每一个引脚隶属于一个Instance(本质上是module外设),需要设置整个module(实例组)的属性

GPIO实例需要设定的属性:
GPIO与IOMUX_第12张图片
GPIO与IOMUX_第13张图片
GPIOx_GDIR:每一个bit位的0/1表示一个GPIO实例的属性
GPIO与IOMUX_第14张图片

你可能感兴趣的:(单片机,stm32,嵌入式硬件)