R8C/1B单片机的Flash编程/擦除挂起功能
在EW1模式下执行擦除指令进行Flash擦除时(典型值为200ms/1K字节块),CPU虽处于HOLD状态,但可以接受中断响应,实现分时擦除。利用这个工作原理,下面给出一个R8C/1B单片机的应用实例,利用Timer(定时器)中断和Flash擦除挂起功能实现对擦除时间的估算。
本文引用地址:http://www.amcfsurvey.com/article/96982.htm使用TimerX定时1ms,Flash擦除过程中每1ms挂起一次,进入中断处理程序并调整计时变量g_Timers。在擦除结束后,g_Timers所存储的就是擦除时间的估算值。
例程如下。
#include "sfr_r81b.h"
unsigned int g_Timers;//总擦除时间计数变量
/* 定时器X中断处理函数 */
#pragma interrupt timerX_ISR
void timerX_ISR(){
g_Timers++;
}
/* 检查DataFlash状态寄存器 */
unsigned char checkStatusRegister(){
return fmr07|fmr06;
}
/* 清除DataFlash状态寄存器 */
void clearStatusRegister(){
*((unsigned char *)0x2400) = 0x50;//执行清除状态寄存器软件命令
}
/* 块擦除 */
unsigned char eraseBlock(unsigned int adr){
unsigned char result="1";
asm("FCLR I");//关中断
fmr01 = 0;
fmr01 = 1;//进入CPU改写模式
fmr11 = 0;
fmr11 = 1;//设置为EW1模式&nb
评论