MSPM0G3507 ——GPIO例程讲解2——simultaneous_interrupts

主函数:


#include "ti_msp_dl_config.h"int main(void)
{SYSCFG_DL_init();/* Enable Interrupt for both GPIOA and GPIOB ports */NVIC_EnableIRQ(GPIO_SWITCHES_GPIOA_INT_IRQN);                   //启用SWITCHES——A的中断  NVIC_EnableIRQ(GPIO_SWITCHES_GPIOB_INT_IRQN);                   //启用SWITCHES——B的中断  while (1) {__WFI();}
}void GROUP1_IRQHandler(void)
{/** Get the pending interrupt for the GPIOA port and store for* comparisons later                //获取GPIOA端口的挂起中断,并存储以供稍后进行比较*/uint32_t gpioA = DL_GPIO_getEnabledInterruptStatus(GPIOA,GPIO_SWITCHES_USER_SWITCH_1_PIN | GPIO_SWITCHES_USER_SWITCH_3_PIN);   //获取已经启用的中断状态(这里是1和3的中断)/** Bitwise AND the pending interrupt with the pin you want to check,* then check if it is equal to the pins. Clear the interrupt status.*/             //将挂起的中断与要检查的引脚逐位AND,然后检查它是否等于引脚。清除中断状态。//类似于32中得到中断标志位,再判断中断标志位是谁的if ((gpioA & GPIO_SWITCHES_USER_SWITCH_1_PIN) ==GPIO_SWITCHES_USER_SWITCH_1_PIN) //如果成立,则是该中断{DL_GPIO_togglePins(GPIO_LEDS_USER_LED_1_PORT, GPIO_LEDS_USER_LED_1_PIN);DL_GPIO_clearInterruptStatus(GPIOA, GPIO_SWITCHES_USER_SWITCH_1_PIN);}if ((gpioA & GPIO_SWITCHES_USER_SWITCH_3_PIN) == GPIO_SWITCHES_USER_SWITCH_3_PIN) {DL_GPIO_togglePins(GPIO_LEDS_USER_LED_3_PORT, GPIO_LEDS_USER_LED_3_PIN);DL_GPIO_clearInterruptStatus(GPIOA, GPIO_SWITCHES_USER_SWITCH_3_PIN);}/* Repeat with GPIOB Port */uint32_t gpioB = DL_GPIO_getEnabledInterruptStatus( GPIOB, GPIO_SWITCHES_USER_SWITCH_2_PIN);if ((gpioB & GPIO_SWITCHES_USER_SWITCH_2_PIN) ==  GPIO_SWITCHES_USER_SWITCH_2_PIN){DL_GPIO_togglePins(GPIO_LEDS_USER_LED_2_PORT, GPIO_LEDS_USER_LED_2_PIN);DL_GPIO_clearInterruptStatus(GPIOB, GPIO_SWITCHES_USER_SWITCH_2_PIN);}
}

宏定义函数:


#ifndef ti_msp_dl_config_h
#define ti_msp_dl_config_h#define CONFIG_MSPM0G350X#if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__)
#define SYSCONFIG_WEAK __attribute__((weak))
#elif defined(__IAR_SYSTEMS_ICC__)
#define SYSCONFIG_WEAK __weak
#elif defined(__GNUC__)
#define SYSCONFIG_WEAK __attribute__((weak))
#endif#include <ti/devices/msp/msp.h>
#include <ti/driverlib/driverlib.h>
#include <ti/driverlib/m0p/dl_core.h>#ifdef __cplusplus
extern "C" {
#endif/**  ======== SYSCFG_DL_init ========*  Perform all required MSP DL initialization**  This function should be called once at a point before any use of*  MSP DL.*//* clang-format off */#define POWER_STARTUP_DELAY                                                (16)#define CPUCLK_FREQ                                                     32000000/* Defines for USER_LED_1: GPIOA.0 with pinCMx 1 on package pin 33 */
#define GPIO_LEDS_USER_LED_1_PORT                                        (GPIOA)
#define GPIO_LEDS_USER_LED_1_PIN                                 (DL_GPIO_PIN_0)
#define GPIO_LEDS_USER_LED_1_IOMUX                                (IOMUX_PINCM1)
/* Defines for USER_LED_2: GPIOB.27 with pinCMx 58 on package pin 29 */
#define GPIO_LEDS_USER_LED_2_PORT                                        (GPIOB)
#define GPIO_LEDS_USER_LED_2_PIN                                (DL_GPIO_PIN_27)
#define GPIO_LEDS_USER_LED_2_IOMUX                               (IOMUX_PINCM58)
/* Defines for USER_LED_3: GPIOB.26 with pinCMx 57 on package pin 28 */
#define GPIO_LEDS_USER_LED_3_PORT                                        (GPIOB)
#define GPIO_LEDS_USER_LED_3_PIN                                (DL_GPIO_PIN_26)
#define GPIO_LEDS_USER_LED_3_IOMUX                               (IOMUX_PINCM57)
/* Defines for USER_SWITCH_1: GPIOA.12 with pinCMx 34 on package pin 5 */
#define GPIO_SWITCHES_USER_SWITCH_1_PORT                                 (GPIOA)
// pins affected by this interrupt request:["USER_SWITCH_1","USER_SWITCH_3"]
#define GPIO_SWITCHES_GPIOA_INT_IRQN                            (GPIOA_INT_IRQn)
#define GPIO_SWITCHES_GPIOA_INT_IIDX            (DL_INTERRUPT_GROUP1_IIDX_GPIOA)
#define GPIO_SWITCHES_USER_SWITCH_1_IIDX                    (DL_GPIO_IIDX_DIO12)
#define GPIO_SWITCHES_USER_SWITCH_1_PIN                         (DL_GPIO_PIN_12)
#define GPIO_SWITCHES_USER_SWITCH_1_IOMUX                        (IOMUX_PINCM34)
/* Defines for USER_SWITCH_2: GPIOB.12 with pinCMx 29 on package pin 64 */
#define GPIO_SWITCHES_USER_SWITCH_2_PORT                                 (GPIOB)
// pins affected by this interrupt request:["USER_SWITCH_2"]
#define GPIO_SWITCHES_GPIOB_INT_IRQN                            (GPIOB_INT_IRQn)
#define GPIO_SWITCHES_GPIOB_INT_IIDX            (DL_INTERRUPT_GROUP1_IIDX_GPIOB)
#define GPIO_SWITCHES_USER_SWITCH_2_IIDX                    (DL_GPIO_IIDX_DIO12)
#define GPIO_SWITCHES_USER_SWITCH_2_PIN                         (DL_GPIO_PIN_12)
#define GPIO_SWITCHES_USER_SWITCH_2_IOMUX                        (IOMUX_PINCM29)
/* Defines for USER_SWITCH_3: GPIOA.13 with pinCMx 35 on package pin 6 */
#define GPIO_SWITCHES_USER_SWITCH_3_PORT                                 (GPIOA)
#define GPIO_SWITCHES_USER_SWITCH_3_IIDX                    (DL_GPIO_IIDX_DIO13)
#define GPIO_SWITCHES_USER_SWITCH_3_PIN                         (DL_GPIO_PIN_13)
#define GPIO_SWITCHES_USER_SWITCH_3_IOMUX                        (IOMUX_PINCM35)/* clang-format on */void SYSCFG_DL_init(void);
void SYSCFG_DL_initPower(void);
void SYSCFG_DL_GPIO_init(void);
void SYSCFG_DL_SYSCTL_init(void);#ifdef __cplusplus
}
#endif#endif /* ti_msp_dl_config_h */

主函数中使用了该函数:

DL_GPIO_getEnabledInterruptStatus 

用法,参数,返回值如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的Lambda表达式:从入门到精通

Java中的Lambda表达式&#xff1a;从入门到精通 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; Lambda表达式是Java 8引入的一项重要特性&#xff0c;它为Jav…

【数据结构与算法】哈夫曼树,哈夫曼编码 详解

哈夫曼树的数据结构。 struct TreeNode {ElemType data;TreeNode *left, *right; }; using HuffmanTree TreeNode *;结构体包含三个成员&#xff1a; data 是一个 ElemType 类型的变量&#xff0c;用于存储哈夫曼树节点的数据。left 是一个指向 TreeNode 类型的指针&#xf…

2024.06.20【读书笔记】丨生物信息学与功能基因组学(第十六章 真核生物基因组 第四部分)【AI测试版】

《生物信息学与功能基因组学》第十六章读书笔记(第四部分) 真核基因组的比较分析 真核生物基因组的比较分析有助于揭示不同物种间的进化关系和生物学特性。通过比较不同物种的基因组序列,可以发现保守的基因区域和快速进化的基因家族。 基因组水平转移 基因组水平转移是…

MATLAB句柄简记

文章目录 MATLAB句柄函数句柄的简单操作函数 MATLAB句柄 MATLAB平台对于函数调用分为直接调用和间接调用。直接调用即调用子函数。   子函数只能被与它所在M文件同名的主函数或者在M文件内的其他函数调用。一个文件只能有一个主函数。   使用函数句柄可以避免上述问题。句柄…

docker镜像基本操作

文章目录 前言1. 列出本地镜像2. 搜索 Docker Hub 上的镜像3. 拉取镜像4. 删除镜像5. 删除多个镜像6. 强制删除镜像7. 导出镜像8. 导入镜像9. 标记镜像10. 构建镜像11. 检查镜像12. 镜像历史 前言 Docker 镜像是只读模板&#xff0c;用于创建 Docker 容器。以下是一些常用的 D…

(014)Mirror 问题

文章目录 场景里面的无法检测到碰撞、刚体的同步组件异常等&#xff1f;在服务端调用 NetworkServer.Spawn之后&#xff0c;出现了客户端看不到物体情况&#xff1f; 场景里面的无法检测到碰撞、刚体的同步组件异常等&#xff1f; 如果场景是通过 Additive 的方式加载的&#…

强化学习中的自我博弈(self-play)

