MSP432P401R第二讲:外部中断与中断优先级

目录

外部中断

相关函数:

gpio.h里:

interrupt.h

配置中断的步骤:

1.配置GPIO配置输入

2.清楚中断标志位

3.配置触发方式

 3.5配置中断优先级

4.开启外部中断

5.开启端口中断

6.开启总中断

7.编写GPIO ISR(中断服务函数)

中断优先级

相关知识:

 配置组优先级:


注意事项:

432并非所有的IO口都可以配置外部中断。从端口7到端口J就不可以配置外部中断了

外部中断

相关函数:

gpio.h里:

1.开启外部中断:GPIO_enableInterrupt(GPIO_PORT_PX, GPIO_PINX);

 2.配置触发方式:GPIO_interruptEdgeSelect(GPIO_PORT_P1, GPIO_PIN1, Edge);

Edge有效值:

GPIO_HIGH_TO_LOW_TRANSITION  //下降沿(只有引脚从高电平变为低电平时才会触发中断)

GPIO_LOW_TO_HIGH_TRANSITION  //上升沿(只有引脚从低电平变为高电平时才会触发中断)

3.获取GPIO中断中断状态:GPIO_getEnabledInterruptStatus(GPIO_PORT_PX);

interrupt.h

5.端口中断:Interrupt_enableInterrupt(INT_PORTX);

INT_PORTX的范围就是从1到6

启用特定端口的中断功能。启用中断后,当该端口满足触发条件时,将会产生中断请求,从而执行中断处理程序。

6.开启总中断:Interrupt_enableMaster();

软件挂起中断:Interrupt_pendInterrupt(interruptNumber)

  interruptNumber—对应中断

屏蔽中断优先级:Interrupt_setPriorityMask(level)

 level(对应的组优先级)为0的时候关闭屏蔽中断优先级;如果填大于0的数字x,则是大于等于x的中断都会被屏蔽掉

配置中断的步骤:

1.配置GPIO配置输入

GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1); //P1.1
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN4); //P1.4

2.清楚中断标志位

GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN4);

3.配置触发方式

GPIO_interruptEdgeSelect(GPIO_PORT_P1, GPIO_PIN1, GPIO_HIGH_TO_LOW_TRANSITION);
GPIO_interruptEdgeSelect(GPIO_PORT_P1, GPIO_PIN4, GPIO_HIGH_TO_LOW_TRANSITION);

 3.5配置中断优先级

Interrupt_setPriority(INT_PORT1, 1 << 5);
Interrupt_setPriority(INT_PORT2, 2 << 5);

4.开启外部中断

GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN4);

5.开启端口中断

Interrupt_enableInterrupt(INT_PORT1);

6.开启总中断

Interrupt_enableMaster();

7.编写GPIO ISR(中断服务函数)

void PORT1_IRQHandler(void)
{
	uint16_t status;
	uint16_t i;
	status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
	GPIO_clearInterruptFlag(GPIO_PORT_P1, status);
	
	
	if (status & GPIO_PIN1) //对应P1.1
	{
		for (i = 0; i < 5000; i++);
		if (KEY1 == 0)
		{
			LED_RED_On(); //点亮红灯
			while (1);
		}
	}
	if (status & GPIO_PIN4) //对应P1.1
	{
		for (i = 0; i < 5000; i++);
		if (KEY1 == 0)
		{
			LED_RED_On(); //点亮红灯
			while (1);
		}
	}
}

中断服务函数:PORTX_IRQHandler

PORTX对应着1-6

中断优先级

相关知识:

MSP432有8级可编程的中断优先级(0-7) 

等级越低,优先级越高

可以动态调整优先级

优先级分为组优先级(可以更改)与子优先级(硬件优先级,已经设置好的,无法更改)

子优先级中断号:

 配置组优先级:

代码:Interrupt_setPriority(INT_PORTX,level);

 level:x<<5(x为0-7).因为只使用高3位,所以配置时要左移5位。

声明:432学习参考UP主m_RNA

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值