- 190
- 0
- 约3.94千字
- 约 5页
- 2017-04-11 发布于江苏
- 举报
关于RL78在代码闪存自编程中的中断应用_20130530
RL78 代码闪存自编程期间响应外围中断的方法
许柯萍 张娜 张明 关海亭
[摘要]
RL78产品内置闪存自编程固件。利用这个固件,无须外部编程器,用户程序自身即可实现对闪存区
的编程。为了便于用户操作,瑞萨公司还提供了自编程固件的接口函数(自编程库函数)。在擦写
代码闪存区期间,存储在代码闪存区的中断处理程序不可执行,因此无法及时响应其它外围功能的
中断请求。但是在实际应用中及时地响应中断通常是必不可少的。因此,本文以RL78/L13为例,
详细介绍代码闪存自编程中响应外围中断的方法。
[正文]
RL78产品的闪存,分为数据闪存区和代码闪存区。数据闪存区用于存储数据,而代码闪存区用于
用户代码及数据的存储。对于无内置数据闪存区的产品,使用代码闪存区存储数据,通常是成本
导向的最佳方案。本文中作为示例的RL78/I13,是一款具有内置数据闪存区的产品,但是它的代
码闪存区也可兼作数据闪存区。
下图1-1是RL78/L13(R5F10WMG)的存储空间。
FFF00H~FFFFFH 特殊机能寄存器(SFR) 10CEH~1FFFFH 程序区域
FFEE0H~FFEFFH 通用寄存器
RAM 10C4H~10CDH 10字节的ID区域
10C0H~10C3H 选项字节区域(4字节)
1080H~10BFH CALLT表区域
(64字节)
F1000H~F1FFFH 数据闪存区(4K字节) 1000H~107FH 向量表区域
F0800H~F0FFFH 保留区域 (128字节)
F0000H~F07FFH 特殊功能寄存器2 00CEH~0FFFH 程序区域
保留区域
00C4H~00CDH 10字节的ID区域
00C0H~00C3H 选项字节区域(4字节)
0080H~00BFH CALLT表区域
(64字节)
代码闪存区(128K) 向量表区域
(128字节)
图1-1 RL78/L13(R5F10WMG)的存储空间
在执行自编程函数的时候,用户不能使用固定在代码闪存区中的中断子程序而只能允许用户
执行RAM中的中断程序。图1-2说明了改写代码闪存时的中断状态。
FDF00H~FFEDFH
20000H~EFFFFH
00000H~1FFFFH 0000H~007FH
F2000H~FDEFFH 镜像区域(8K字节)
1
BGO(后台操作)
在代码闪存被控制的时候 内部RAM 在代码闪存被控制的
中断只能在RAM区才能被 (当中断向量转换到RAM后,所有的中 时候,只有在RAM区
接收 断会跳到相同的入口地址中去,用户 才能起作用
需要在中断程序中检查中断标志)
用于RAM区的专用中断进程
和通用的中断进程是不同的
内部ROM
(当代码闪存被控制的时候,ROM中的
中断程序不能被响应,因为当前的ROM
ROM中向量中断不能被正常接收 不能被使用)
图1-2 改写代码闪存区时的中断状态
为了方便用户的使用,瑞萨的代码闪存自编程库提供了以下的接口函数:
FSL_ChangeInterruptTable以及FSL_RestoreInterruptTable
当用户使用FSL_ChangeInterruptTable函数后,该函数就会在RAM中使用一个通用的中断子程序来
作为所有中断的入口,也就是说所有中断只通过一个中断子程序来处理。
而对RL78/L13的正常中断而言,通过代码区的中断向量表,每个中断有各自对应的中断子程序进行
处理。详细如下图1-3所示:
1FFFFH
TAU01中断子程序地址 TAU01中断子程序代码
TAU00中断子程序地址 TAU00中断子程序代码 代码闪存区
000CEH
0007FH
00032H TAU01中断子程序地址 中断向量区
00020H TAU00中断子程序地址
图1-3 正常中断处理过程
中断产生
中断产生
2
自编程库中的FSL_ChangeInterruptTable函数在瑞萨C编译器下的表现形式为:
void FSL_ChangeInterruptTable(fsl_u16注1 fsl_interrupt_destination_u16)
注1:fsl_u16等同于无符号整型
其中fsl_interrupt_destination_u16为放置到RAM区的中断处理函数的在RAM中低16位的起始地址。
但是在执行FSL_ChangeInterruptTable功能的时候需要禁用中断,以免MCU产生异常动作。
当代码闪存区的擦写操作结束的时候,中断需要被恢复到正常的中断状态,所以需要使用
自编程库中的FSL_Rest
原创力文档

文档评论(0)