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

📄 down.c

📁 s3c4510的开发板snds100的源代码。
💻 C
字号:
/*************************************************************************/
/*                                                                       */
/* FILE NAME                                      VERSION                */
/*                                                                       */
/*      down.c                     KS32C5000, KS32C50100   : version 1.0 */
/*                                                                       */
/* COMPONENT                                                             */
/*                                                                       */
/*                                                                       */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*                                                                       */
/* AUTHOR                                                                */
/*                                                                       */
/*                                                                       */
/* DATA STRUCTURES                                                       */
/*                                                                       */
/*                                                                       */
/* FUNCTIONS                                                             */
/*                                                                       */
/*      Image code download from HOST to memory on SNDS board            */
/*                                                                       */
/* DEPENDENCIES                                                          */
/*                                                                       */
/*                                                                       */
/* HISTORY                                                               */
/*                                                                       */
/*         NAME            DATE                    REMARKS               */
/*                                                                       */
/*      hbahn           09-15-1998      Created initial version 1.0      */
/*      in4maker        12-18-1998      Code updated                     */
/*************************************************************************/
#include <stdio.h>
#include "snds.h"
#include "uart.h"
#include "pollio.h"
#include "down.h"
#include "flash.h"
#include "sysconf.h"

#define  OK        1
#define  FAIL      0

/***********************************************************/
/*        Main DRAM  Download Program                      */
/***********************************************************/

void DownLoadPgm()
{
	unsigned RcvDataSize ;
	U32 *downarea ;

	Print("\n $$ Input Download Area (0x1000050) : ") ;
	downarea = (U32 *)get_num() ;
	if ( downarea == 0 ) downarea = (U32 *)DownLoadArea ;

	Print("\n $$ Waiting Download User Program ..... ") ;

	RcvDataSize=GetDataSize(CONSOLE)  ;
	ReceiveData((char *)downarea,RcvDataSize) ;
	Print("Ok.") ;

	if(CRCErrorCheck((char *)downarea,RcvDataSize)) {
	    Print("\r $$ CRC Check Ok ..") ;
            Print("\r $$ Now, User program will be started.\r");
            Print("\r $$ Enter any key to continue....");
            get_byte();
	    StartDownPgm(downarea) ;
        }
        else {
	       Print("\r $$$ CRC Check Error Occured!!!");
	       Print("\r $$$ User program start failed!!!");
        }
}


/***********************************************************/
/*         Main Flash EEPROM Download Program              */
/***********************************************************/
void FlashDown()
{
	unsigned RcvDataSize ;
	U32 *Src;
	U32 *Dst;

	// Download ROM Data to ROM_BufferArea
	Print("\r((((( This Program Should be Running at User Program )))))") ;
	Print("\rWaiting for Program Download for EEPROM ..... ") ;
	RcvDataSize = GetDataSize(CONSOLE) ; 	// down.c
	ReceiveData((char *)EEPROM_BufferArea,RcvDataSize) ;
	Print("Ok.") ;
	if(CRCErrorCheck((char *)EEPROM_BufferArea,RcvDataSize)) {
             Print("\rCRC check OK!\r");

             Src = (U32 *)EEPROM_BufferArea;
             Print("\r> EEPROM Load Address[0x00000000]_");
             Dst= (U32 *)get_num(); //get_byte();
             if(!Dst) Dst = (U32 *)EEPROM_WriteArea;

             switch(EEPROM_Type()) {
                case 1:
                case 2:
                case 3: Program_SST29EE(Src,Dst,RcvDataSize); break;
                case 4: Program_SST29SF(Src,Dst,RcvDataSize); break;
                default: Print("\rNot supported EEPROM type!!!");
             }
	}
	else {
               Print("\rCRC check FAIL!\r");
        }
		
	Print("\n\n") ;
	Print("\r+--------------------------------------------+") ;
	Print("\r| Press 'Reset' Button in SNDS board ....... |") ;
	Print("\r+--------------------------------------------+") ;
}

/*********************************************************************
 *        Select EEPROM Type for Programming
 *********************************************************************/

