# 说明

本文硬件基于 LaunchXL-F28379D 和 逻辑分析仪,软件基于 CCS 10.4 版本, 帮助文档为 C2000 的例程和官方文档
因为 GPIO 输入详细的说明了如何找寄存器和分析文档,所以这里就简单的对寄存和一些与 MCU 不同的地方进行简单分析,不再长篇大论的做思路分析

# 逻辑框图

image

老样子,先搞上原理,相较于 GPIO 输出模式,输入模式就更为复杂一些.

从原理图中可以得到,输入需要配置 GPyPUD、GPyINV、GPyCTRL 和 GPyQSELn 寄存器,当然还有之前 输出模式所提及到到的寄存器。

# 寄存器

所有相关的寄存器还是从文档的寄存器表以及 GPIO 章节的输入配置的的说明中分析得来

寄存器功能备注
GPyINV是否将输入反向置 1:配置非门
GPyQSELn选择输入模式2bit<br />00:同步模式 < br />01:3 次采样 < br />10:6 次采样 < br />11:异步模式
GPyCTRL配置采样周期2bit<br />PPLSCLK 多少分频 < br /> 具体情况参照手册 970 页
GPyPUD设置引脚初始电平1bit<br /> 置 0:开启上拉模式 < br /> 默认为 1

所以,如果要将 引脚 24 配置为 上拉输出模式,就需要将一下几步

  1. GPAMUXn 配置为 0,
  2. GPADIR 配置为 0
  3. GPAPUD 配置为 0
  4. GPyINV 配置为 0
  5. GPyQSELn 配置为 00

不过这里需要注意一个问题

image

在文档中对 pin 的 GPIO 输入模式 进行了特别的说明。当 引脚 工作在 GPIO 模式时,异步配置无效,会自动转换为 同步配置

我在学习的过程中,参考了一些博客,但是他们都设置为异步输入模式。现在可以明确,虽然他们实现了真正的效果,但在原理层面上是错误的

# 实验设计

# 目的

当 GPIO24 为低电平时,GPIO25 输出低电平;为高电平时输出 5 个方波

# 思路

将 GPIO24 配置为输入模式,将 GPIO25 配置为输出模式

编写函数,参数为输出次数

主函数检测 GpioDataReg.GPADAT.bit.GPIO24 电平状态,当为低电平时,GPIO25 输出低电平

# 代码实现

#include "driverlib.h"
#include "device.h"
void gpioInputCfg(void);
void test_function(uint8_t n);
//
// Main
//
void main(void)
{
    // 初始外设
    Device_init();
    // 初始化 引脚
    gpioInputCfg();
    while (1)
    {
        test_function(5);
        if (!GPIO_readPin(24))
        {// 引脚检测
            DEVICE_DELAY_US(10 * 1000); // 消抖(暴力)
            if (!GPIO_readPin(24))
            {// 确认引脚检测
                GPIO_writePin(25, 0);   // 输出低电平
                DEVICE_DELAY_US(1000L); // 维持 1ms
            }
        }
    }
}
void test_function(uint8_t n)
{
    for (int i = 0; i < n*2; i++){
        GPIO_togglePin(25); // 翻转电平
        DEVICE_DELAY_US(100);
    }
}
/**
 * 配置 GPIO24 为
 */
void gpioInputCfg(void)
{
    GPIO_setPinConfig(24);                              // 配置为 GPIO 模式
    GPIO_setQualificationMode(24, GPIO_QUAL_SYNC);      // 配置为同步采样
    GPIO_setDirectionMode(24, GPIO_DIR_MODE_IN);        // 配置为输入模式
    GPIO_setPadConfig(24, GPIO_PIN_TYPE_PULLUP);        // 配置为上拉模式
    // 配置为输出模式
    GPIO_setPinConfig(25);
    GPIO_setDirectionMode(25, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(25, GPIO_PIN_TYPE_STD);
}

# 现象

# GPIO24 高电平

image

# GPIO24 低电平

image

# 工程

driverlib 的工程链接
🐱(⬅️点我)


大道五十,天衍四十九,人遁其一!