R8C/1B單片機(jī)的Flash編程/擦除掛起功能
sp;
本文引用地址:http://butianyuan.cn/article/96982.htmfmr40 = 0;
fmr40 = 1;//允許中斷擦除掛起
asm("FSET I");//開中斷
g_Timers = 0;//計(jì)數(shù)值清零
prex=0x32-1;tx=0x32-1;//定時(shí)值1ms
txs=1;//定時(shí)器X開始計(jì)數(shù)
*((unsigned char *)adr) = 0x20;//執(zhí)行塊擦除軟件命令
*((unsigned char *)adr) = 0xD0;
while(fmr00 != 1){//判斷擦除是否結(jié)束
fmr41 = 0;//中斷返回后繼續(xù)擦除
}
txs=0;//定時(shí)器X停止計(jì)數(shù)
fmr01 = 0;//退出CPU改寫模式
if(!checkStatusRegister()){//查看狀態(tài)寄存器
result = 0;//擦除成功
}
else //擦除失敗
clearStatusRegister();//清除狀態(tài)寄存器
return result;
}
/* 對(duì)MCU進(jìn)行初始化 */
void initMCU(){
unsigned char i="0";
asm("FCLR I");//關(guān)中斷
//將CPU時(shí)鐘切換為主時(shí)鐘20MHz
prcr = 1;//解除對(duì)cm0,cm1,ocd寄存器的寫保護(hù)
cm13 = 1;//接通 Xin-Xout
cm15 = 1;//Xin-Xout驅(qū)動(dòng)能力:高
cm05 = 0;//Xin-Xout啟動(dòng)
cm16 = 0;//無(wú)分頻模式
cm17 = 0;
cm06 = 0;//使CM16,CM17有效
while(1){//等待主時(shí)鐘振蕩穩(wěn)定
if(!ocd3){
if(i>=10) break;
else ++i;
}
}
ocd2 = 0;//選擇主時(shí)鐘
prcr = 0;//設(shè)定對(duì)cm0,cm1,ocd寄存器的寫保護(hù)
//設(shè)置定時(shí)器
txmr=0x00;//定時(shí)器X設(shè)為定時(shí)器模式
tcss=0x11;//選擇計(jì)數(shù)源為f8
txic=0x07;//定時(shí)器X中斷優(yōu)先級(jí)為7
asm("FSET I");//開中斷
}
/* 主函數(shù) */
void main(void)
{
unsigned char flag;
initMCU();//對(duì)MCU進(jìn)行初始化
flag = eraseBlock(0x2400);//擦除大小為1kB的塊A,塊首地址為2400H
while (1);
}
評(píng)論