www.pudn.com > ADS_s3c2440a.rar > flash.c


//==================================================================== 
// File Name : flash.c 
// Function  : S3C2440 Flash Program 
// Program   : Kong, In Wook (KIW) 
// Date      : May 30, 2002 
// Version   : 0.0 
// History 
//   0.0 : Programming start (May 30,2002) -> KIW 
//          Arrangement source code(8/01/2002)-> SOP  
//			Edited for SMDK2440(07/07/2003) -> Junon 
//==================================================================== 
 
#include  
#include "def.h" 
#include "option.h" 
#include "2440addr.h" 
#include "2440lib.h" 
#include "2440slib.h"  
 
#include "mmu.h" 
#include "am29f800.h" 
#include "strata32.h" 
 
static int DownloadData(void); 
 
//#if 1 
    // removed because of multiple definition 
U32 downloadAddress;  
U32 downloadProgramSize; 
//#else 
//   U32 downloadAddress;  
//   U32 downloadProgramSize; 
//#endif 
 
//========================================================================================== 
void *flashType[][2]= 
{ 
    (void *)ProgramAM29F800,     "AM29LV800BB x1      ", 
//  (void *)Program28F640J3A,    "28F640J3A x2        ",     
    (void *)Program28F128J3A,    "28F128J3A(16MB) x2  ",     
	(void *)Erase28F128J3A, 	 "Erase 28F128J3A	",		// added by junon 10/29     
    0,0 
}; 
 
//========================================================================================== 
void ProgramFlash(void) 
{ 
    int i=0,whichFlash; 
    char key; 
 
    Uart_Printf("\n[ NOR Flash Memory Writer Ver 0.1 ]\n\n"); 
    Uart_Printf("The program buffer : 0x31000000 ~ 0x33ff0000\n"); 
     
    downloadAddress=0x31000000; 
    downloadProgramSize=0x0; 
 
    //MMU_Init(); 
//    ChangeRomCacheStatus(RW_NCNB); 
     
    while(1) 
    {   //display menu 
        Uart_Printf("%c : %s",'a'+i,flashType[i][1]); 
        i++; 
        if((int)(flashType[i][0])==0) 
        { 
            Uart_Printf("\n"); 
            break; 
        } 
        if((i%4)==0)  
            Uart_Printf("\n"); 
    } 
 
    Uart_Printf("Select the type of a flash memory ? "); 
    whichFlash=Uart_Getch()-'a'; 
    Uart_Printf("%c\n",(whichFlash+'a')); 
    //Uart_Printf("\n"); 
 
    ( (void (*)(void))(flashType[whichFlash][0]) )(); 
} 
void ProgramFlash1(void) 
{ 
    int i=0,whichFlash; 
    char key; 
 
    Uart_Printf("\n[ NOR Flash Memory Writer Ver 0.1 ]\n\n"); 
    Uart_Printf("The program buffer : 0x31000000 ~ 0x33ff0000\n"); 
     
    downloadAddress=0x31000000; 
    downloadProgramSize=0x0; 
 
    //MMU_Init(); 
 //   ChangeRomCacheStatus(RW_NCNB); 
     
    while(1) 
    {   //display menu 
        Uart_Printf("%c : %s",'a'+i,flashType[i][1]); 
        i++; 
        if((int)(flashType[i][0])==0) 
        { 
            Uart_Printf("\n"); 
            break; 
        } 
        if((i%4)==0)  
            Uart_Printf("\n"); 
    } 
 
    Uart_Printf("Select the type of a flash memory ? "); 
    whichFlash=Uart_Getch()-'a'; 
    Uart_Printf("%c\n",(whichFlash+'a')); 
    //Uart_Printf("\n"); 
 
    if( i<0 || (i>=(sizeof(flashType)/8)) ) 
        return; 
 
    Uart_Printf("Do you want to download through UART0 from 0x%x? [y/n] : ",downloadAddress); 
    key=Uart_Getch(); 
    /* 
    Uart_Printf("%c\n",key); 
    if(key=='y') 
    { 
        if(!DownloadData()) 
            return; 
    } 
*/ 
    ( (void (*)(void))(flashType[whichFlash][0]) )(); 
} 
//========================================================================================== 
static int DownloadData(void) 
{ 
    int i,tmp; 
    U16 checkSum=0,dnCS; 
    U32 fileSize=10; 
    U8 *downPt; 
 
    downPt=(U8 *)downloadAddress; 
    
    Uart_Printf("\ndownloadAddress = %x\n",downloadAddress); 
 
    Uart_Printf("Download the plain binary file(.BHC) to be written\n"); 
    Uart_Printf("The file format : (4)+(n)+CS(2)\n"); 
    Uart_Printf("To transmit .BIN file : wkocm2 xxx.BIN /1 /d:1\n"); 
    Uart_Printf("Download methods : COM:8Bit,NP,1STOP\n"); 
  
    Uart_Printf("\nSTATUS : "); 
    rINTMSK=BIT_ALLMSK; 
     
    tmp=RdURXH1(); //To remove overrun error state. 
 
    i=0;     
    while(i