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

📄 bootloader.c

📁 武汉创维特ARM7实验箱的全部源代码
💻 C
字号:
/*************************************************************************/
/*																		 */
/* FILE NAME									  VERSION				 */
/*																		 */
/* BOOTLOADER.C											1.0 			 */
/*																		 */
/* DESCRIPTION															 */
/*																		 */
/*	   BOOT CODE for EB44B0 (S3C44B0X) 					                 */
/*																		 */
/*																		 */
/* DATA STRUCTURES														 */
/*																		 */
/* FUNCTIONS : 										                     */
/*																		 */
/* DEPENDENCIES 														 */
/*																		 */
/*																		 */
/* NAME:																 */
/* REMARKS: 															 */
/*																		 */
/*								Copyright (C) 2003 Wuhan CVTECH CO.,LTD  */
/*************************************************************************/
/* includes */
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include "option.h"
/* functions */
void Uart_Init();
void delay(void);
void Main(void);
typedef (*UClinux_Entry)(int);
typedef (*FuncDemo_Entry)(void);

/* ram address */
#define RAM_UC_ZIMAGE   0x0C480000
#define RAM_UC_IMAGE    0x0C008000
#define RAM_DEMO        0x0C000008

/* flash address */
#define FLASH_BOOT             0x0
#define FLASH_LEN_BOOT         0x10000
#define FLASH_UC_KENERAL       0x01a0000
#define FLASH_LEN_UC_KENERAL   (0x400000 - 0x1a0000)
#define FLASH_DEMO             0x00100000
#define FLASH_LEN_DEMO         (0x80000)

/* download address */
#define ADDR_DOWNLOAD          0x0C100000

/* get data function */
#define BOOT_Get_Data          Uart_Get_Data
/********************************************************************
// Function name	: UClinux_Start
// Description	    : start uClinux keneral
// Return type		: void
// Argument         : void
*********************************************************************/
void UClinux_Start(void)
{ 
	int loopcnt = 0;
	unsigned int * pSource;
	unsigned int * pDest;
	UClinux_Entry  fp;
	  
  	Uart_Printf("\r\nStarting uClinux, waiting...\r\n");
      
    /* Copy  UClinux Kernel */
    pSource = (unsigned int *)FLASH_UC_KENERAL;
    pDest = (unsigned int *)RAM_UC_ZIMAGE;
    for (loopcnt = 0;loopcnt < (FLASH_LEN_UC_KENERAL>>2);loopcnt++) 
    {
    	*pDest++ = *pSource ++;
    }

    /* Start Kernel */
    fp = (UClinux_Entry)RAM_UC_ZIMAGE;
    (*fp)(0);
}
/********************************************************************
// Function name	: FuncDemo_Start
// Description	    : start the demo program
// Return type		: void
// Argument         : bCopyFromFlash : 是否从flash中拷贝代码
*********************************************************************/
void FuncDemo_Start(int bCopyFromFlash)
{ 
	int loopcnt = 0;
	unsigned int * pSource;
	unsigned int * pDest;
	FuncDemo_Entry  fp;
	  
  	Uart_Printf("\r\nFunction Demostration Program, waiting...\r\n");
      
    /* Copy  Demostration Program to Ram */
    if(bCopyFromFlash)
    {
	    pSource = (unsigned int *)FLASH_DEMO;
	    pDest = (unsigned int *)RAM_DEMO;
	    for (loopcnt = 0;loopcnt < (FLASH_LEN_DEMO>>2);loopcnt++) 
	    {
	    	*pDest++ = *pSource ++;
	    }
	}else
	{
	    pSource = (unsigned int *)ADDR_DOWNLOAD;
	    pDest = (unsigned int *)RAM_DEMO;
	    for (loopcnt = 0;loopcnt < (FLASH_LEN_DEMO>>2);loopcnt++) 
	    {
	    	*pDest++ = *pSource ++;
	    }
	}

    /* Start Function Demostration Program */
    fp = (FuncDemo_Entry)RAM_DEMO;
    (*fp)();
}
/********************************************************************
// Function name	: CMain
// Description	    : C entry function
// Return type		: void
// Argument         : void
*********************************************************************/
void Main(void)
{
	char command[100];
	char fpga_ver, fpga_flag = 0;
	char key_get;
	UClinux_Entry  fp;
	
	// 串口初始化
	Uart_Init(MCLK,BAUD);
	  
	while(1)
	{
		key_get = 0;
		while (key_get<1 || key_get>9) 
		{	    
			Uart_Printf("\n\n") ;
			Uart_Printf("\n****************************************************************************\r") ;
			Uart_Printf("\n*                       JX44B0 BOOT LOADER OCT.2003                        *\r") ;
			Uart_Printf("\n*                         Version 1.21(2003.11.01)                         *\r");
			Uart_Printf("\n*--------------------------------------------------------------------------*\r") ;
			Uart_Printf("\n* Flash Layout(Intel 28F320 X 1 = 0x400000)                                *\r");
			Uart_Printf("\n* [Block 1] BootLoader (Sec 01-Sec 08)                                     *\r");
			Uart_Printf("\n* [Block 2] hzk16      (Sec 09-Sec 15)                                     *\r");
			Uart_Printf("\n* [Block 3] ascii16x8  (Sec 16-Sec 16)                                     *\r");
			Uart_Printf("\n* [Block 4] iis wav    (Sec 18-Sec 23)                                     *\r");
			Uart_Printf("\n* [Block 5] demo       (Sec 24-Sec 31)                                     *\r");
			Uart_Printf("\n* [Block 6] uClinux    (Sec 32-Sec 71)                                     *\r");
			Uart_Printf("\n*--------------------------------------------------------------------------*\r");
			Uart_Printf("\n* [3]COM Download [Block 3] -- demo.                                        *\r");
			Uart_Printf("\n* [6]Start uClinux                                                         *\r");
			Uart_Printf("\n* [7]Start demo                                                            *\r");
			Uart_Printf("\n*--------------------------------------------------------------------------*\r") ;
			Uart_Printf("\n*      http:www.cvtech.com.cn                                              *\r") ;
			Uart_Printf("\n*      Email: support@cvtech.com.cn                                        *\r") ;
			Uart_Printf("\n****************************************************************************\r") ;

			Uart_Printf("\n\rSelect Item : ") ;
		    key_get = Uart_Getch();
		    Uart_Printf("%c\r\n", key_get);
		    
			switch(key_get)
			{
			case '3':
				// Download demo to 0x0C100000
				BOOT_Get_Data(ADDR_DOWNLOAD);
				// Program Function Demostration Program
				Uart_Printf("Download completed!!!\r\n");
				// Run from downloaded code
				FuncDemo_Start(0);
				break;
			case '6':
				// Start UClinux
				UClinux_Start();
				break;
			case '7':
				// Start Function Demostration Program
				FuncDemo_Start(1);
				break;
			default :
				// error
				Uart_Printf("invalid choice, please select again\r\n");
				break;
			}
		}
	}
}

⌨️ 快捷键说明

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