0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RT-Thread的EK-RA2E2 设备驱动移植与应用 | 技术集结

RT-Thread官方账号 2025-10-05 10:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录


前言


环境配置


Hello RT-Thread


GPIO输入与中断


I2C主机驱动


SPI主机驱动


ADC设备驱动


PWM设备驱动


Flash设备驱动


WDT设备驱动

1 前言

本文说明如何在 RT-Thread 下配置与使用 EK-RA2E2 的板载外设的BSP驱动

BSP已被提交PR:https://github.com/RT-Thread/rt-thread/pull/10695

2环境配置

整个移植过程会用到的几个工具版本如下,建议使用相同版本,较低版本会出现兼容性问题。

Env 工具版本 :V2.0.0

Arm GNU Toolchain: 13.2

JLink 版本 :V7.7.0

FSP 版本 :V6.0.0

Renesas 的芯片驱动源码是通过软件工具配置生成的,整个板子的移植过程都会使用到RASC这个软件工具。

下载链接:https://github.com/renesas/fsp/releases

dadf3d6c-a18f-11f0-8ce9-92fbcf53809c.png

注意:

如果要在 MDK 上使用FSP,请参照 rt-thread 的RA系列BSP制作过程.md如何在 MDK 中打开 FSP,绑定第三方工具RASC

此次移植过程,笔者主要是以 linux 下的 GNU 环境进行移植,环境配置过程不再赘述。

3 Hello RT-Thread

EK-RA2E2 的基础例程默认支持MSH,编译基础例程并烧录成功后,可通过串口工具进行交互,同时能观察到LED3红灯以 1Hz 的频率闪烁。

dae666aa-a18f-11f0-8ce9-92fbcf53809c.png

SCI_UART使用到的引脚分别是:

TX 为 P101

RX 为 P100

daf304a0-a18f-11f0-8ce9-92fbcf53809c.png

LED3 使用的引脚为:

P015

dafac820-a18f-11f0-8ce9-92fbcf53809c.png

本次移植也支持了一键nano,因为该板子的MCU内存空间有限,如果想节省空间,可以考虑选择nano

nano默认启用了MSH,与标准版的基础例程一致。

db087c2c-a18f-11f0-8ce9-92fbcf53809c.png

4 GPIO输入与中断

外部中断作为一种外设资源,需要开发者通过 ICU (interrupt control unit) 进行管理 。

下面以 EK-RA2E2 的按键SW2为例子,介绍如何配置一个外部中断。

打开RASCRASC会通过文件configuration.xml加载板子的配置。

进入Pins页面,找到Interrupt:IC

db11f964-a18f-11f0-8ce9-92fbcf53809c.png

使能ICU,SW2 连接的引脚为 P205,所以这里 选择 IRQ1。

db1f2936-a18f-11f0-8ce9-92fbcf53809c.png

进入Stacks页面,通过New Stack中的INPUT找到External IRQ (r_icu)。笔者配置了上升沿,并开启了数字滤波,中断回调函数需要写入irq_callback以支持drv_gpio.c的中断回调功能。

db282b6c-a18f-11f0-8ce9-92fbcf53809c.png

开发者通过使用rt_pin_attach_irqrt_pin_irq_enable实现中断注册和中断使能。

db3386e2-a18f-11f0-8ce9-92fbcf53809c.pngdb3ee1d6-a18f-11f0-8ce9-92fbcf53809c.png

注意:

通过原理图和板子可以得知,标签E32表示按键和 P205 是开路状态。开发者使用按键时,需要通过电阻或锡将两个焊盘连接。

5 I2C主机驱动

EK-RA2E2 有一个 I3C 外设,兼容 I2C

笔者采样OLED模块SSD1360作为从设备,下面介绍如何使用 I2C 驱动。

打开RASC,点击进入到Pins页面,找到Conectivity:I3C

SCL : P400

SDA: P401

db50522c-a18f-11f0-8ce9-92fbcf53809c.png

