一:瑞萨的GPIO口介绍
瑞萨的GPIO口,I/0端口引脚作为通用I/0端口引脚、外围模块I/0引脚、中断输入引脚、模拟I0、ELC的端口组功能运行。
所有引脚在复位后立即作为输入引脚操作,引脚功能通过寄存器设置进行切换。每个引脚的!/0端口和外围模块在相关寄存器中指定。
图18.1显示了1/0端口寄存器的连接图。不同封装的I/0端口配置不同。表18.1按封装列出了1/0端口规格,表18.2列出了端口功能。
二:硬件连接方式:
可以看到瑞萨4L1 开发板板载了两个用户按键P000 和P001,这里我们仪P001,作为本次项目的外部输入端,而LED0,LED1,LED2作为按键状态的显示,直观的显示外部中断按下的状态。
三:FSP的配置过程如下:
我们打开P001引脚的配置如下图所示:
看来P000只能用作外部通道6使用,而且我们需要配置引脚位外部中断模式;
在stack中我们对外部中断的功能进行配置,如下图所示:
属性中主要注意的几个地方:
Name:g_external irg6,这是通道的名称,这里我们使用默认的就可以,不是特别注意到话,不需要修改了。
Channel: 中断的通道号,就是我们具体到哪个通道号,这里配置通道6
Trigger: 触发模式,上升沿触发、下降沿触发、还是上升沿、下降沿都触发,这里为了方便看到效果我使用的是下降沿触发。
Callback:回调函数,这里意思就是当中断触发时候,执行的哪个函数,这里需要我们自己配置
Pin Interrupt Priority:中断优先级的配置,根据该项IO口所对应的功能特点,当同时触发中断时,优先级别高的函数先执行,由于这里只有一个外部中断,所以也就无所谓了
IRQ06:映射到引脚P000,即该中断信号通过引脚P000触发。
三:函数编写:
中断服务函数编写:
当中断触发的时候,下面的中断回调函数会被中断服务程序触发,在下降沿的时,对按下按键的个数进行计数。
bool g_external_irq_complete =0; char inputcount =0 ; /* Called from icu_irq_isr */ void external_irq6_callback (external_irq_callback_args_t * p_args) { (void) p_args; g_external_irq_complete = !g_external_irq_complete; inputcount ++ ; }
主程序中对进入中断处理
if(inputcount%2 == 0) { R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_HIGH); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_HIGH); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_09, BSP_IO_LEVEL_HIGH); } else { R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_LOW); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_LOW); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_09, BSP_IO_LEVEL_LOW); }
实物验证如下:
简单分析一下中断的场景:
通过物理按键或拨动开关等输入装置触发外部中断,实现即时的
一:人机交互响应。典型应用包括:
照明控制(如LED状态切换)、设备启停操、工作模式选择
这种中断机制特别适合需要快速响应手动操作的场景,常见于消费电子、控制面板等设备。
二:环境感知触发
当传感设备监测到预设条件变化时(如温度超标、光照突变等),自动产生中断信号。主要特点包括:
实时环境参数监控、阈值触发响应、自动化处理流程
广泛应用于智能家居、工业控制系统、环境监测等领域,实现对物理量变化的快速响应。
测试代码如下: