[RA4 & RA6] 瑞萨RA4E2的IO Port代码风格

[复制链接]
59|4
FrostShimmer 发表于 2026-4-9 10:04 | 显示全部楼层 |阅读模式

瑞萨RA4E2的IO Port代码风格

初学瑞萨RA4E2还是挺生硬的,主要是不了解瑞萨的命名规则与代码书写风格。本帖子就先分享一下瑞萨FSP中的IO配置部分。

瑞萨的FSP和其RA4E2的技术手册与其它国产或同行的命名大不相同,比如别人都把IO称为GPIO,即通用IO,而瑞萨称为IO Port。这使得我刚打开技术手册时第一时间没有找到~~

还有一个大不同,别人家对IO的Port口分类是按英文字母排序,比如GPIOA,GPIOB,而瑞萨的FSP和技术手册是按数字,百位数为Port口标识,十位和个位代表引脚IO的标号。举个例子,对于之前的PA5,瑞萨为P005引脚;PB6,瑞萨为P106;PC13,瑞萨则为P313。

再返回技术手册,可以看到瑞萨FSP在设计寄存器时同样使用了Port口数值的偏移量。

瑞萨IOport寄存器.jpg

Portm = 0x4008_0000 + 0x20 * m (m = 0-5,8),这样下来,

对于P005的基地址的m = 0;

对于P106的基地址的m = 1;

对于P313的基地址的m = 3;

我们再查看FSP的源代码,其预定义也是类似实现:

IOPORT_PORT_00_PIN_05 = 0x0005,    ///< IO port 0 pin 5
IOPORT_PORT_01_PIN_06 = 0x0106,    ///< IO port 1 pin 6
IOPORT_PORT_03_PIN_13 = 0x030D,    ///< IO port 3 pin 13

通过上述源代码可以清晰看到FSP将Port口的数值放置于bit[15:8]位。基于此设计,瑞萨FSP在配置引脚的过程中也是先将引脚定义右移8位,获取到Port的偏移量数值后再做对应引脚的配置。

/* Write configuration */
    R_PFS->PORT[pin >> IOPORT_PRV_PORT_OFFSET].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = value;

明白了瑞萨FSP的代码风格,我们阅读技术手册时对IO Port的理解也就更方便了。对于IO Port的其它参数,如默认电平,驱动能力等均与其它Cortex-M内核的MCU的配置相同,此处不过多描述。接下来,我们再看看基于瑞萨FSP代码库如何初始化IO Port来驱动LED灯闪烁。

瑞萨FSP是先调用 R_IOPORT_Open(),初始化IO引脚,再调用 R_IOPORT_PinWrite()控制引脚的高低电平。使用起来还是挺简单的。

/* Configure pins. */
R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);

while(1)
{
  R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
  R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_LOW);
  R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
  R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_HIGH);
}
codingtuzi 发表于 2026-4-9 14:16 | 显示全部楼层
这么看来瑞萨的FSP的确还是有比较大的不同。
lemonboard 发表于 2026-4-9 14:37 | 显示全部楼层
牛X
其它帖子都是如何使用FSP的,楼主是带着大家学习FSP的。
献上我的膝盖
晚晚皆安 发表于 2026-5-2 17:31 | 显示全部楼层
RA4E2的IO Port命名规则确实独特,但只要掌握了规律,阅读技术手册和代码就会变得容易很多。
林间有新绿 发表于 2026-5-6 11:25 | 显示全部楼层
RA4E2的IO Port命名规则确实需要一点时间适应,但通过你的分享,我对瑞萨的IO Port有了更深的理解,感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0