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


    主函数:

    1. #include "ti_msp_dl_config.h"
    2. int main(void)
    3. {
    4. SYSCFG_DL_init();
    5. /* Enable Interrupt for both GPIOA and GPIOB ports */
    6. NVIC_EnableIRQ(GPIO_SWITCHES_GPIOA_INT_IRQN); //启用SWITCHES——A的中断
    7. NVIC_EnableIRQ(GPIO_SWITCHES_GPIOB_INT_IRQN); //启用SWITCHES——B的中断
    8. while (1) {
    9. __WFI();
    10. }
    11. }
    12. void GROUP1_IRQHandler(void)
    13. {
    14. /*
    15. * Get the pending interrupt for the GPIOA port and store for
    16. * comparisons later //获取GPIOA端口的挂起中断,并存储以供稍后进行比较
    17. */
    18. uint32_t gpioA = DL_GPIO_getEnabledInterruptStatus(GPIOA,GPIO_SWITCHES_USER_SWITCH_1_PIN | GPIO_SWITCHES_USER_SWITCH_3_PIN);
    19. //获取已经启用的中断状态(这里是13的中断)
    20. /*
    21. * Bitwise AND the pending interrupt with the pin you want to check,
    22. * then check if it is equal to the pins. Clear the interrupt status.
    23. */ //将挂起的中断与要检查的引脚逐位AND,然后检查它是否等于引脚。清除中断状态。
    24. //类似于32中得到中断标志位,再判断中断标志位是谁的
    25. if ((gpioA & GPIO_SWITCHES_USER_SWITCH_1_PIN) ==GPIO_SWITCHES_USER_SWITCH_1_PIN) //如果成立,则是该中断
    26. {
    27. DL_GPIO_togglePins(GPIO_LEDS_USER_LED_1_PORT, GPIO_LEDS_USER_LED_1_PIN);
    28. DL_GPIO_clearInterruptStatus(GPIOA, GPIO_SWITCHES_USER_SWITCH_1_PIN);
    29. }
    30. if ((gpioA & GPIO_SWITCHES_USER_SWITCH_3_PIN) == GPIO_SWITCHES_USER_SWITCH_3_PIN)
    31. {
    32. DL_GPIO_togglePins(GPIO_LEDS_USER_LED_3_PORT, GPIO_LEDS_USER_LED_3_PIN);
    33. DL_GPIO_clearInterruptStatus(GPIOA, GPIO_SWITCHES_USER_SWITCH_3_PIN);
    34. }
    35. /* Repeat with GPIOB Port */
    36. uint32_t gpioB = DL_GPIO_getEnabledInterruptStatus( GPIOB, GPIO_SWITCHES_USER_SWITCH_2_PIN);
    37. if ((gpioB & GPIO_SWITCHES_USER_SWITCH_2_PIN) == GPIO_SWITCHES_USER_SWITCH_2_PIN)
    38. {
    39. DL_GPIO_togglePins(GPIO_LEDS_USER_LED_2_PORT, GPIO_LEDS_USER_LED_2_PIN);
    40. DL_GPIO_clearInterruptStatus(GPIOB, GPIO_SWITCHES_USER_SWITCH_2_PIN);
    41. }
    42. }

    宏定义函数

    1. #ifndef ti_msp_dl_config_h
    2. #define ti_msp_dl_config_h
    3. #define CONFIG_MSPM0G350X
    4. #if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__)
    5. #define SYSCONFIG_WEAK __attribute__((weak))
    6. #elif defined(__IAR_SYSTEMS_ICC__)
    7. #define SYSCONFIG_WEAK __weak
    8. #elif defined(__GNUC__)
    9. #define SYSCONFIG_WEAK __attribute__((weak))
    10. #endif
    11. #include <ti/devices/msp/msp.h>
    12. #include <ti/driverlib/driverlib.h>
    13. #include <ti/driverlib/m0p/dl_core.h>
    14. #ifdef __cplusplus
    15. extern "C" {
    16. #endif
    17. /*
    18. * ======== SYSCFG_DL_init ========
    19. * Perform all required MSP DL initialization
    20. *
    21. * This function should be called once at a point before any use of
    22. * MSP DL.
    23. */
    24. /* clang-format off */
    25. #define POWER_STARTUP_DELAY (16)
    26. #define CPUCLK_FREQ 32000000
    27. /* Defines for USER_LED_1: GPIOA.0 with pinCMx 1 on package pin 33 */
    28. #define GPIO_LEDS_USER_LED_1_PORT (GPIOA)
    29. #define GPIO_LEDS_USER_LED_1_PIN (DL_GPIO_PIN_0)
    30. #define GPIO_LEDS_USER_LED_1_IOMUX (IOMUX_PINCM1)
    31. /* Defines for USER_LED_2: GPIOB.27 with pinCMx 58 on package pin 29 */
    32. #define GPIO_LEDS_USER_LED_2_PORT (GPIOB)
    33. #define GPIO_LEDS_USER_LED_2_PIN (DL_GPIO_PIN_27)
    34. #define GPIO_LEDS_USER_LED_2_IOMUX (IOMUX_PINCM58)
    35. /* Defines for USER_LED_3: GPIOB.26 with pinCMx 57 on package pin 28 */
    36. #define GPIO_LEDS_USER_LED_3_PORT (GPIOB)
    37. #define GPIO_LEDS_USER_LED_3_PIN (DL_GPIO_PIN_26)
    38. #define GPIO_LEDS_USER_LED_3_IOMUX (IOMUX_PINCM57)
    39. /* Defines for USER_SWITCH_1: GPIOA.12 with pinCMx 34 on package pin 5 */
    40. #define GPIO_SWITCHES_USER_SWITCH_1_PORT (GPIOA)
    41. // pins affected by this interrupt request:["USER_SWITCH_1","USER_SWITCH_3"]
    42. #define GPIO_SWITCHES_GPIOA_INT_IRQN (GPIOA_INT_IRQn)
    43. #define GPIO_SWITCHES_GPIOA_INT_IIDX (DL_INTERRUPT_GROUP1_IIDX_GPIOA)
    44. #define GPIO_SWITCHES_USER_SWITCH_1_IIDX (DL_GPIO_IIDX_DIO12)
    45. #define GPIO_SWITCHES_USER_SWITCH_1_PIN (DL_GPIO_PIN_12)
    46. #define GPIO_SWITCHES_USER_SWITCH_1_IOMUX (IOMUX_PINCM34)
    47. /* Defines for USER_SWITCH_2: GPIOB.12 with pinCMx 29 on package pin 64 */
    48. #define GPIO_SWITCHES_USER_SWITCH_2_PORT (GPIOB)
    49. // pins affected by this interrupt request:["USER_SWITCH_2"]
    50. #define GPIO_SWITCHES_GPIOB_INT_IRQN (GPIOB_INT_IRQn)
    51. #define GPIO_SWITCHES_GPIOB_INT_IIDX (DL_INTERRUPT_GROUP1_IIDX_GPIOB)
    52. #define GPIO_SWITCHES_USER_SWITCH_2_IIDX (DL_GPIO_IIDX_DIO12)
    53. #define GPIO_SWITCHES_USER_SWITCH_2_PIN (DL_GPIO_PIN_12)
    54. #define GPIO_SWITCHES_USER_SWITCH_2_IOMUX (IOMUX_PINCM29)
    55. /* Defines for USER_SWITCH_3: GPIOA.13 with pinCMx 35 on package pin 6 */
    56. #define GPIO_SWITCHES_USER_SWITCH_3_PORT (GPIOA)
    57. #define GPIO_SWITCHES_USER_SWITCH_3_IIDX (DL_GPIO_IIDX_DIO13)
    58. #define GPIO_SWITCHES_USER_SWITCH_3_PIN (DL_GPIO_PIN_13)
    59. #define GPIO_SWITCHES_USER_SWITCH_3_IOMUX (IOMUX_PINCM35)
    60. /* clang-format on */
    61. void SYSCFG_DL_init(void);
    62. void SYSCFG_DL_initPower(void);
    63. void SYSCFG_DL_GPIO_init(void);
    64. void SYSCFG_DL_SYSCTL_init(void);
    65. #ifdef __cplusplus
    66. }
    67. #endif
    68. #endif /* ti_msp_dl_config_h */

    主函数中使用了该函数:

    DL_GPIO_getEnabledInterruptStatus 

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

     

  • 相关阅读:
    基于Springboot+MySQL的个人健康监控管理系统
    ubuntu给终端加代理服务器
    【软件设计模式之迭代器与组合模式】
    记录前后端接口使用AES+RSA混合加解密
    组合模式 rust和java的实现
    Maven assembly多模块多环境(dev|test|prod)定制化打包SpringBoot项目详解
    SpringBoot和Vue整合ECharts——基于SpringBoot和Vue的后台管理系统项目系列博客(十六)
    机器学习笔记 - 用于3D物体检测的KITTI数据集的使用及说明
    USACO21FEB Modern Art 3 G
    【Linux】perf工作中最常用命令记录(包含火焰图)
  • 原文地址:https://blog.csdn.net/2302_80529671/article/details/139889131