当前位置: 首页 > news >正文

[MSPM0开发]MSPM0G3507之GPIO输入、输出、中断使用(基于driverlib库)

[MSPM0开发]之六MSPM0G3507的GPIO输入、输出、中断使用

  • 一、MSPM0G3507 GPIO外设概述
  • 二、 MSPM0G3507 GPIO结构框图
  • 三、driverLib库例程
  • 四、操作示例
    • 4.1 输出控制库函数操作
    • 4.2 输入查询方式操作
    • 4.3 输入中断方式操作

一、MSPM0G3507 GPIO外设概述

GPIO提供了一种通过芯片引脚读写数字信号(0/1即低电平/高电平)的方法
同时还提供了一种芯片在低功耗模式时用于唤醒芯片的方法
GPIO 模块的特性包括:
• 从 CPU 访问 MMR 的零等待状态
• 无需在软件中使用“读取、修改、写入”结构, 即可设置/清零/切换多个位
• 无需在软件中使用“读取、修改、写入”结构, 即可直接写入到各个 GPIO 输出位 (DOUT)
• 无需在软件中使用屏蔽, 即可直接读取各个 GPIO 输入位 (DIN) 的比较结果
DOUT 可供 DMA 用于在指定引脚上生成预定义的输出序列
快速唤醒功能支持通过任意 GPIO 端口从 STOP 和 STANDBY 模式进行低功耗唤醒
• 用户控制的输入滤波( 可按 IO 配置)
• 通过事件发布者事件订阅者与设备事件结构互连( 仅限 GPIOA 实例

二、 MSPM0G3507 GPIO结构框图

结构框图

三、driverLib库例程

例程

四、操作示例

硬件原理图
按键
LED
配置使用内部高速时钟,MCLK=32MHZ

序号输入/输出引脚功能
1输出PB22LED
2输入PB21BUTTON1
3输入PB20BUTTON2

4.1 输出控制库函数操作

sysconfig配置:
时钟2
时钟
GPIO配置:
配置
按键1

测试代码:

int main(void) {SYSCFG_DL_init();systick_init(32000); // systick从sysconfig中分离,使用自定义函数实现其初始化、计数、延时等操作。 可以参考此链接:[https://blog.csdn.net/wo4fisher/article/details/147166352?spm=1011.2415.3001.5331](https://blog.csdn.net/wo4fisher/article/details/147166352?spm=1011.2415.3001.5331)DL_GPIO_setPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));DL_GPIO_clearPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));DL_GPIO_setPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));DL_GPIO_clearPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));for (int i = 0; i < 5; i++) {DL_GPIO_togglePins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((1000));}while (1) {}
}

4.2 输入查询方式操作

在4.1基础上添加轮训检测按键代码,检测到按键按下后,LED翻转:

int main(void) {SYSCFG_DL_init();systick_init(32000);DL_GPIO_setPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));DL_GPIO_clearPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));DL_GPIO_setPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));DL_GPIO_clearPins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((2000));for (int i = 0; i < 5; i++) {DL_GPIO_togglePins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);delay_ms((1000));}while (1) {if (!DL_GPIO_readPins(GPIO_GRP_SW_PORT, GPIO_GRP_SW_PIN_SW1_PIN)) {DL_GPIO_togglePins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);while (!DL_GPIO_readPins(GPIO_GRP_SW_PORT, GPIO_GRP_SW_PIN_SW1_PIN));}}
}

4.3 输入中断方式操作

这里按键用外接按键,连接到PB20.
通过查询手册"cpu和中断",可知,gpio外设中断属于INT_GROUP1中断,其中断服务函数通过查询例程gpio_input_capture得到。
GPIO中断
sysconfig

引脚配置为输入中断过程如下:

//仅保留输入中断引脚部分
SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
{DL_GPIO_initDigitalInputFeatures(GPIO_GRP_SW_PIN_SW2_IOMUX,DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_NONE,DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);DL_GPIO_setUpperPinsPolarity(GPIOB, DL_GPIO_PIN_21_EDGE_FALL |DL_GPIO_PIN_20_EDGE_FALL);DL_GPIO_clearInterruptStatus(GPIOB, GPIO_GRP_SW_PIN_SW1_PIN |GPIO_GRP_SW_PIN_SW2_PIN);DL_GPIO_enableInterrupt(GPIOB, GPIO_GRP_SW_PIN_SW1_PIN |GPIO_GRP_SW_PIN_SW2_PIN);}

