📄 flash.c
字号:
typedef unsigned char uchar;
typedef unsigned int uint;
#include "config.h"
#include "define.h"
#include "flash.h"
#include "Lcd.h"
#include "beep.h"
void (* iap_entry) (unsigned int param[] , unsigned int result[]) ;
void InitIAP(void)
{
iap_entry = (void (*) ()) IAP_LOCATION ;
}
//sec1 : start sector , sec2 : end sector
int SelectSector(unsigned int sec1 , unsigned int sec2)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_PREPARE_SECTION ;
paramin[1] = sec1 ;
paramin[2] = sec2 ;
(* iap_entry)(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
int RamToFlash(unsigned int dst , unsigned int src , unsigned int len)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_COPY_TO_FLASH ;
paramin[1] = dst ;
paramin[2] = src ;
paramin[3] = len ;
paramin[4] = IAP_PCCLK ;
iap_entry(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
#if DEBUG
ClearScreen() ;
switch(paramout[0])
{
case SRC_ADDR_ERROR :
DisplayStr(0,8,8,"Error 1");
break ;
case DST_ADDR_ERROR :
DisplayStr(0,8,8,"Error 2");
break ;
case SRC_ADDR_NOT_MAPPED :
DisplayStr(0,8,8,"Error 3");
break ;
case DST_ADDR_NOT_MAPPED :
DisplayStr(0,8,8,"Error 4");
break ;
case COUNT_ERROR :
DisplayStr(0,8,8,"Error 5");
break ;
case BUSY :
DisplayStr(0,8,8,"Error 6");
break ;
case SECTOR_NOT_OK :
DisplayStr(0,8,8,"Error 7");
break ;
default :
DisplayStr(0,8,8,"Error 8");
break ;
}
#endif
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
int EraseSector(unsigned int sec1 , unsigned int sec2)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_ERASE_SECTION ;
paramin[1] = sec1 ;
paramin[2] = sec2 ;
(* iap_entry)(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
int CheckBlank(unsigned int sec1 , unsigned int sec2)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_CHECK_SECTION ;
paramin[1] = sec1 ;
paramin[2] = sec2 ;
(* iap_entry)(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
int ReadID(void)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_READ_ID ;
(* iap_entry)(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
int ReadBootVersion(void)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_READ_BOOT_VERSION ;
(* iap_entry)(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
int Compare(unsigned int dst , unsigned int src , int len)
{
unsigned int paramin[8] ;
unsigned int paramout[8] ;
paramin[0] = IAP_COMP ;
paramin[1] = src ;
paramin[2] = dst ;
paramin[3] = len ;
(* iap_entry)(paramin , paramout) ;
if(paramout[0] != RESP_SUCCESS)
{
#if DEBUG
switch(paramout[0])
{
case COMPARE_ERROR :
ClearScreen();
DisplayStr(0,8,8,"Cp here 1!");
DelayMs(1000) ;
break ;
case COUNT_ERROR :
ClearScreen();
DisplayStr(0,8,8,"Cp here 2!");
DelayMs(1000) ;
break ;
case INVALID_SECTOR:
Beep(3) ;
break ;
case SRC_ADDR_NOT_MAPPED:
case DST_ADDR_NOT_MAPPED:
case SRC_ADDR_ERROR:
case DST_ADDR_ERROR:
ClearScreen();
DisplayStr(0,8,8,"Cp here 3!");
DelayMs(1000) ;
break ;
default :
ClearScreen();
DisplayStr(0,8,8,"Cp here 4!");
DelayMs(1000) ;
break ;
}
#endif
return(ERROR) ;
}
else
{
return(SUCCESS) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -