R8C/1B單片機的Flash編程/擦除掛起功能
![圖4EW1模式的擦除掛起設(shè)定](http://editerupload.eepw.com.cn/200908/bb75f91fa522e4fd1d47d7540271dee3.jpg)
在EW1模式下執(zhí)行擦除指令進行Flash擦除時(典型值為200ms/1K字節(jié)塊),CPU雖處于HOLD狀態(tài),但可以接受中斷響應(yīng),實現(xiàn)分時擦除。利用這個工作原理,下面給出一個R8C/1B單片機的應(yīng)用實例,利用Timer(定時器)中斷和Flash擦除掛起功能實現(xiàn)對擦除時間的估算。
本文引用地址:http://m.butianyuan.cn/article/96982.htm使用TimerX定時1ms,Flash擦除過程中每1ms掛起一次,進入中斷處理程序并調(diào)整計時變量g_Timers。在擦除結(jié)束后,g_Timers所存儲的就是擦除時間的估算值。
例程如下。
#include "sfr_r81b.h"
unsigned int g_Timers;//總擦除時間計數(shù)變量
/* 定時器X中斷處理函數(shù) */
#pragma interrupt timerX_ISR
void timerX_ISR(){
g_Timers++;
}
/* 檢查DataFlash狀態(tài)寄存器 */
unsigned char checkStatusRegister(){
return fmr07|fmr06;
}
/* 清除DataFlash狀態(tài)寄存器 */
void clearStatusRegister(){
*((unsigned char *)0x2400) = 0x50;//執(zhí)行清除狀態(tài)寄存器軟件命令
}
/* 塊擦除 */
unsigned char eraseBlock(unsigned int adr){
unsigned char result="1";
asm("FCLR I");//關(guān)中斷
fmr01 = 0;
fmr01 = 1;//進入CPU改寫模式
fmr11 = 0;
fmr11 = 1;//設(shè)置為EW1模式&nb
評論