关于RL78在代码闪存自编程中的中断应用_20130530.pdfVIP

  • 190
  • 0
  • 约3.94千字
  • 约 5页
  • 2017-04-11 发布于江苏
  • 举报

关于RL78在代码闪存自编程中的中断应用_20130530.pdf

关于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)

1亿VIP精品文档

相关文档