369 lines
8.5 KiB
C
369 lines
8.5 KiB
C
|
/********************************************************************************
|
|||
|
Copyright (C), Sinowealth Electronic. Ltd.
|
|||
|
Author: Sino
|
|||
|
Version: V0.0
|
|||
|
Date: 2020/04/26
|
|||
|
History:
|
|||
|
V2.0 2020/04/26 Preliminary
|
|||
|
********************************************************************************/
|
|||
|
#include "Main.h"
|
|||
|
|
|||
|
|
|||
|
BOOL bMcuFlashWrWaitFlg;
|
|||
|
BOOL bMcuFlashWrFlg;
|
|||
|
BOOL bMcuFlashErr;
|
|||
|
U8 xdata ucMcuFlashWrValid;
|
|||
|
U8 xdata bMcuFlashWrWaitCnt;
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrOneByte
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: McuFlashAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>WrData<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: д1<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
void McuFlashWrOneByte(U16 McuFlashAddr, U8 WrData)
|
|||
|
{
|
|||
|
IrqDis();
|
|||
|
McuFlashEn();
|
|||
|
|
|||
|
XPAGE = McuFlashAddr>>8;
|
|||
|
IB_OFFSET = McuFlashAddr % 256;
|
|||
|
IB_DATA = WrData;
|
|||
|
|
|||
|
IB_CON1 = 0x6E;
|
|||
|
IB_CON2 = 0x05;
|
|||
|
IB_CON3 = 0x0A;
|
|||
|
IB_CON4 = 0x09;
|
|||
|
if(XPAGE == (McuFlashAddr>>8))
|
|||
|
{
|
|||
|
IB_CON5 = 0x06;
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
}
|
|||
|
|
|||
|
McuFlashDis();
|
|||
|
IrqEn();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashBlankCheck
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: McuFlashAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ0<EFBFBD><EFBFBD>Eraseʧ<EFBFBD>ܣ<EFBFBD>1<EFBFBD><EFBFBD>ȫ0<EFBFBD><EFBFBD>Erase<EFBFBD>ɹ<EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>Erase<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>Sector<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȫΪ0
|
|||
|
*************************************************************************************************/
|
|||
|
BOOL McuFlashBlankCheck(U16 McuFlashAddr)
|
|||
|
{
|
|||
|
BOOL Result = 1;
|
|||
|
U16 i;
|
|||
|
|
|||
|
for(i=0; i<MCUFLASH_SECTOR_SIZE; i++)
|
|||
|
{
|
|||
|
if(CBYTE[McuFlashAddr+i] != 0x00)
|
|||
|
{
|
|||
|
Result = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashDataCheck
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: McuFlashAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 0<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: У<EFBFBD>鱻д<EFBFBD><EFBFBD>Sector<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>XRAM<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
BOOL McuFlashDataCheck(U16 McuFlashAddr, U16 XramAddr)
|
|||
|
{
|
|||
|
BOOL Result = 1;
|
|||
|
U8 xdata *ptr = (U8 xdata *)XramAddr; //ǿ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>ֵ<EFBFBD><D6B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
U16 i;
|
|||
|
|
|||
|
for(i=0; i<MCUFLASH_SECTOR_SIZE; i++)
|
|||
|
{
|
|||
|
if(CBYTE[McuFlashAddr+i] != *(ptr+i))
|
|||
|
{
|
|||
|
Result = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrSector
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: д1<EFBFBD><EFBFBD>Sector<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
BOOL McuFlashWrSector(U16 McuFlashAddr, U16 XramAddr)
|
|||
|
{
|
|||
|
BOOL Result = 0;
|
|||
|
U16 i;
|
|||
|
U8 xdata *ptr = (U8 xdata *)XramAddr; //ǿ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>ֵ<EFBFBD><D6B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
for(i=0; i<MCUFLASH_SECTOR_SIZE; i++)
|
|||
|
{
|
|||
|
IB_OFFSET = McuFlashAddr+i;
|
|||
|
XPAGE = (McuFlashAddr+i)>>8;
|
|||
|
IB_DATA = *(ptr+i);
|
|||
|
IB_CON1 = 0x6E;
|
|||
|
if(!EA)
|
|||
|
{
|
|||
|
IB_CON2 = 0x05;
|
|||
|
if(FLASHCON)
|
|||
|
{
|
|||
|
IB_CON3 = 0x0A;
|
|||
|
if(ucMcuFlashWrValid == 0x55)
|
|||
|
{
|
|||
|
IB_CON4 = 0x09;
|
|||
|
if(XPAGE == ((McuFlashAddr+i)>>8))
|
|||
|
{
|
|||
|
IB_CON5 = 0x06;
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
Result = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Result = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Result = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Result = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Result = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrite
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: McuFlashAddr<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȹ̶<EFBFBD>Ϊ1<EFBFBD><EFBFBD>Sector
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 0<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>1<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: дMCU Flash<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>Sector:
|
|||
|
1.Erase Sector
|
|||
|
2.<EFBFBD><EFBFBD><EFBFBD>鵱ǰSector<EFBFBD>Ƿ<EFBFBD>ȫΪ0
|
|||
|
3.<EFBFBD><EFBFBD>XRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
|
|||
|
4.У<EFBFBD><EFBFBD>XRAM<EFBFBD><EFBFBD>MCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
BOOL McuFlashWrite(U16 McuFlashAddr, U16 XramAddr)
|
|||
|
{
|
|||
|
BOOL Result = 0;
|
|||
|
|
|||
|
McuWDTClear(); //<2F>忴<EFBFBD>Ź<EFBFBD>
|
|||
|
IrqDis(); //<2F>ر<EFBFBD><D8B1>ж<EFBFBD>Դ
|
|||
|
McuFlashEn();
|
|||
|
|
|||
|
XPAGE = McuFlashAddr >> 8;
|
|||
|
IB_CON1 = 0xE6;
|
|||
|
if(!EA)
|
|||
|
{
|
|||
|
IB_CON2 = 0x05;
|
|||
|
if(FLASHCON)
|
|||
|
{
|
|||
|
IB_CON3 = 0x0A;
|
|||
|
if(ucMcuFlashWrValid == 0x55)
|
|||
|
{
|
|||
|
IB_CON4 = 0x09;
|
|||
|
if(XPAGE == (McuFlashAddr >> 8))
|
|||
|
{
|
|||
|
IB_CON5 = 0x06;
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
_nop_();
|
|||
|
|
|||
|
if(McuFlashBlankCheck(McuFlashAddr)) //<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if(McuFlashWrSector(McuFlashAddr, XramAddr)) //д<><D0B4>
|
|||
|
{
|
|||
|
if(McuFlashDataCheck(McuFlashAddr, XramAddr)) //У<><D0A3>
|
|||
|
{
|
|||
|
Result = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
IB_CON1 = 0;
|
|||
|
IB_CON2 = 0;
|
|||
|
IB_CON3 = 0;
|
|||
|
IB_CON4 = 0;
|
|||
|
IB_CON5 = 0;
|
|||
|
|
|||
|
McuFlashDis();
|
|||
|
XPAGE = 0x00;
|
|||
|
IrqEn();
|
|||
|
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashProcess
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: дMCU Flash<EFBFBD><EFBFBD>ͬʱ<EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
void McuFlashProcess(void)
|
|||
|
{
|
|||
|
BOOL McuFlashBk1WrFailFlg = 0, McuFlashBk2WrFailFlg = 0;
|
|||
|
U16 VoltageMin;
|
|||
|
|
|||
|
if(bMcuFlashWrFlg)
|
|||
|
{
|
|||
|
bMcuFlashWrFlg = 0;
|
|||
|
|
|||
|
ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
if(ucCellNum > 5) //6~10<31><30>Ӧ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ҫ<EFBFBD>ܵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>10V
|
|||
|
{
|
|||
|
VoltageMin = 10000;
|
|||
|
}
|
|||
|
else //3~5<><35>Ӧ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ҫ<EFBFBD>ܵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>5V
|
|||
|
{
|
|||
|
VoltageMin = 5000;
|
|||
|
}
|
|||
|
|
|||
|
if((Info.ulVoltage>=VoltageMin) && (E2uiCheckFlag==0x5AA5))
|
|||
|
{
|
|||
|
if(!McuFlashWrite(MCUFLASH_BK1_ADDR, XRAM_MAP_ADDR)) //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
{
|
|||
|
if(!McuFlashWrite(MCUFLASH_BK1_ADDR, XRAM_MAP_ADDR))
|
|||
|
{
|
|||
|
McuFlashBk1WrFailFlg = 1;
|
|||
|
E2uiCheckFlag = 0xFFFF;
|
|||
|
McuFlashWrOneByte(MCUFLASH_BK1_ADDR+510,0xFF);
|
|||
|
McuFlashWrOneByte(MCUFLASH_BK1_ADDR+511,0xFF);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(!McuFlashWrite(MCUFLASH_BK2_ADDR, XRAM_MAP_ADDR))
|
|||
|
{
|
|||
|
if(!McuFlashWrite(MCUFLASH_BK2_ADDR, XRAM_MAP_ADDR))
|
|||
|
{
|
|||
|
McuFlashBk2WrFailFlg = 1;
|
|||
|
E2uiCheckFlag = 0xFFFF;
|
|||
|
McuFlashWrOneByte(MCUFLASH_BK2_ADDR+510,0xFF);
|
|||
|
McuFlashWrOneByte(MCUFLASH_BK2_ADDR+511,0xFF);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
McuFlashBk1WrFailFlg = 1;
|
|||
|
McuFlashBk2WrFailFlg = 1;
|
|||
|
}
|
|||
|
ucMcuFlashWrValid = 0x00;
|
|||
|
|
|||
|
if(McuFlashBk1WrFailFlg && McuFlashBk2WrFailFlg) //<2F><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λFlash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
{
|
|||
|
bMcuFlashErr = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashRead
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: SourceAddr<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>TargetAddr<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Length<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD>ж<EFBFBD>MCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ0x5AA5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
BOOL McuFlashRead(U16 SourceAddr, U8 xdata *TargetAddr, U16 Length)
|
|||
|
{
|
|||
|
U16 i;
|
|||
|
BOOL Result = 1;
|
|||
|
U8 xdata *data TargetAddr1 = TargetAddr; //*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<74>ؼ<EFBFBD><D8BC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ǰ<EFBFBD>ָ<EFBFBD><D6B8>TargetAddr1<72><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<74><61><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
IrqDis();
|
|||
|
McuFlashEn();
|
|||
|
McuWDTClear();
|
|||
|
for(i=0; i<Length; i++)
|
|||
|
{
|
|||
|
*TargetAddr1 = CBYTE[SourceAddr+i];
|
|||
|
TargetAddr1++;
|
|||
|
}
|
|||
|
McuFlashDis();
|
|||
|
IrqEn();
|
|||
|
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrWaitCheck
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪдMCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʱ2Sִ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
|
|||
|
*************************************************************************************************/
|
|||
|
void McuFlashWrWaitCheck(void)
|
|||
|
{
|
|||
|
if(bMcuFlashWrWaitFlg)
|
|||
|
{
|
|||
|
if(++bMcuFlashWrWaitCnt >= MCU_FLASH_WATI_DELAY)
|
|||
|
{
|
|||
|
bMcuFlashWrWaitFlg = 0;
|
|||
|
bMcuFlashWrWaitCnt = 0;
|
|||
|
bMcuFlashWrFlg = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashCheckFlg
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: McuFlashAddr<EFBFBD><EFBFBD>MCU Flash<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD>ж<EFBFBD>MCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ0x5AA5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
BOOL McuFlashCheckFlg(U16 McuFlashAddr)
|
|||
|
{
|
|||
|
BOOL Result = 0;
|
|||
|
|
|||
|
McuFlashEn();
|
|||
|
if(CWORD[McuFlashAddr/2] == 0x5AA5)
|
|||
|
{
|
|||
|
Result = 1;
|
|||
|
}
|
|||
|
McuFlashDis();
|
|||
|
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|