|
楼主
查看: 3790回复: 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.代码
- #include <ti/devices/msp432p4xx/driverlib/driverlib.h>
- /* Standard Includes */
- #include <stdint.h>
- #include <stdbool.h>
- int main(void)
- {
- //关闭看门狗
- MAP_WDT_A_holdTimer();
- // 配置 LED输出
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0 + GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0 + GPIO_PIN1);
- // MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);
- // MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- // 配置 GPIO
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6); //行信号拉低,方便进入中断
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P3, GPIO_PIN0);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P3, GPIO_PIN0); //配置C1为上拉电阻中断
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P2, GPIO_PIN4); //配置C2为上拉电阻中断
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1); //配置P1.1为上拉电阻中断
- // 配置中断优先等级
- MAP_Interrupt_setPriority(INT_PORT1, 1 << 5); //PORT1优先级最高
- MAP_Interrupt_setPriority(INT_PORT2, 2 << 5); //PORT2优先级第二
- MAP_Interrupt_setPriority(INT_PORT3, 3 << 5); //PORT3优先级第三
- // MAP_Interrupt_setPriorityMask(2 << 5); //setting the priority mask to 0x40
- // 中断使能
- MAP_GPIO_enableInterrupt(GPIO_PORT_P3, GPIO_PIN0);
- MAP_Interrupt_enableInterrupt(INT_PORT3);
- MAP_GPIO_enableInterrupt(GPIO_PORT_P2, GPIO_PIN4);
- MAP_Interrupt_enableInterrupt(INT_PORT2);
- MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
- MAP_Interrupt_enableInterrupt(INT_PORT1);
- while(1)
- {
- MAP_PCM_gotoLPM0(); //进入低功耗模式
- }
- }
- // GPIO ISR3优先级最低
- void PORT3_IRQHandler(void)
- {
- uint32_t status1,i1,k1;
- status1 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P3);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P3, status1); //清除中断标志位
- for(k1=0;k1<100;k1++)
- {
- for(i1=0;i1<50000;i1++)
- {
- }
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //LED1闪烁50次
- }
- }
- // GPIO ISR2优先级第二
- void PORT2_IRQHandler(void)
- {
- uint32_t status2,i2,k2;
- status2 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P2);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P2, status2); //清除中断标志位
- for(k2=0;k2<100;k2++)
- {
- for(i2=0;i2<50000;i2++)
- {
- }
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0); //LED2红灯闪烁50次
- }
- }
- // GPIO ISR1优先级最高
- void PORT1_IRQHandler(void)
- {
- uint32_t status3,i3,k3;
- status3 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status3); //清除中断标志位
- for(k3=0;k3<100;k3++)
- {
- for(i3=0;i3<50000;i3++)
- {
- }
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1); //LED2绿灯闪烁50次
- }
- // MAP_Interrupt_setPriorityMask(0); //清除中断屏蔽
- }
复制代码
5.工程
interrupt_3_priority_MSP_EXP432P401R_20210504.zip
(119.77 KB, 下载次数: 19)
|
打赏
-
查看全部打赏
|