R8C/1B單片機的Flash編程/擦除掛起功能

在EW1模式下執行擦除指令進行Flash擦除時(典型值為200ms/1K字節塊),CPU雖處于HOLD狀態,但可以接受中斷響應,實現分時擦除。利用這個工作原理,下面給出一個R8C/1B單片機的應用實例,利用Timer(定時器)中斷和Flash擦除掛起功能實現對擦除時間的估算。
本文引用地址:http://www.104case.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
評論