# 说明
本文硬件基于 LaunchXL-F28379D 和 逻辑分析仪,软件基于 CCS 10.4 版本, 帮助文档为 C2000 的例程和官方文档
因为 GPIO 输入详细的说明了如何找寄存器和分析文档,所以这里就简单的对寄存和一些与 MCU 不同的地方进行简单分析,不再长篇大论的做思路分析
# 逻辑框图
老样子,先搞上原理,相较于 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 配置为 上拉输出模式,就需要将一下几步
- GPAMUXn 配置为 0,
- GPADIR 配置为 0
- GPAPUD 配置为 0
- GPyINV 配置为 0
- GPyQSELn 配置为 00
不过这里需要注意一个问题
在文档中对 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 高电平
# GPIO24 低电平
# 工程
driverlib 的工程链接
🐱(⬅️点我)
大道五十,天衍四十九,人遁其一!