瑞萨单片机论坛
直播中

超人

未满1年用户 35经验值
擅长:控制/MCU
私信 关注
[经验]

【RA-Eco-RA4E2-64PIN-V1.0开发板试用】按键点灯:使用轮询方式和中断方式实现

轮询和中断

本篇实现一个简单的功能:按键点灯
也就是按下按钮(SW1:P005)灯点亮(LED1:P207)

电路如下图:

image.png

image.png

或者说实现功能:P005为低电平时,P207为高电平。

有两种方式实现:

1:轮询,CPU不停地检测P005的输入电平状态,如果为低电平,则输出P207为高电平。

2:中断,CPU待机,中断服务器一直待命,若检测到中断,判断是谁触发的,检测到是P005(上升沿),则输出P207为高电平。

这两种方式,很显然中断的方式CPU负荷低,不用一直工作,而且功能多样,可以上升沿/下降沿触发,轮询就不行了。

下面我们分别测试两种方式的实现:
1:轮询

首先设置P005为输入P207为输出。

屏幕截图 2024-12-21 202627.png

屏幕截图 2024-12-21 202726.png

头部定义一个状态变量key,用于传递高低电平
bsp_io_level_t仅有低电平和高电平两种状态

bsp_io_level_t key;

在hal_entry中添加代码:

void hal_entry(void)
{
    /* TODO: add your own code here */

    while(1)
    {
     R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_05, &key);
        if(key == 0)
         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_HIGH);
        else
         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_LOW);
    }
}

2:中断

中断的方式稍微复杂点:

屏幕截图 2024-12-21 213136.png

在设置P005为输入时,还要设置IRQ为IRQ10-DS
P207设置输出方式同轮询中一样。

接下来我们在Stack选项卡中,新建输入中断,中断名称采用默认:
g_external_irq0

image.png

选择新建好的中断g_external_irq0

在底部属性选项卡设置如下:

image.png

最重要的是设置好Channel(通道为10,刚刚在Pin设置时选好的)

触发方式可选:上升沿(Rising)/下降沿(Falling)/Both(前述两种)/Low Level(低电平,有点像前述轮询方式)

image.png

还要设置好Callback函数,也就是中断函数,名字自己取:key_in

voidhal_entry(void)

{

/* TODO: add your own code here */



    R_ICU_ExternalIrqOpen(&g_external_irq0_ctrl, &g_external_irq0_cfg);

    R_ICU_ExternalIrqEnable(&g_external_irq0_ctrl);



while(1);


}





voidkey_in(external_irq_callback_args_t *p_args)

{

/* 判断中断通道 */

if (10 == p_args->channel)

    {

        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_HIGH);   // 按键KEY按下,LED高电平点亮

    }

}
R_ICU_ExternalIrqOpen(&g_external_irq0_ctrl, &g_external_irq0_cfg);

R_ICU_ExternalIrqEnable(&g_external_irq0_ctrl);

上述两句是开启中断

if (10 == p_args->channel)

{

    R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_HIGH);   // 按键KEY按下,LED高电平点亮

}

上述函数是判断哪个通道产生中断,进而执行对应动作。

本次体验就到这里。

更多回帖

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