RISC-V GD32VF103(四)外部中斷

#include "gd32vf103.h"
#include "systick.h"
#include <stdio.h>

void LED_Init(void)
{
    rcu_periph_clock_enable(RCU_GPIOC);//使能GPIOC時鐘
    gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);//PC13--推輓輸出--速度50MHZ
    gpio_bit_write(GPIOC, GPIO_PIN_13, 1);//PC13輸出高電平,LED滅
} 
void Reversal_leve(void)
{
    gpio_bit_write(GPIOC, GPIO_PIN_13, (1-gpio_output_bit_get(GPIOC, GPIO_PIN_13)));//反轉電平
}


void EXTI0_Init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA時鐘
    rcu_periph_clock_enable(RCU_AF);
    
    gpio_init(GPIOA, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, GPIO_PIN_0);//PA0--下拉輸入模式--速度50HMZ
    gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA,GPIO_PIN_SOURCE_0);
    
    eclic_global_interrupt_enable();//使能全局中斷
    eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);//分組
    eclic_irq_enable(EXTI0_IRQn, 1, 1);//使能中斷請求--設置優先級

    exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_RISING);//外部中斷0初始化--中斷模式--上升沿觸發
    exti_interrupt_enable(EXTI_0);//使能外部中斷0
    exti_interrupt_flag_clear(EXTI_0);//清除外部中斷0標誌位
}


int main(void)
{
    LED_Init();
    EXTI0_Init();
    while(1)
    {

    }
}

void EXTI0_IRQHandler(void)
{
    if(RESET != exti_interrupt_flag_get(EXTI_0))//判斷外部中斷0標誌位
    {
        exti_interrupt_flag_clear(EXTI_0);//清除外部中斷0標誌位
        Reversal_leve();
    }
}

 

實驗效果:PA0從低電平轉換爲高電平,LED狀態變化一次。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章