RL78启动过程详解

cathy的头像
cathy 发布于:周二, 08/16/2022 - 09:29 ,关键词:

引言

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

1. RL78复位源

RL78 MCU有以下7种复位源:

外部复位:

  • RESET复位引脚

内部复位:

  • 上电复位(POR)

  • 看门狗复位

  • 低电压复位

  • 非法指令复位

  • RAM奇偶校验错误复位

  • 存取非法寄存器复位

复位功能框图如下:

“RL78启动过程详解"

2. MCU运行模式

RL78 MCU有正常运行和闪存编程两种运行模式,在复位信号解除时,通过采样TOOL0引脚上的电平,进入对应的运行模式。

“RL78启动过程详解"

3. 启动代码分析

RL78 MCU启动代码主要在cstart.asm文件中,流程如下:

“RL78启动过程详解"

3.1 启动代码入口

代码如下:

“RL78启动过程详解"

MCU复位后,PC指针指向地址0,定义复位向量在地址0。

“RL78启动过程详解"

“RL78启动过程详解"

3.2 寄存器组选择

代码如下:

“RL78启动过程详解"

RL78-S2有4组通用寄存器,通过SEL RBn指令选择使用的寄存器组。

“RL78启动过程详解"

RL78通用寄存器组结构:

“RL78启动过程详解"

3.3 镜像区设置

代码如下:

“RL78启动过程详解"

3.3.1镜像区

RL78支持存取1MB的地址空间,能通过16位地址进行存取的数据区是F0000H~FFFFFH的64K字节空间,但是如果附加“ES:”,就能扩展到00000H~FFFFFH的1M字节空间。

“RL78启动过程详解"

代码闪存从地址0开始存储,一般需要使用20位地址访问该区域。为了加快对代码闪存的访问,可以将代码闪存的部分区域镜像到F0000H~FFFFFH中未使用的区域。

镜像示例如下:

“RL78启动过程详解"

3.3.2镜像区选择

复位后,MAA位默认为0,镜像00000H~0FFFF区域到F0000H~FFFFFH区域,对于闪存大于96KB的产品,可以通过设置MAA位,选择需要镜像的区域,详细请参考PMC控制寄存器。

“RL78启动过程详解"

“RL78启动过程详解"

3.4 栈初始化

代码如下:

“RL78启动过程详解"

3.4.1 设置SP

将栈顶地址 __STACK_ADDR_START设置到SP寄存器。

其中__STACK_ADDR_START是由链接器产生。

“RL78启动过程详解"

3.4.2 初始化栈

将栈底地址参数赋值给AX寄存器,然后调用栈初始化函数stkinit,将栈区域清0。

“RL78启动过程详解"

stkinit函数在stkinit.asm文件中,代码如下:

“RL78启动过程详解"

“RL78启动过程详解"

大致流程为:先按照32字节进行清0,剩余部分,按字节进行清0。

3.5 外设初始化

代码如下:

“RL78启动过程详解"

其中R_Systeminit函数是由代码生成器,通过图形界面配置生成。

注意:尽量不要修改该部分代码。

如需修改,禁止执行读取RAM的操作。(访问未初始化的RAM,可能触发RAM奇偶校验错误,产生奇偶校验复位。)

错误代码示例:

“RL78启动过程详解"

错误原因:g_dbgMode全局变量将在data段的初始化过程中赋值1,但此时data段还未初始化,dbgMode指向的RAM地址未写入奇偶校验位,if(g_dbgMode==0)语句,将执行读操作,可能触发RAM奇偶校验错误,产生奇偶校验复位。

3.6 初始化BSS,DATA段

BSS初始化代码如下:

“RL78启动过程详解"

DATA段初始化代码如下:

“RL78启动过程详解"

其中HIGH/LOW/STARTOF/SIZEOF等表达式,请参考编译器手册文档”CC-RL user’s manual”。

“RL78启动过程详解"

3.7 进入main函数

“RL78启动过程详解"

3.8 堆

CC-RL V1.02以上版本支持堆的操作

“RL78启动过程详解"

如需使用堆的相关操作,需要先初始化_REL_sysheap和_REL_sizeof_sysheap,详细内如请参考以下示例:

“RL78启动过程详解"

来源:瑞萨MCU小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 379