进入Stacks页面,通过New Stack中的Conectivity找到I2C Master(r_iic_b_master)。中断回调函数修改为i2c_master_callback以支持drv_i2c.c的异步事件功能,数据传输后驱动层会通过rt_event_recv来确认传输是否成功完成。

scons --menuconfig启用Hardware Drivers Config—>On-Chip Peripheral Drivers—>Enable hardware I2C Bus—>Enable hardware I2C0 Bus

编写应用程序进行读写功能验证

db5d7dee-a18f-11f0-8ce9-92fbcf53809c.pngdb72da4a-a18f-11f0-8ce9-92fbcf53809c.png

注意:

EK-RA2E2 的 I3C 引脚,SCL 和 SDA 没有挂上拉电阻。如果开发者在两脚悬空状态下使用 I2C,传输函数会返回错误。所以要么和笔者一样,选取的从设备模块自带上拉;要么先给板子提供上拉,再将从设备挂到总线上。

6 SPI主机驱动

EK-RA2E2有一个 SPI 外设,下面介绍如何使用 SPI 驱动。

注意:

由于SCI_UART使用了引脚 P101 和 P100 ,两个外设引脚冲突,所以开发者在使用 SPI 时需要将SCI_UART的引脚迁移到别的可用引脚上去。

打开RASC,进入Pins页面,找到Conectivity:SPI

db7b5d3c-a18f-11f0-8ce9-92fbcf53809c.png

进入Stacks页面,通过New Stack中的Conectivity找到SPI (r_spi)。中断回调函数修改为spi0_callback以支持drv_spi.c的异步事件功能。RASC 会提示要求开发者配置中断优先级,配置完中断优先级后请将DTC删掉,保持与图中一致。

db88ad8e-a18f-11f0-8ce9-92fbcf53809c.png

scons --menuconfig启用Hardware Drivers Config—>On-Chip Peripheral Drivers—>Enable hardware SPI Bus—>Enable hardware SPI0 Bus

编写应用程序进行读写功能验证

db96a81c-a18f-11f0-8ce9-92fbcf53809c.pngdbaa6208-a18f-11f0-8ce9-92fbcf53809c.png

注意:

笔者这里展示的 MISO 均为 0xFF,这是因为MISO引脚处于悬空状态。笔者已经验证过引脚功能是有效的,开发者在验证的时候将其与MOSI短接,利用日志打印即可。

7 ADC设备驱动

ADC 特性:

12-bit A/D Converter,至多8个模拟输入采样通道

采样通道并不连续,支持 5、6、9、10、19、20、21、22

笔者使用了烟雾传感器,以 Channel9 为例,下面介绍如何进行 ADC 采样 。

打开RASC,进入Pins页面,找到Analog:ADC。启用 Channel5 、Channel6 、Channel9。

dbb3e83c-a18f-11f0-8ce9-92fbcf53809c.png

进入Stacks页面,通过New Stack中的Analog找到ADC (r_adc)。配置为continuous scan模式,并勾选上需要采样的通道。

dbc22154-a18f-11f0-8ce9-92fbcf53809c.png

scons --menuconfig启用Hardware Drivers Config—>On-Chip Peripheral Drivers—>Enable ADC —> Enable ADC0

由于参考电压是 3.3V,所以是乘以 3300。此外,若配置的采样通道为21,则rt_adc_read的第二个参数应为21。

8 PWM设备驱动

dbc9b572-a18f-11f0-8ce9-92fbcf53809c.png

GPT (General PWM Timer)特性:

一个 16-bit 6通道 的定时器

编号从 GPT4 到 GPT9,每个 GPT 可以控制两个引脚输出

drv_pwm.c中,GPT 的每个通道都是一个设备实例。例如,使用 GPT4 和 GPT5,就需要创建两个 PWM 设备。

以 GPT4 为例,下面介绍如何通过 GPT 产生 PWM 。

打开RASC,进入Pins页面,找到Timers:GPT。配置两个引脚一起工作。

dbdae270-a18f-11f0-8ce9-92fbcf53809c.png

