📄 bootloader.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 + -