Fork me on GitHub

DA14580的外部中断

原创文章,未经允许,请勿转载

函数申明: 
GPIO_EnableIRQ( GPIO_PORT port, GPIO_PIN pin, IRQn_Type irq, bool low_input,
                 bool release_wait, uint8_t debounce_ms )
参数说明:
port 不解释
pin 不解释
IRQn_Type 中断类型
low_input 触发类型:true,下降沿触发;false,上升沿触发
release_wait 是否锁住中断,直到按键放开。如果输入true,即使按键一直保持,也只会触发一次中断;如果输入false,则按键保持期间会不断触发中断,直到松开按键。
debounce_ms 设定按键防抖控制的时间,单位毫秒

da14580和大多数单片机一样,某个端口的所有引脚都可以配置成中断输入,但是同一个端口只能有一个中断回调函数,所以在中断回调函数那里最好判断一下指定的引脚状态是不是处于需要的中断状态。


    #define CLICK_IRQ_PORT         GPIO_PORT_0
    #define CLICK_IRQ_PIN          GPIO_PIN_0
    #define CLICK_IRQ_TYPE        GPIO0_IRQn

    int press_count=0;
    void button_press_callback(void) {

        //这里要判断中断是不是来自于我们指定的引脚
        if(GPIO_GetPinStatus(CLICK_IRQ_PORT, CLICK_IRQ_PIN)) {

            printf_string("*********CLICKED:");
            printf_byte_dec(press_count++);
            printf_string("**********\n\r");
        }

        GPIO_ResetIRQ(CLICK_IRQ_TYPE);

    }

    void button_press_enable(void) {
        //配置成下拉输入
        GPIO_ConfigurePin(CLICK_IRQ_PORT, CLICK_IRQ_PIN, INPUT_PULLDOWN, PID_GPIO, false ); 

        //开启中断
        GPIO_EnableIRQ( CLICK_IRQ_PORT, CLICK_IRQ_PIN, CLICK_IRQ_TYPE, false, true, 120 );

        //注册中断回调函数
        GPIO_RegisterCallback(CLICK_IRQ_TYPE, button_press_callback);
    }

    int main (void)
    {
            system_init();
            periph_init();

        button_press_enable();

            while(1);
    }
    ...

来源:悠游悠游,原文地址:https://yymmss.com/p/da14580-irq.html