进入Stacks页面,通过New Stack中的Timer找到Timer, General PWM(r_gpt)。修改 timer4 和 channel4,然后启用Pin Output Support,最后使能两个引脚输出。

dbe80856-a18f-11f0-8ce9-92fbcf53809c.pngdbf539fe-a18f-11f0-8ce9-92fbcf53809c.pngdbffa7b8-a18f-11f0-8ce9-92fbcf53809c.png

scons --menuconfig启用Hardware Drivers Config—>On-Chip Peripheral Drivers—>Enable PWM—>Enable GPT4

编写应用程序验证 PWM 功能

dc0d75f0-a18f-11f0-8ce9-92fbcf53809c.pngdc1954d8-a18f-11f0-8ce9-92fbcf53809c.png

9 Flash设备驱动

EK-RA2E2 能提供至多 64KB 的Code Flash内存 和 2KBData Flash内存,但实际在使用Code Flash的时候达不到这个理论值。

从文档《RA2E2-Group-Hardware》的Option-Setting Memory一节可知

0x00000400 到0x0000043B 被分配给了OFS1,OFS2 和 Security MPU

Code Flash从0x00000440 开始,到 0x00010000 结束

Data Flash从0x40100000 开始,到 0x40100800 结束

dc25c7ea-a18f-11f0-8ce9-92fbcf53809c.png

本次移植笔者支持了Code Flash的读写操作,下面笔者将通过 fal 抽象层演示 EK-RA2E2 的 flash 设备驱动。

打开RASC,进入Stacks页面,通过New Stack中的Storage找到flash (r_flash_lp),使能Code Flash

中断函数名需要填写flash_callback,这个函数没有实际意义。因为在驱动层操作 flash 的过程中,都会暂时的禁止中断。

dc3612f8-a18f-11f0-8ce9-92fbcf53809c.png

scons --menuconfig启用Hardware Drivers Config—>On-Chip Peripheral Drivers—>Enable Onchip FLASH

drv_flash.c中实现的函数允许开发者直接调用,也可以通过 fal 抽象层进行分区管理。

dc419c22-a18f-11f0-8ce9-92fbcf53809c.png

从 app 起始地址读取 16 字节,并与编译出的hex文件进行比较

dc505f3c-a18f-11f0-8ce9-92fbcf53809c.png

从 app 起始地址偏移 0xF000 字节,进行 16 字节读写验证

dc64571c-a18f-11f0-8ce9-92fbcf53809c.png

10 WDT设备驱动

启用驱动的步骤与前面如出一辙,不再赘述。

因为驱动的配置都是围绕着时钟频率和计数次数,而不能直观知道多久不喂狗会造成复位,所以这里笔者重点解释如何计算 WDT 的超时时间。

WDT特性:

14-bit 的向下计数计时器

由 PCLKB 提供时钟

计数溢出时会产生 NMI (不可屏蔽中断),并造成系统复位

计算 WDT 超时时间:

PCLKB 可以在RASCclock页面查到,默认为 24 MHz

时钟分频默认 8192,即工作频率为 PCLKB/8192

timeout 为 16384 cycles,即计数 16384 次后会造成复位

WDT 的工作频率为f=24 MHz/8192 ≈ 2929.6875 KHz

计数一次要花的时间为t= 1 /f= 1 / 2929.6875 ≈ 341.333 us

