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

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

3天内不再提示

瑞萨RX MCU启动文件详解

瑞萨嵌入式小百科 来源:瑞萨嵌入式小百科 2026-02-11 08:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

PART.01

引言

本文详细介绍了RX MCU从复位到进入main函数的过程,有助于读者对RX MCU体系结构的理解,RAMROM的初始化,以及bootloader程序的开发。

PART.02

启动代码流程分析

RX MCU启动代码主要在resetprg.c文件中,RX的启动代码以C语言实现,因此可读性和可维护性更高。启动代码统一放在PowerON_Reset_PC函数内,复位向量表保存的正是该函数入口的物理地址。因此当芯片发生复位后,CPU会从复位向量取出该地址,并自动跳转到PowerON_Reset_PC函数执行,完成启动流程并最终进入应用程序。

具体的启动流程如下

5f8db562-017f-11f1-90a1-92fbcf53809c.png

2.1 从复位向量到启动函数

MCU复位后,CPU会从复位向量地址0xFFFFFFFC读取一个32位入口地址(Reset Vector)。该入口地址会被装载到PC(程序计数器)中,随后CPU跳转到该入口地址开始执行启动代码,0xFFFFFFFC存放的是复位入口函数(PowerON_Reset_PC)的地址。RX的内存分区情况以及跳转过程如下图所示:

6356a35c-017f-11f1-90a1-92fbcf53809c.png

63aebf6a-017f-11f1-90a1-92fbcf53809c.png

2.2 设置栈指针

在调用入口函数(PowerOn_Reset_PC)之前,需要初始化栈指针,这一步设计在CC-RX编译器中。CC‑RX编译器在该函数开头自动插入栈指针初始化:

647debbe-017f-11f1-90a1-92fbcf53809c.png

1RX有两种栈可以设置:中断栈指针Interrupt Stack Pointer(ISP)、用户栈指针User Stack Pointer(USP),其中中断栈是必须的。

2MVTC是Renesas RX指令集中的一条汇编指令,全称Move To Control Register,是“把数据写入控制寄存器”。

3TOPOF SU+SIZEOF SU等于SU段起始地址+段大小=段末端(栈顶);SI同理。

4初始化把USP/ISP设到各自栈区的栈顶,以便随后栈向低地址增长。

2.3初始化中断、异常向量表寄存器:INTB、EXTB

配置中断和异常的控制寄存器,初始化系统中断和异常的响应。

代码如下:

659f300c-017f-11f1-90a1-92fbcf53809c.png

2.4 初始化浮点状态寄存器:FPSW

FPSW是CPU控制浮点单元的状态寄存器,在启动时需要初始化为预设值,以确保浮点计算正确。

代码如下:

667f572c-017f-11f1-90a1-92fbcf53809c.png

2.5 切换到高速运行时钟

MCU RX上电复位后,首先使用的是LOCO(Low-speed on-chip oscillator),到这一步后,时钟源从LOCO切换到用户选择的高速运行时钟,如HOCO(High-speed on-chip oscillator)。

代码如下:

673ed4f8-017f-11f1-90a1-92fbcf53809c.png

1

切换MCU到高速运行模式,调用operating_frequency_set()来设置系统时钟频率。

2

条件编译:如果不是Bootloader工程(BSP_CFG_BOOTLOADER_PROJECT == 0),则执行lpt_clock_source_select(),用于选择低功耗定时器(LPT)的时钟源。

2.6 初始化C运行环境

代码如下:

67ffd284-017f-11f1-90a1-92fbcf53809c.png

在该阶段,调用标准库函数_INITSCT完成RAM数据区初始化:

1对初始化表BTBL[]指定的B段(.bss段)执行清零;对DTBL[]指定的D/R段(.data段),将ROM中D段初始值拷贝到RAM中对应的R段。

2DTBL[]与BTBL[]分别存放在C$DSEC 与C$BSEC段,并通过__sectop() / __secend()等段操作符提供各段的边界地址,供_INITSCT函数遍历处理。

2.7 初始化RAM

代码如下:

68bd27da-017f-11f1-90a1-92fbcf53809c.png

“硬件资源锁(hardware lock)”机制:用一个全局锁数g_bsp_Locks来防止多个模块/线程/中断同时访问同一个外设资源导致冲突。g_bsp_Locks是RAM变量,必须初始化。BSP_NUM_LOCKS是“枚举总数”。

2.8 初始化I/O库

初始化C标准库的I/O流(stdin/stdout/stderr),代码如下:

697de718-017f-11f1-90a1-92fbcf53809c.png

打开或创建标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的文件,可以用printf输出打印信息。

2.9 初始化MCU的中断回调

代码如下:

6a3f59b6-017f-11f1-90a1-92fbcf53809c.png

初始化BSP的“中断回调函数表”,把所有中断源的回调函数先设为“空函数占位”。避免野指针。

2.10 初始化寄存器保护功能

代码如下:

6b365b9e-017f-11f1-90a1-92fbcf53809c.png

为MCU的寄存器写保护(Register Write Protection)功能做初始化,并定义受保护寄存器的分类。

2.11 配置MCU和板级硬件

代码如下:

6bee4a2e-017f-11f1-90a1-92fbcf53809c.png

1output_ports_configure():用户可以根据应用需求进行输出端口的配置。

2interrupts_configure():用户可以根据应用需求进行中断的配置。

