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


//==================================================================== 
// File Name : flash.c 
// Function  : S3C2410 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  
//==================================================================== 
 
#include  
#include "def.h" 
#include "option.h" 
#include "addr.h" 
#include "lib.h" 
#include "slib.h"  
 
#include "mmu.h" 
//#include "am29f800.h" 
//#include "strata.h" 
//#include "strata32.h" 
 
static int DownloadData(void); 
 
#if 1 
    // removed because of multiple definition 
extern U32 downloadAddress;  
extern U32 downloadProgramSize; 
#else 
   U32 downloadAddress;  
   U32 downloadProgramSize; 
#endif 
 
//========================================================================================== 
void *flashType[][2]= 
{ 
   // (void *)ProgramAM29F800,     "AM29LV800BB x1      ", 
//  (void *)Program28F640J3A,    "28F640J3A x2        ",     
 //   (void *)Program28F128J3A,    "28F128J3A(16MB) x2  ",     
    0,0 
}; 
 
//========================================================================================== 
void ProgramFlash(void) 
{ 
    int i=0,whichFlash; 
    char key; 
 
    
     
    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("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=RdURXH0(); //To remove overrun error state. 
 
    i=0;     
    while(i