[MSP-EXP432P401R] MSP432P401R--3层中断嵌套

  [复制链接]

12

主题

49

帖子

1383

积分

单晶硅锭

Rank: 3Rank: 3

积分
1383
楼主
查看: 3788回复: 0 发表于 2021-5-5 00:32:31   只看该作者
1.开发板
MSP432P401R LaunchPad


2.
* MSP432 Interrupt Controller - 3 Priorities
*
* 功能描述:开发板S1(P1.1)按下,LED2闪烁绿灯50次,对应PORT1_IRQHandler,优先级最高。
* 键盘S2(P2.4)按下,LED2闪烁红灯50次,对应PORT2_IRQHandler,优先级第二。
* 键盘S1(P3.0)按下,LED1闪烁红灯50次,对应PORT3_IRQHandler,优先级第三。
* 优先级高的可以打断优先级低的,转去处理优先级高的函数。优先级低的不能打断优先级高的。

3.硬件连接
*                MSP432P401
*             ------------------
*         /|\|            P1.1  |<--Toggle Switch
*          | |            P1.0  |---> P1.0 LED
*          --|RST               |
*            |            P2.4  |<--键盘C2
*            |            P2.0  |---> P2.0 RED LED
*            |                  |
*            |            P3.0  |<--键盘C1
*            |            P2.1  |---> P2.1 GREEN LED
*            |            P5.6  |<--键盘R1

4.代码
  1. #include <ti/devices/msp432p4xx/driverlib/driverlib.h>

  2. /* Standard Includes */
  3. #include <stdint.h>
  4. #include <stdbool.h>

  5. int main(void)
  6. {
  7.     //关闭看门狗
  8.     MAP_WDT_A_holdTimer();

  9.     // 配置 LED输出
  10.     MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
  11.     MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
  12.     MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0 + GPIO_PIN1);
  13.     MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0 + GPIO_PIN1);
  14. //    MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);
  15. //    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);

  16.     // 配置 GPIO
  17.     MAP_GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN6);
  18.     MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);                //行信号拉低,方便进入中断
  19.     MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P3, GPIO_PIN0);
  20.     MAP_GPIO_clearInterruptFlag(GPIO_PORT_P3, GPIO_PIN0);               //配置C1为上拉电阻中断
  21.     MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN4);
  22.     MAP_GPIO_clearInterruptFlag(GPIO_PORT_P2, GPIO_PIN4);               //配置C2为上拉电阻中断
  23.     MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
  24.     MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);               //配置P1.1为上拉电阻中断

  25.     // 配置中断优先等级
  26.     MAP_Interrupt_setPriority(INT_PORT1, 1 << 5);     //PORT1优先级最高
  27.     MAP_Interrupt_setPriority(INT_PORT2, 2 << 5);     //PORT2优先级第二
  28.     MAP_Interrupt_setPriority(INT_PORT3, 3 << 5);     //PORT3优先级第三
  29. //    MAP_Interrupt_setPriorityMask(2 << 5);  //setting the priority mask to 0x40

  30.     // 中断使能
  31.     MAP_GPIO_enableInterrupt(GPIO_PORT_P3, GPIO_PIN0);
  32.     MAP_Interrupt_enableInterrupt(INT_PORT3);
  33.     MAP_GPIO_enableInterrupt(GPIO_PORT_P2, GPIO_PIN4);
  34.     MAP_Interrupt_enableInterrupt(INT_PORT2);
  35.     MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
  36.     MAP_Interrupt_enableInterrupt(INT_PORT1);

  37.     while(1)
  38.     {
  39.         MAP_PCM_gotoLPM0();       //进入低功耗模式
  40.     }
  41. }

  42. // GPIO ISR3优先级最低
  43. void PORT3_IRQHandler(void)
  44. {
  45.     uint32_t status1,i1,k1;

  46.     status1 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P3);
  47.     MAP_GPIO_clearInterruptFlag(GPIO_PORT_P3, status1);        //清除中断标志位
  48.     for(k1=0;k1<100;k1++)
  49.     {
  50.         for(i1=0;i1<50000;i1++)
  51.         {
  52.         }
  53.         MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);   //LED1闪烁50次
  54.     }
  55. }

  56. // GPIO ISR2优先级第二
  57. void PORT2_IRQHandler(void)
  58. {
  59.     uint32_t status2,i2,k2;

  60.     status2 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P2);
  61.     MAP_GPIO_clearInterruptFlag(GPIO_PORT_P2, status2);        //清除中断标志位
  62.     for(k2=0;k2<100;k2++)
  63.     {
  64.         for(i2=0;i2<50000;i2++)
  65.         {
  66.         }
  67.         MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);   //LED2红灯闪烁50次
  68.     }
  69. }

  70. // GPIO ISR1优先级最高
  71. void PORT1_IRQHandler(void)
  72. {
  73.     uint32_t status3,i3,k3;

  74.     status3 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
  75.     MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status3);        //清除中断标志位
  76.     for(k3=0;k3<100;k3++)
  77.     {
  78.         for(i3=0;i3<50000;i3++)
  79.         {
  80.         }
  81.         MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);   //LED2绿灯闪烁50次
  82.     }
  83. //    MAP_Interrupt_setPriorityMask(0);    //清除中断屏蔽
  84. }
复制代码



5.工程
interrupt_3_priority_MSP_EXP432P401R_20210504.zip (119.77 KB, 下载次数: 19)

打赏

参与人数 13赫兹币 +61 收起 理由
hu158 + 5
mei187 + 1
PIDqqq + 5
lithiumice + 5 很给力!
blueblues + 5
辜浩珉 + 5 赞一个!
zombiejbt + 5
hw123456 + 5
JTao + 5
RHAnthony + 5
csj0710 + 5
shenweizuibang + 5
bly + 5 很给力!

查看全部打赏

快速回复 返回顶部 返回列表