RL78启动过程详解

引言
本文详细介绍了rl78 mcu从复位到进入main函数的过程,有助于读者对rl78 mcu体系结构的理解,ram和rom的初始化,以及bootloader程序的开发。
1. rl78复位源
rl78 mcu有以下7种复位源:
外部复位:
reset复位引脚
内部复位:
上电复位(por)
看门狗复位
低电压复位
非法指令复位
ram奇偶校验错误复位
存取非法寄存器复位
复位功能框图如下:
2. mcu运行模式
rl78 mcu有正常运行和闪存编程两种运行模式,在复位信号解除时,通过采样tool0引脚上的电平,进入对应的运行模式。
3. 启动代码分析
rl78 mcu启动代码主要在cstart.asm文件中,流程如下:
3.1 启动代码入口
代码如下:
mcu复位后,pc指针指向地址0,定义复位向量在地址0。
3.2 寄存器组选择
代码如下:
rl78-s2有4组通用寄存器,通过sel rbn指令选择使用的寄存器组。
rl78通用寄存器组结构:
3.3 镜像区设置
代码如下:
3.3.1镜像区
rl78支持存取1mb的地址空间,能通过16位地址进行存取的数据区是f0000h~fffffh的64k字节空间,但是如果附加“es:”,就能扩展到00000h~fffffh的1m字节空间。
代码闪存从地址0开始存储,一般需要使用20位地址访问该区域。为了加快对代码闪存的访问,可以将代码闪存的部分区域镜像到f0000h~fffffh中未使用的区域。
镜像示例如下:
3.3.2镜像区选择
复位后,maa位默认为0,镜像00000h~0ffff区域到f0000h~fffffh区域,对于闪存大于96kb的产品,可以通过设置maa位,选择需要镜像的区域,详细请参考pmc控制寄存器。
3.4 栈初始化
代码如下:
3.4.1 设置sp
将栈顶地址 __stack_addr_start设置到sp寄存器。
其中__stack_addr_start是由链接器产生。
3.4.2 初始化栈
将栈底地址参数赋值给ax寄存器,然后调用栈初始化函数stkinit,将栈区域清0。
stkinit函数在stkinit.asm文件中,代码如下:
大致流程为:先按照32字节进行清0,剩余部分,按字节进行清0。
3.5 外设初始化
代码如下:
其中r_systeminit函数是由代码生成器,通过图形界面配置生成。
注意:尽量不要修改该部分代码。
如需修改,禁止执行读取ram的操作。(访问未初始化的ram,可能触发ram奇偶校验错误,产生奇偶校验复位。)
错误代码示例:
错误原因:g_dbgmode全局变量将在data段的初始化过程中赋值1,但此时data段还未初始化,dbgmode指向的ram地址未写入奇偶校验位,if(g_dbgmode==0)语句,将执行读操作,可能触发ram奇偶校验错误,产生奇偶校验复位。
3.6 初始化bss,data段
bss初始化代码如下:
data段初始化代码如下:
其中high/low/startof/sizeof等表达式,请参考编译器手册文档”cc-rl user’s manual”。
3.7 进入main函数
3.8 堆
cc-rl v1.02以上版本支持堆的操作
如需使用堆的相关操作,需要先初始化_rel_sysheap和_rel_sizeof_sysheap,详细内如请参考以下示例:
来源:瑞萨mcu小百科


iQOO7 确认搭载 4K 级动力泵液冷散热系统
Harmony和Chainlink合作 为其智能合约提供安全数据
保时捷Taycan已达到了3万预订量起售价在10万美元以上
78XX系列稳压器的基本接法
采用恩智浦应用软件包快速启动产品开发
RL78启动过程详解
浅析无根容器的结构和漏洞
中国移动今年将在全国建设超过5万个5G基站实现50个以上城市商用
手机芯片成为软肋,联发科聚焦物联网芯片
工业智能网关BL110应用之十五: 网关基本信息
几种Qt种延时处理方法
MK-302语音数据自适应透传模块技术研究与应用
广和通智慧燃气安全物联网解决方案
特斯拉在日本的销售业绩为什么令人失望
如何在电路板轮廓内设计刚性柔性PCB?
跑pin码破解wifi密码
4G DTU目前已经被广泛应用于物联网产业链中的M2M行业
九代酷睿处理器PCB厚度增加 对产品有哪些影响
芯片产业应该怎样做才能发展较好
雪铁龙C4世嘉与别克英朗谁将是紧凑型车领域的主力军