欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

X281xDSP通用输入/输出多路复用器GPIO

程序员文章站 2024-02-26 18:49:52
...

GPIO的寄存器

GPIO分类

GPIO(general purpose input and output)的寄存器分为两大类:

  • 控制寄存器:
    • 功能选择控制寄存器 GPxMUX
    • 方向控制寄存器 GPxDIR
    • 输入限定控制寄存器 GPxQUAL
  • 数据寄存器:
    • 数据寄存器 GPxDAT
    • 置位寄存器 GPxSET
    • 清除寄存器 GPxClear
    • 取反寄存器 GPxTOGGLE

说明:

  1. x代表A、B、D、E、F、G
  2. MUX 代表功能切换的意思
  3. 对于GPxMUXGPxDIRA,B,D,E,F,G都有;而GPxQUAL,只有A,B,D,E才有
  4. 多路复用

举例说明

以PWM1引脚作为例子来理解以下概念

功能选择控制寄存器(GPxMUX)

因为GPIO的引脚是复用的,所以在使用GPIO的引脚之前,就需要选择这个引脚是作为功能引脚还是通用的数字I/O口
所以想让PWM1引脚作为PWM波形的输出引脚,这将GPIOA的D0位置1;反之,若想让PWM1引脚作为通用的数字I/O口,这将GPIOA的D0位置0。
GPIO的控制寄存器都是受EALLOW保护。所以对其操作前后需要加上EALLOW;EDIS;

EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOAO=1; //PWM波形的输出引脚
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOAO=0; //通用的数字I/O口
EDIS;

方向控制寄存器(GPxDIR)

假设将引脚PWM1设为通用的数字I/O口,这时需要判断是否是做输入引脚还是输出引脚,用如下设置进行设置 (0入1出

EALLOW;
GpioMuxRegs.GPADIR.bit.GPIOAO = 0; //输入引脚
GpioMuxRegs.GPADIR.bit.GPIOAO = 1; //输出引脚
EDIS;

数据寄存器(GPxDAT)

当我们选择完功能和方向之后,我们就可以进行读该引脚的电平信息,如下所示

if(GpioDataRegs.GPADAT.bit.GPIOAO == 1) //高电平
{...} 
if(GpioDataRegs.GPADAT.bit.GPIOAO == 0) //低电平
{...}

若是赋值,就使用一个等号既可

输入限定控制寄存器(GPxQUAL)

作用:防止输入干扰信号
举例说明
X281xDSP通用输入/输出多路复用器GPIO
假设采样窗口为6个信号宽度,只有连续6个被采样的信号都是一样才变化,否则认为是干扰信号,不改变原来的状态

电路图解析

X281xDSP通用输入/输出多路复用器GPIO

符号解释

  • 1代表数据输入方向
  • 2代表数据输出方向
  • 3代表多功能切换,横向的那个指向箭头为控制引脚,若控制引脚为0,则选择0那条路作为输出,反之则为1
  • 8为单向选择驱动,只有当横向那个箭头输入进来为1,才导通
  • 9为或门,○为取非
  • 10为引脚,代表芯片伸出的焊接点

通用IO输入功能分析X281xDSP通用输入/输出多路复用器GPIO

首先从PIN口输入信号,到达输入量化,这个由系统时钟输入限定控制寄存器共同决定当前电平,然后再往上走,到达单向选择驱动,这里控制线(水平那个)需要为0时,取非为1才能导通,而这个是由方向控制寄存器控制,当方向控制寄存器为0时,则导通,那么输入信号就可以保存到数据寄存器

通用IO输出功能分析

X281xDSP通用输入/输出多路复用器GPIO
当要将数据寄存器数据输出时,首先进过①,当GPxDIR寄存器为1(输出)时,①导通,数据来到了MUX,当GPxMUX寄存器选择0(通用的数字I/O口)时,数据就可以流到②的位置,此时若置位端没有按下(为1),也没有越界(为1),加上GPxDIR寄存器为1,通过或非门,则输出0,所以②导通,数据成功到达引脚(PIN)

功能引脚分析

X281xDSP通用输入/输出多路复用器GPIO
首先GPxMUX为1,则将外设I/O口的输出引脚接到PIN端口,具体如图所示

tip:

  1. 高阻控制:高阻状态不是0也不是1,就是这条线没有用了,若不是高阻状态则为1
  2. 内部上拉或下拉:简单说就是将输出的电平变的精确,要么为0,要么为1,就不会存在一个模糊的值(如0.5这样)