单片机/MCUwilliam hill官网
直播中

张桂兰

7年用户 1351经验值
私信 关注
[问答]

AURIX™ TC399如何在引脚上设置边缘触发中断?

我正在使用AURIX™ TC399,在我的项目中,我使用大约 40 个引脚作为输入引脚。 我需要在这些引脚上设置边缘触发中断。 我找到了 ERU 示例代码。 但我无法将所有这些引脚设置为中断引脚。 是否有办法使用 ERU 为这些 GPIO 配置中断?
或者有其他配置方法吗?

回帖(1)

1652711011.026500

2024-3-4 16:19:17
在AURIX™ TC399上,您可以使用ERU (Event Request Unit)来配置边缘触发中断。ERU模块有4个ERU单元,每个单元都可以用于配置GPIO引脚的中断。

下面是一个示例代码,演示了如何使用ERU配置引脚为边缘触发中断:

```c
#include

void eru_init(void)
{
    /* Enable ERU module */
    SCU->PDISC = (SCU_PDISC1_PD15_Msk |
                  SCU_PDISC1_PD14_Msk |
                  SCU_PDISC1_PD13_Msk |
                  SCU_PDISC1_PD12_Msk);  /* Configure ERU pins as input */

    ERU0->EXISEL |= (ERU_EXISEL_EXS0_Msk |  
                     ERU_EXISEL_EXS1_Msk |
                     ERU_EXISEL_EXS2_Msk |
                     ERU_EXISEL_EXS3_Msk); /* Select input event source as inputs into the ERU unit */
  
    ERU0->EXICON[0] |= (ERU_EXICON_FEN0_Msk |
                        ERU_EXICON_FEN1_Msk |
                        ERU_EXICON_FEN2_Msk |
                        ERU_EXICON_FEN3_Msk); /* Enable falling edge interrupt detection */
  
    ERU0->EXICON[1] |= (ERU_EXICON_REN0_Msk |
                        ERU_EXICON_REN1_Msk |
                        ERU_EXICON_REN2_Msk |
                        ERU_EXICON_REN3_Msk); /* Enable rising edge interrupt detection */
  
    ERU0->EXICON[2] |= (ERU_EXICON_RT0_Msk |
                        ERU_EXICON_RT1_Msk |
                        ERU_EXICON_RT2_Msk |
                        ERU_EXICON_RT3_Msk); /* Enable request generation on rising edge detection */
  
    ERU0->EXICON[3] |= (ERU_EXICON_FT0_Msk |
                        ERU_EXICON_FT1_Msk |
                        ERU_EXICON_FT2_Msk |
                        ERU_EXICON_FT3_Msk); /* Enable request generation on falling edge detection */

    /* Enable interrupt for ERU0 */
    NVIC->IP[ERU0_0_IRQn] = 0x10; /* Set interrupt priority */
    NVIC_EnableIRQ(ERU0_0_IRQn); /* Enable interrupt */
}

void ERU0_0_IRQHandler(void)
{
    /* Handle interrupt for ERU0 0 */
    // Your code here
}

int main(void)
{
    eru_init();
  
    while (1)
    {
        /* Main loop */
        // Your code here
    }
  
    return 0;
}
```

上述代码中,`eru_init()`函数用于初始化ERU模块和相关引脚。在该函数中,您需要根据您的需求配置输入引脚的中断类型,如上例中所示。您可以根据需要设置边沿触发类型和请求生成,可以使用下降沿中断(`ERU_EXICON_FENx_Msk`),或上升沿中断(`ERU_EXICON_RENx_Msk`),也可以用其他中断类型配置ERU寄存器。

`ERU0_0_IRQHandler()`函数是ERU0的中断处理函数,您可以在其中处理中断事件。

请注意,您需要根据您的具体板级文件和芯片规格手册来调整和配置这些功能。

希望这可以帮助到您!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分