Cortex-A7的GIC(通用中断控制器):边沿触发和电平触发中断的区别

37 篇文章 0 订阅
34 篇文章 0 订阅

0 资料

ARM® Generic Interrupt Controller Architecture version 2.0 Architecture Specification

1 边沿触发和电平触发中断的区别

1.1 边沿触发和电平触发中断官方解释

边沿触发(Edge-triggered)

This is an interrupt that is asserted on detection of a rising edge of
an interrupt signal and then, regardless of the state of the signal,
remains asserted until it is cleared by the conditions defined by this
specification.

当检测到中断上升沿信号时会保持asserted状态(挂起状态),无论此后该中断信号如何变化都会保持asserted状态(挂起状态),直到按照GIC指定的操作将中断清除。
电平触发(Level-sensitive)

This is an interrupt that is asserted whenever the interrupt signal level is active, and deasserted whenever the level is not active.

当中断信号处于有效状态时中断处于asserted状态(挂起状态),当该信号处于无效状态(例如清空中断标志)则该中断会变为未激活状态。

asserted状态参考如下:
在这里插入图片描述

1.2 边沿触发和电平触发中断实验

1.2.1 中断配置为边沿触发

按照官方的解释来看,GIC配置为边沿触发,在触发了中断后会就会设置中断挂起位,即使后面人为清除中断标志中断仍然挂起。操作步骤如下:
(1)配置中断为边沿触发
在这里插入图片描述
(2)测试程序

void irq_test(void)
{
    __disable_irq();
    SET_BIT(EXTI->SWIER1, 1);
    __DMB();
    imx_printf("Get exti0 pend 1 : %d\r\n", IRQ_GetPending(EXTI0_IRQn));
    if (__HAL_GPIO_EXTI_GET_RISING_IT(GPIO_PIN_0) != 0x00U)
    {
        __HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_PIN_0);
    }
    HAL_Delay(1000);
    imx_printf("Get exti0 pend 2 : %d\r\n", IRQ_GetPending(EXTI0_IRQn));
    __enable_irq();
}

测试程序非常简单,在软件触发外部中断后再人为清空中断标志,查看清空中断前后中断挂起位变化。
(3)测试结果
在这里插入图片描述
可以看到在清空中断标志前后中断均为挂起状态,和官方解释一致。

1.2.2 中断配置为电平触发

按照官方的解释来看,GIC配置为电平触发,在触发了中断后会就会设置中断挂起位,如果后面人为清除中断标志中断则会变为未激活状态。操作步骤如下:
(1)配置中断为电平触发
在这里插入图片描述
(2)测试程序

void irq_test(void)
{
    __disable_irq();
    SET_BIT(EXTI->SWIER1, 1);
    __DMB();
    imx_printf("Get exti0 pend 1 : %d\r\n", IRQ_GetPending(EXTI0_IRQn));
    if (__HAL_GPIO_EXTI_GET_RISING_IT(GPIO_PIN_0) != 0x00U)
    {
        __HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_PIN_0);
    }
    HAL_Delay(1000);
    imx_printf("Get exti0 pend 2 : %d\r\n", IRQ_GetPending(EXTI0_IRQn));
    __enable_irq();
}

测试程序非常简单,在软件触发外部中断后再人为清空中断标志,查看清空中断前后中断挂起位变化。
(3)测试结果
在这里插入图片描述
可以看到在清空中断标志前中断为挂起状态,清空后为非挂起状态(未激活状态),和官方解释一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NW嵌入式开发

感谢您的支持,让我们一起进步!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值