在单片机开发领域,点亮 LED 灯如同编程界的 “Hello World” 程序,是初学者入门的经典实例。对于瑞萨 RA 系列芯片开发而言,用寄存器点亮 LED 灯是重要的基础内容。本文将基于《RA6M5 Group User’s Manual:Hardware》《RA4M2 Group User’s Manual:Hardware》《RA2L1 Group User’s Manual:Hardware》等芯片手册,深入探讨如何使用寄存器点亮 LED 灯。
芯片引脚可大致分为 IO 引脚和非 IO 引脚。非 IO 引脚如电源引脚、晶振引脚等,不具备 GPIO(通用输入输出)功能;而 IO 引脚具备 GPIO 功能,可配置为多种模式,实现各类通用功能。
IO 引脚的基本输出功能是输出高、低电平,用于开关控制,如开关 LED 灯、继电器或三极管等;基本输入功能是检测外部输入电平,例如通过引脚电平高低判断按键是否被按下。此外,IO 引脚还能连接外部设备,进行通讯、发送控制指令和采集传感器数据等操作。
IOPORT 即 I/O Port,在代码中为方便书写写成 “IOPORT”,表示输入输出端口。它是 RA MCU 的一个外设模块,用于控制芯片引脚,并对每个引脚进行详细配置,具体包括:
- 配置引脚为普通 IO 功能,实现输入或输出高、低电平。
- 控制引脚的输入上拉电阻。
- 控制引脚的驱动能力。
- 控制引脚是否检测上升沿 / 下降沿 / 双边沿。
- 控制引脚是否作为中断输入引脚。
- 配置引脚为模拟输入功能或在内部连接到其他外设模块。
瑞萨 RA 系列芯片的 IO 端口理论上分为 16 个组(0~9,A,B,C,D,E,F),每组 16 个引脚(0~15)。但实际配置因芯片型号而异。以野火启明 6M5 板子上的 R7FA6M5BH3CFC 芯片为例,它采用 LQFP 176 - pin 封装,共 176 个引脚,大部分为可由 IOPORT 模块控制的 IO 引脚,这些 IO 引脚分为 0~9,A,B 共 11 组(A、B 为十六进制表示的 10、11),每组一般 16 个引脚(引脚号 0~15),但部分组不足 16 个引脚。对于引脚数较少的封装(如 LQFP 144 - pin 和 LQFP 100 - pin 封装),芯片可用 IO 引脚数会相应减少。
RA6M5、RA4M2、RA2L1 的 IOPORT 模块框图结构基本一致。以 RA6M5 为例,其外设 IOPORT 的功能结构框图中,标有字母 A 处表示芯片实际引出的 IO 引脚。

对 IOPORT 外设的结构框图进行分析,可知 IOPORT 有以下几种工作模式:
- 通用输入输出(GPIO)模式
- 输入模式(浮空 / 上拉)
- 输出模式(推挽 / 开漏)
- 模拟输入功能模式
- 复用功能模式
见图中标注①处,PDR(Port Direction Register)是端口方向寄存器,用于控制端口的 GPIO 方向。当需要控制 IO 引脚输出高、低电平时,可将引脚的 GPIO 方向设置为 GPIO 输出;当需要读取 IO 引脚电平时,可将其设置为 GPIO 输入。
见图中标注②处,PCR(Pull - up Control Register)是上拉控制寄存器,控制 IO 引脚的 GPIO 输入是否使能上拉。设置为允许上拉时,图中字母 B 处的弱上拉电阻会连接到 VCC 电源正极,使引脚处于弱上拉输入模式。需注意,只有当引脚的 GPIO 方向配置为 “输入” 时,才可设置使用弱上拉电阻。从图中还可看出,RA6M5 的 IO 端口没有下拉电阻。
见图中标注③处,DSCR(Port Drive Capability Register)是端口驱动能力寄存器,控制 IO 引脚的驱动能力,驱动能力指 IO 驱动的电流强度和 IO 的翻转速率。NCODR(N - Channel Open - Drain Control Register)是开漏输出控制寄存器,控制 IO 引脚是否使能开漏模式。当引脚的 GPIO 方向配置为 “输出” 时,可配置 IO 引脚输出模式为推挽输出或使能开漏输出。
见图中标注④处,这部分看似复杂,但 EOSR、POSR、PORR、EORR 的箭头终都指向 PODR,意味着操作这些寄存器终会操作 PODR 寄存器。
- PODR(Port Output Data Regist)是端口输出数据寄存器,控制 GPIO 引脚输出的电平。当引脚的 GPIO 方向配置为 “输出” 时,可配置引脚输出高、低电平。
- EOSR(Event Output Set Register)是事件输出置位寄存器,可暂不考虑。
- POSR (Pmn Output Set Register)是端口输出数据寄存器,控制 GPIO 引脚输出高电平,但不能控制输出低电平。
- PORR(Pmn Output Reset Register)是端口输出数据寄存器,控制 GPIO 引脚输出低电平,但不能控制输出高电平。
- EORR(Event Output Reset Register)是事件输出复位寄存器,可暂不考虑。
见图中标注⑤处,PIDR(Port Input Data Register)是端口输入数据寄存器,可通过它读取 GPIO 引脚的电平状态。当引脚的 GPIO 方向配置为 “输入” 时,程序可读出输入引脚的电平是高还是低。
见图中标注⑥处,ASEL (Analog Input Enable)是模拟输入选择控制位,可通过它将引脚配置为模拟输入模式。使用 ADC 功能时,需将引脚配置为模拟输入模式。
见图中标注⑦处,PMR (Port Mode Control)是端口模式控制位,可通过它将引脚配置为 GPIO 输入 / 输出模式,或配置为复用外设功能引脚。PSEL(Peripheral Select)是外设复用选择,可通过它选择将引脚连接到某一个外设功能上。
见图中标注⑧处,EOFR(Event on Falling/Event on Rising)是事件触发选择,可通过它让引脚检测边沿信号,检测到指定信号将触发一个事件。ISEL(IRQ Input Enable)是 IRQ 输入使能控制位,可配置是否产生中断。
在学习这部分内容时,配合芯片手册中的 “19. I/O Ports” 章节一起阅读,尤其是涉及寄存器说明的部分,效果会更佳。虽然本章内容涉及较多寄存器方面的深入知识,对于初学者来说理解起来有一定难度,但仔细研读、夯实基础是非常必要的。
在实际开发中,通过对上述寄存器的合理配置和操作,就可以实现使用寄存器点亮 LED 灯的功能。例如,若要控制某一引脚输出高电平点亮 LED 灯,可先将该引脚的 GPIO 方向配置为 “输出”,然后通过操作 PODR 或 POSR 寄存器使引脚输出高电平。具体的代码实现还需要结合所使用的开发环境和编程语言进行编写和调试。