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

📄 download.c

📁 三星mcu S3C4510B评估板的原码
💻 C
字号:
/*************************************************************************/
/*                                                                       */
/* FILE NAME                                      VERSION                */
/*                                                                       */
/* source\download.c                               1.1                   */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*     DIAGNOSTIC CODE for S3C4510B0                                     */
/*                                                                       */
/*                                                                       */
/* DATA STRUCTURES                                                       */
/*                                                                       */
/* FUNCTIONS : serial download(SDRAM/Fhash fusing) and                   */
/*             excution/using PC Hyperterminal                           */
/*                                                                       */
/* DEPENDENCIES                                                          */
/*                                                                       */
/*                                                                       */
/* NAME:    Nicolas Park           				         */
/* The last Modification date:  25-June-2002                             */
/* REMARKS:  Created initial version 1.0                                 */
/*                                                                       */
/*                                Copyright (C) 2002 AIJISYSTEM CO.,LTD  */
/*************************************************************************/

#include <stdio.h>
#include "s3c4510b0.h"
#include "uart.h"
#include "pollio.h"
#include "download.h"
#include "sysconf.h"
#include "flash.h"

#define  OK        1
#define  FAIL      0


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

	downarea = (U32 *)0x1000050;

	Print("\n $$ Download Area is 0x1000050 : ") ;

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

	RcvDataSize=GetDataSize(CONSOLE)  ;
	ReceiveData((char *)downarea,RcvDataSize) ;

	Print("\nDownload Ok. Wait for CRC check!!") ;

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

void FlashDown()
{
	unsigned  RcvDataSize ;

	// Download ROM Data to ROM_BufferArea
	Print("\n\r Flash download and fusing program !! ") ;
	Print("\n\r Waiting for Program Download for EEPROM ..... ") ;

	RcvDataSize = GetDataSize(CONSOLE) ; 	// down.c

	ReceiveData((char *)EEPROM_BufferArea,RcvDataSize) ;

	Print("\nDownload Ok!!. Wait for CRC check!!!") ;

//	if(CRCErrorCheck((char *)EEPROM_BufferArea,RcvDataSize)) {

              Print("\n\rCRC check OK!\r");  //download end, download code start address 0x1200000

	ProgramFlash();   //jump to flash.c

//	}
//	else {
//                      Print("\n\rCRC check FAIL!\r");
//        	       }
		
}


/*********************************************************************
 *        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 + -