超时时间为T= 341.333 us * 16384 cycles ≈ 5.5 s

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移植
    +关注

    关注

    1

    文章

    407

    浏览量

    29217
  • 设备驱动
    +关注

    关注

    0

    文章

    70

    浏览量

    11302
  • RT-Thread
    +关注

    关注

    32

    文章

    1541

    浏览量

    44293
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【灵动微】FTHR-G0140开发板移植RT-Thread驱动

    灵动微G0140移植RT-Thread驱动
    的头像 发表于 06-05 13:45 21.8w次阅读
    【灵动微】FTHR-G0140开发板<b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b><b class='flag-5'>驱动</b>

    使用RT-Thread和CPK-RA2L1采集DHT11温湿度

    本篇文章主要介绍使用RT-Thread Studio 和瑞萨 CPK-RA2L1评估板,使用大佬的轮子采集温湿度
    的头像 发表于 10-11 11:34 2354次阅读
    使用<b class='flag-5'>RT-Thread</b>和CPK-<b class='flag-5'>RA2</b>L1采集DHT11温湿度

    RT-Thread Nano硬核移植指南:手把手实现VGLite图形驱动适配 | 技术集结

    VGLite是NXP提供的轻量级2D图形API,本文将手把手带你实现VGLite图形驱动适配RT-Thread。文章分为上、下两篇,将手把手教您移植。上篇对
    的头像 发表于 07-17 14:40 3044次阅读
    <b class='flag-5'>RT-Thread</b> Nano硬核<b class='flag-5'>移植</b>指南:手把手实现VGLite图形<b class='flag-5'>驱动</b>适配 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    移植RT-Thread的原理与方法

    大家好我是惊觉。是的,失踪人口回来了。最近参加了rt-thread的国产MCU移植活动,移植rt-thread到华大的HC32L196。rtt论坛中已有许多介绍
    的头像 发表于 09-17 09:41 9321次阅读

    基于 Keil MDK 移植 RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。 RT-Thread Nano 已集成在 Keil MD...
    发表于 01-26 17:04 17次下载
    基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> Nano

    RT-Thread全球技术大会:关于瑞萨RA2L1-CPK低功耗CPU演示

    RT-Thread全球技术大会:关于瑞萨RA2L1-CPK低功耗CPU演示           审核编辑:彭静  
    的头像 发表于 05-27 15:23 1889次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:关于瑞萨<b class='flag-5'>RA2</b>L1-CPK低功耗CPU演示

    EK-RA2E2评估板

    EK-RA2E2评估板
    发表于 11-07 19:50 0次下载
    <b class='flag-5'>EK-RA2E2</b>评估板

    EK-RA2E2 v1-用户手册

    EK-RA2E2 v1-用户手册
    发表于 01-13 19:13 0次下载
    <b class='flag-5'>EK-RA2E2</b> v1-用户手册

    RT-Thread文档_内核移植

    RT-Thread文档_内核移植
    发表于 02-22 18:31 4次下载
    <b class='flag-5'>RT-Thread</b>文档_内核<b class='flag-5'>移植</b>

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与<b class='flag-5'>移植</b>

    RT-Thread文档_I2C 总线设备

    RT-Thread文档_I2C 总线设备
    发表于 02-22 18:35 0次下载
    <b class='flag-5'>RT-Thread</b>文档_I<b class='flag-5'>2</b>C 总线<b class='flag-5'>设备</b>

    工程师自述:如何将RA2E1并入到RT-Thread的主线仓库

    支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了 “ 熟悉RT-Thread和瑞萨MCU的朋友都知道,当前RT-Thread仓库的主线代码是不支持
    的头像 发表于 03-25 20:50 1482次阅读

    支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了

    支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了
    的头像 发表于 05-16 15:30 1798次阅读
    支持<b class='flag-5'>RT-Thread</b>最新版本的瑞萨<b class='flag-5'>RA2E</b>1开发板终于要大展身手了

    EK-RA2E2v1-用户手册

    EK-RA2E2 v1-用户手册
    发表于 07-03 20:02 0次下载
    <b class='flag-5'>EK-RA2E2</b>v1-用户手册

    RT-Thread qemu mps2-an385 bsp移植制作 :环境搭建篇

    最近打算系统地研究一下 RT-Thread,包括 RT-Thread BSP 的移植,由于一直在使用 QEMU 进行一些软件功能的验证,qemu 支持很多的CPU 与 开发板,所以想移植
    的头像 发表于 08-02 14:45 1329次阅读
    <b class='flag-5'>RT-Thread</b> qemu mps<b class='flag-5'>2</b>-an385 bsp<b class='flag-5'>移植</b>制作 :环境搭建篇