int EEPROM_Type(void)
{
    int items;

        Print("\n\n");
	Print("+---------------------------------------------------+\r") ;
        Print("|            SELECT EEPROM TYPE                     |\r") ;
	Print("+---------------------------------------------------+\r") ;
	Print("| 1. SST :29EE512/29LE512/29VE512                   |\r") ;
	Print("| 2. SST :29EE010/29LE010/29VE010                   |\r") ;
	Print("| 3. SST :29EE020/29LE020/29VE020                   |\r") ;
	Print("| 4. SST :29SF040/29LF040/29VF040                   |\r") ;
	Print("+---------------------------------------------------+\r") ;

        do {
	     Print("\r\r $$ Select EEPROM type : ");
	     items = get_digit(); 
        } while((items<0)&&(items>9)); 
       
        return(items);
}


/*********************************************************************
 *        GET DOWNLOAD PROGRAM SIZE           
 *********************************************************************/

unsigned GetDataSize(unsigned uart_channel) 
{
	int i ;
	unsigned DataSize=0 ;
	char RcvData[8] ;

	for(i=0 ; i<8 ; i++)
	{

		RcvData[i] = get_char(uart_channel) ;

		if ( (RcvData[i] >= '0') && (RcvData[i] <= '9') )
			DataSize=(DataSize<<4) + (RcvData[i]-'0') ;
		else if ( (RcvData[i] >= 'A') && (RcvData[i] <= 'F') )
			DataSize=(DataSize<<4) + (RcvData[i]-'A'+ 10) ;
		else if ( (RcvData[i] >= 'a') && (RcvData[i] <= 'f') )
			DataSize=(DataSize<<4) + (RcvData[i]-'a'+ 10) ;
	}
	return DataSize ;
}


void ReceiveData(char *DownArea,unsigned RcvDataSize)
{
	while(RcvDataSize--)
		*DownArea++ = get_byte() ;
}


/*********************************************************************
 *         CRC CHECK PROGRAM                  
 *********************************************************************/

unsigned  CRCErrorCheck(char *DownArea,unsigned RcvDataSize) 
{
	int i ;
	char RcvCRC[8] ;
	unsigned CRCValue=0 ;
	unsigned CheckSum=0xFFFF ;
	int RcvData ;

	for(i=0 ; i<8 ; i++)
	{

		RcvCRC[i] = get_byte() ;

		if ( (RcvCRC[i] >= '0') && (RcvCRC[i] <= '9') )
			CRCValue=(CRCValue<<4) + (RcvCRC[i]-'0') ;
		else if ( (RcvCRC[i] >= 'A') && (RcvCRC[i] <= 'F') )
			CRCValue=(CRCValue<<4) + (RcvCRC[i]-'A'+ 10) ;
		else if ( (RcvCRC[i] >= 'a') && (RcvCRC[i] <= 'f') )
			CRCValue=(CRCValue<<4) + (RcvCRC[i]-'a'+ 10) ;
	}

	//PrintReadData((char *)DownArea,RcvDataSize) ;

	// Calcuration Received Data
	while(RcvDataSize--)
	{
		RcvData = *DownArea++  ;
		CheckSum = CalcCRC(CheckSum,RcvData) ;
	}


	if (CRCValue == CheckSum) 
	       return(OK);
	else 
	       return(FAIL);
}

unsigned CalcCRC(unsigned CheckSum, int RcvData)
{
	int j ;

	for (j=0 ; j<8 ; j++)
	{
		CheckSum <<= 1 ;
		if (RcvData & 0x0080) CheckSum^= CCITT_POLYNOM ;
		RcvData <<= 1 ;
	}
	return CheckSum ;
}


/*********************************************************************
 *         MESSAGE                            
 *********************************************************************/

void PrintReadData(char *DownArea,unsigned RcvDataSize)
{
	Print("\rDownLoad Area -------- %x ",DownArea) ;
	Print("\rReceived Data Size --- %d Byte",RcvDataSize) ;

	/*
	while(RcvDataSize--) 
		Print(" %c",*DownArea++) ;
	*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -