⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.c

📁 LPC2134的bootloader , 请用ADS查看地址设定。
💻 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 + -