[W7500x] InterruptIn button(PC_8)

InterruptIn button(PC_8);

으로
void call_start()
{
LED1=!LED1;
wait(1,5);
}
main()
{
button.fall(&call_start);
}

이렇게 인터럽트를 만들었는데
버튼을 한번 눌렀는데 call_start()를 실행하고
돌아와 다시 한번 더 call_start()이실행되는데 왜 그럴까요?

안녕하세요

함수가 반복적으로 실행되는 증상이 혹시 매번 그러나요?

아니면 어떨땐 한번만 실행되고 어떨때는 두번 실행되고 하나요?

예 매번 그럽니다. 그리고

아래 함수인데요

void call_start()
{
    NVIC_DisableIRQ(PORT2_IRQn);   // 인터럽트 Disable 해 놓으니 발생하지는 않네요
    NVIC_DisableIRQ(PORT0_IRQn);
    printf("call...\r\n");
    //disable_irq();
    alarm_relay=1;
    hook_relay=1;
    wait(0.5);
    hook_relay=0;
    alarm_relay=0;
    emer_light=1;
    amp_shutdown=1;

    comm_led=0;
    comm_ing=1;
    wait(0.9);

    while(end_sig==1)
    {
        comm_led=!comm_led;
        wait(0.5);
    }
    amp_shutdown=0;
    emer_light=0;
    comm_led=1;
    comm_ing=0;
    wait(1.0);
    //NVIC_EnableIRQ(PORT2_IRQn);   //이 Enable를 실행되게 하면 같은 증상이 일어나는 거 보니 interrupt 가 발생되는 거네요
    //NVIC_EnableIRQ(PORT0_IRQn);   // Port에 콘덴서도 달아보고 했는데 안 잡히네요
}

안녕하세요

다음과 같이 간단하게 테스트해봤습니다.

스위치로 GPIO Interrupt를 만들었습니다.

테스트 결과 이상없이 한번만 인터럽트가 발생하는것을 확인했습니다.

#include "mbed.h"

InterruptIn button(D8);
 
void call_start()
{
    printf("call...\r\n");
    wait(0.5);
}

main()
{
    button.fall(&call_start);
}

하드웨어적인 채터링효과로 GPIO가 흔들려서 인터럽트가 간혹 두번 발생할 수는 있으나

외부 스위치 문제이기때문에 드라이버나 보드동작과는 무관합니다.

또한 인터럽트 사용시 메뉴얼하게 Disable/ Enable 하지 않으셔도 동작합니다.

현재 무조건 두번 발생한다고 하셨는데

혹시 코드상에 두번 발생하도록 되어있는 부분이 있는지 확인 부탁드립니다.

또한

테스트는 mbed 최신 라이브러리를 사용했습니다.

현재 mbed 라이브러리 버전을 확인해주세요

감사합니다.