3peripheral_modules_enable():启用和配置MCU的外设。

4bsp_non_existent_port_init():初始化“芯片封装上不存在的引脚”。

2.12 使能中断和选择栈

(I Stack or U Stack)

代码如下:

6caeab16-017f-11f1-90a1-92fbcf53809c.png

开中断和选择使用哪一个栈:

I stack or U stack(即中断栈或用户栈)。

使用RTOS情况下:进入Supervisor(特权)模式,并且在启动阶段保持中断关闭。

非RTOS情况:如果用户只选择1个栈,则不会设置“U”位(即用户栈),CPU将始终使用中断栈。

2.13 选择是否使用RTOS并进入main函数

无RTOS或Azure RTOS直接调用R_BSP_MAIN_FUNCTION()(就是main()),不应该返回。

6d690a24-017f-11f1-90a1-92fbcf53809c.png

至此,是RXMCU 从上电复位到进入main()的全过程。

需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

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

    关注

    147

    文章

    19303

    浏览量

    405621
  • 瑞萨
    +关注

    关注

    38

    文章

    22552

    浏览量

    91841
  • 函数
    +关注

    关注

    3

    文章

    4424

    浏览量

    68202
  • bootloader
    +关注

    关注

    2

    文章

    245

    浏览量

    48446
  • 启动文件
    +关注

    关注

    0

    文章

    16

    浏览量

    2474

原文标题:瑞萨RX MCU启动文件详解

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RX130系列MCU CTSU的基本配置和使用

    RX130属于32位高功效MCU RX100系列,是一款入门级产品。其内置的最大36通道的电容式触摸传感单元(CTSU)成为其特点之一,
    发表于 07-21 17:14 2950次阅读

    如何在VS Code中使用RX系列MCU

    RX家族系列MCU围绕先进的CPU内核构建,汇集了的各种技术创新。基于多年积累的专有技术,它们旨在在各个方面提供更好的响应性和能效,同时结合出色的运行性能和低功耗。为工业、家用电子
    的头像 发表于 04-17 17:58 4485次阅读
    如何在VS Code中使用<b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RX</b>系列<b class='flag-5'>MCU</b>

    解决方案汇总帖

    决方案【视频】电子180度E-Bike解决方案【视频】电子RX LCD直接驱动解决方案演示【视频】
    发表于 01-30 18:27

    MCU指纹识别解决方案!

    65N/RX651微控制器(MCU)系列产品展露拳脚的机会,尤其是在中国市场。虽然有不错的技术和很好的产品,但争夺一定的市场份额关键还要看技术及其产品的落地情况。生物识别主要包括指
    发表于 09-02 13:57

    怎么读取mcu的checksum?

    怎么读取mcu的checksum?
    发表于 02-10 07:03

    电子扩大RX63T Group微控制器(MCU)系列产品

    电子宣布扩大RX63T Group微控制器(MCU)系列产品。新款RX63T MCU拥有更多
    发表于 12-06 10:15 3885次阅读

    电子推出低成本目标板以支持快速增长的RX系列32位MCU产品线

    电子宣布推出三款基于RX65N、RX130和RX231微控制器(MCU)的新型目标板,旨在帮
    的头像 发表于 02-28 11:05 6667次阅读

    关于RX系列MCU的特点性能介绍

    电子RX系列MCU介绍
    的头像 发表于 07-23 00:33 4607次阅读

    电子32位RX微控制器产品家族交付第10亿颗芯片

    电子宣布,RX产品家族32位微控制器(MCU)已累计交付超10亿颗,该系列MCU采用
    发表于 01-20 15:32 3364次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子32位<b class='flag-5'>RX</b>微控制器产品家族交付第10亿颗芯片

    基于RX66T高性能MCU的变频器设计方案

    RX66T是RX MCU家族面向电机/变频控制的高性能MCU,其特性如下:
    的头像 发表于 10-14 16:30 5380次阅读

    基于电子RX MCU的电机控制解决方案

    本次给大家介绍基于电子RX电机控制MCU的电机控制解决方案,RX家族32位高功效MCU包含四
    的头像 发表于 12-10 17:15 3199次阅读
    基于<b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RX</b> <b class='flag-5'>MCU</b>的电机控制解决方案

    电子RX261/RX260 32位触摸控制MCU数据表与技术手册

    电子RX261/RX260 32位触摸控制MCU数据表与技术手册
    的头像 发表于 03-17 16:32 1787次阅读

    RX62T与RX62G系列MCU深度解析与应用考量

    RX62T与RX62G系列MCU深度解析与应用考量 作为电子工程师,在选择单片机时,往往会综合性能、功能、稳定性等多方面因素。
    的头像 发表于 04-13 16:15 361次阅读

    深入解析RX630系列MCU:性能与特性全揭秘

    。今天,我们就来深入了解一下这款MCU的详细信息。 文件下载: R5F5630ACDFP#V0.pdf 一、产品概述 RX630系列是一
    的头像 发表于 04-13 16:20 256次阅读

    深入解析RX63N/RX631系列MCU:高性能与多功能的完美结合

    富的功能,成为众多工程师的首选。今天,我们就来深入了解一下这两款MCU的特点和优势。 文件下载: R5F56317CDFB#V0.pdf 一、产品概述
    的头像 发表于 04-13 16:35 257次阅读