自我博弈&#xff08;Self-Play&#xff09;[1]是应用于智能体于智能体之间处于对抗关系的训练方法&#xff0c;这里的对抗关系指的是一方的奖励上升必然导致另一方的奖励下降。通过轮流训练双方的智能体就能使得双方的策略模型的性能得到显著提升&#xff0c;使得整个对抗系统…

CBA认证-业务架构师认证的尚方宝剑

CBA业务架构师认证是一种由业务架构师公会&#xff08;Business Architecture Guild&#xff09;授予的专业认证&#xff0c;全称为Certified Business Architect&#xff0c;简称CBA。以下是关于CBA业务架构师认证的主要信息和特点&#xff1a; 认证目的&#xff1a; CBA认证…

for循环 - while循环 - 习题解析

1389. 数据分析 问题描述 某军事单位采用特殊加密方法传递信息。传递一个整数n&#xff08;10位以内&#xff09;&#xff0c;其长度代表第一个数字信息&#xff0c;将n的偶数位相加得到第二个数字信息。要求编写程序从n中获取这两个数字信息。 解题思路 读取输入&#xff1a…

基于淘宝商城用户购物行为数据分析系统

摘 要 在电商行业高速发展的今天&#xff0c;用户购物行为数据量呈指数型增长&#xff0c;传统的数据处理架构已经无法满足于现如今的数据处理需求。针对于这样的需求本课题设计了一种基于淘宝的用户购物行为分析系统&#xff0c;旨在通过对大量数据进行分析处理进而深入研究用…

MybatisPlus 调用 原生SQL

方式一 DemoMapper.java Mapper public interface DemoMapper extends BaseMapper<TableConfig> {Update("${sql}")int createTable(Param("sql") String sql); }测试代码 SpringBootTest class DemoMapperTest {Resourceprivate DemoMapper demo…

Portainer.io安装并配置Docker远程访问及CA证书

Portainer.io安装并配置Docker远程访问及CA证书 文章目录 Portainer.io安装并配置Docker远程访问及CA证书一.安装 Portainer.io2.启动容器 二.docker API远程访问并配置CA安全认证1.配置安全(密钥)访问2.补全CA证书信息3.生成server-key.pem4.创建服务端签名请求证书文件5.创建…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

uniapp(全端兼容) - 最新详细实现刻度尺组件效果,uni-app实现尺子打分及手指拖动刻度尺打分评分功能,可左右滑动刻度尺改变数值、带刻度尺滑块功能、

效果图 在uniapp微信小程序/手机h5网页网站/安卓app/苹果app/支付宝小程序/nvue等(全平台完美兼容)开发中,实现uniApp各端都兼容的 “刻度尺(横格尺 | 尺子)” 手势左右两侧拖动、手指滑动刻度尺功能,水平刻度尺,支持自定义尺子颜色、大小、刻度、滑动时的步进值、最大…

深入探索Netty的事件驱动模型与实现原理

深入探索Netty的事件驱动模型与实现原理 Netty是一个基于事件驱动的高性能网络应用框架&#xff08;学习netty请参考&#xff1a;&#x1f517;深入浅出Netty&#xff1a;高性能网络应用框架的原理与实践&#xff09;&#xff0c;其设计核心是高效处理网络I/O事件。事件驱动模…

分享计算机msvcp100.dll,丢失或找不到的7个解决方法

msvcp100.dll是动态链接库文件对于执行使用 Microsoft Visual C 2010 编译器编译的应用程序至关重要。它包含了 C 标准库的实现&#xff0c;提供了应用程序运行时所需的核心功能&#xff0c;如输入/输出操作、字符串处理、数学运算和异常处理等。若系统中缺失或损坏此文件&…

低代码平台框架:开源选型、实践与应用深度解析

文章目录 1.1 低代码平台的重要性与应用背景2.1 表单建模2.2 流程设计2.3 报表&#xff08;打印&#xff09;可视化2.4 代码生成器2.5 系统管理2.6 前端UI开源选型3.1 如何选择合适的开源框架3.2 市场上的主要开源低代码平台对比3.3 开源项目的技术栈与优缺点分析 5.1 成功案例…

【详细】一步一步实现一个BP神经网络-逐行代码解说

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ ​ 要如何使用代码实现一个BP神经网络呢&#xff1f; 下面跟随笔者&#xff0c;一步一步详细来实现&#xff0c;再对代码进行详细解说。 通过本文可以详细掌握怎么使用matlab来实现一个BP神经网络。 一、一步一步实…

# 消息中间件 RocketMQ 高级功能和源码分析(八)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;八&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a;实时更新消息消费队列与索引文件流程说明 1、实时更新消息消费队列与索引文件 消息消费队文件、消息属性索引文件都是基于 CommitLog 文件构建的&#xff0…

点击旋转箭头样式

实现效果&#xff1a; html界面&#xff0c;主要通过isdown来控制箭头是上还是下 <el-popoverplacement"bottom"trigger"click":visible-arrow"false"v-model"isdown"popper-class"user-popover"><divslot"re…