在main.c中硬件初始化完成后,开启gpio输入中断

NVIC_EnableIRQ(GPIO_GRP_SW_INT_IRQN);

编写输入中断服务函数:
通过上文中的表格,GROUP1_IRQ是一组中断请求事件的共用中断服务函数入口,因此,进入中断后,要进一步判断是哪一个中断源,如果是GPIO,如果有多个GPIO中断,还要进一步判断对应引脚状态。

void GROUP1_IRQHandler(void) {switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {case GPIO_GRP_SW_INT_IIDX:DL_GPIO_togglePins(GPIO_GRP_LED_PORT, GPIO_GRP_LED_PIN_LED_PIN);break;}
}

文章转载自:

http://56aVNxj9.wjzzh.cn
http://T4R6OL1T.wjzzh.cn
http://UnUL0BZN.wjzzh.cn
http://0ZL7sHau.wjzzh.cn
http://jxeFqVfS.wjzzh.cn
http://oOwuzMcN.wjzzh.cn
http://9xlklMvf.wjzzh.cn
http://KVn3JF2W.wjzzh.cn
http://7zY1FVWc.wjzzh.cn
http://gsjXeNb3.wjzzh.cn
http://SDr2nNTy.wjzzh.cn
http://vrjgMM2t.wjzzh.cn
http://AsnrGohS.wjzzh.cn
http://nsimFu5G.wjzzh.cn
http://Do1gS4bG.wjzzh.cn
http://z6NXdfqQ.wjzzh.cn
http://BaQIsHrs.wjzzh.cn
http://ApTUPUdh.wjzzh.cn
http://PKaXSxGs.wjzzh.cn
http://Q4IeFrrq.wjzzh.cn
http://fojcD3TM.wjzzh.cn
http://6bedJcri.wjzzh.cn
http://JHfZSLOW.wjzzh.cn
http://QFL6c1zD.wjzzh.cn
http://QvlG6Cxv.wjzzh.cn
http://R5ShxY0S.wjzzh.cn
http://WUN0VViN.wjzzh.cn
http://FcDhbCx2.wjzzh.cn
http://NB0LAEK5.wjzzh.cn
http://5uLs1WZT.wjzzh.cn
http://www.dtcms.com/a/246666.html

相关文章:

  • 销售预测的方法与模型(二)丨商品与库存分类——基于数据模型运营的本质和底层逻辑销售
  • 机器学习算法——朴素贝叶斯和特征降维
  • 名称 深度学习(监督学习) Iteration 一次 mini-batch 前向+反向传播更新 Epoch 所有数据集训练一遍。这两个概念不一样吗?
  • 图像分割技术:像素级的精准识别(superior哥深度学习系列第12期)
  • Vue3项目与桌面端(C++)通过Websocket 对接接口方案实现
  • GPIO简介(GPIO输出)
  • Metastore 架构示意图和常用 SQL
  • HINet: Half Instance Normalization Network for Image Restoration论文阅读
  • 使用Optimization tool优化后禁用windows更新批量的脚本
  • 前端加密当日
  • 怎样下载某个SCI期刊的endnote style?答:直接去endnote官网搜索期刊名称并下载即可
  • 面向对象 设计模式简述(1.创建型模式)
  • 16、企业预算管理(Budget)全流程解析:从预算编制到预算控制
  • git merge合并分支push报错:Your branch is ahead of ‘xxx‘ by xx commits.
  • 【unitrix】1.2 unitrix 物理量计算库(lib.rs)
  • AIAgent,Prompt,MCP是什么?
  • AUTOSAR图解==>AUTOSAR_TR_FrancaIntegration
  • 【测试开发】数据类型篇-迭代器和生成器
  • 【二分模版------左闭右闭】
  • Python爬虫实战:研究AutobahnPython相关技术
  • 亚马逊关闭Posts:站内社交梦碎,卖家流量策略急待重构
  • 【有源医疗器械检测的常见问题、整改方法、送检了解】
  • < 自用文儿 腾讯云 VPS > Ubuntu 24 系统,基本设置
  • 2025【证券从业】时间事件
  • JavaScript 原型(Prototype)详解
  • C#调用C++ 结构体方法
  • mapbox高阶,使用mbview发布mbtiles数据为矢量切片服务,并加载
  • 第五节 类型系统进阶-类型守卫(Type Guard)的实现方式
  • ubuntu22.04使用系统默认的中文输入法,打字只输入英文字符怎么操作才能打字中文
  • 网络安全:OWASP防护守则