RISC-V GD32VF103(四)外部中断

#include "gd32vf103.h"
#include "systick.h"
#include 

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状态变化一次。

 

你可能感兴趣的:(GD32VF103,RISC-V,单片机爱好者)