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

📄 main.cpp

📁 coldfire5206芯片的boot程序
💻 CPP
字号:

/*	
Create by					date
shiliangcai				2002/10/15
*/

#include "bastype.h"
#include "uartdrv.h"
#include "flash.h"
#include "mcf5206.h"
#include "mbusman.h"
#include "Update.h"
#include "graph.h"
#include "init.h"
#include "main.h"

//********************************************************
//	Function Reference
//********************************************************
VOID		DoJump(VOID);
void TestForBios();

//VOID	main()
void  main()
{
	UCHAR				acTempStr[100];

	// Firstly, mask all interrutp
	asm("  MOVE.W #$2700, SR ");
	HardwareInit();	
	SoftwareInit();
	// Lastly, open all interrutp
	asm("  MOVE.W #$2000, SR ");

#ifdef BIOS_DEBUG
	TestForBios();
#endif
	BOOL bMainIsValid;
	BOOL bFpgaIsValid;


	if (CheckSystemValid(&bMainIsValid, &bFpgaIsValid) == TRUE)
	{
		if (g_stSysFlag.stESysFlag.ucUpdateIsValid != 1)
		{
			DoJump();
		}
		else
		{
			g_stSysFlag.stESysFlag.ucUpdateIsValid = 0x00;
			if (FALSE == WriteEeprom(EEPROM_SYSTEM_FLAG_POS+1, 1, (UINT8*)(&g_stSysFlag.stESysFlag.ucUpdateIsValid)))
			{
				TextOut(40, 80, RED, 0,  "EEPROM is not operated now, please reboot and retry");
				while (1);
			}
		}
	}
	else
	{
		g_stSysFlag.stESysFlag.ucUpdateMachineID = g_stSysFlag.stFSysFlag.ucSelfMachineID;
		g_stSysFlag.stESysFlag.ucUpdatePortID = g_stSysFlag.stFSysFlag.ucSelfPortID;
	}
	// InitNetPort()中要根据g_stSysFlag.stESysFlag.ucMainSysIsValid判断
	// 是从主程序跳过来的(不需要版本确认),还是没有主程序
	g_stSysFlag.stESysFlag.ucMainSysIsValid = bMainIsValid;

	JudgeLayOut();

	// 由于根据FLASH来判断的6000还是8000板,所以必须在Judgeout后,ConfigUart()
	ConfigUart();

	if (bFpgaIsValid == TRUE)
	{
		ScreenInit(g_stSysFlag.stFSysFlag.lFpgaPos, 0);
	}

	strcpy ((char*)acTempStr, "BIOS");
	strcat ((char*)acTempStr, "  Version");
	strcat ((char*)acTempStr, BIOS_STRING);
//	int temp_pos = strlen((char*)acTempStr);
//	sprintf((char*)(acTempStr + temp_pos), "%d.%d", g_stSysFlag.stFSysFlag.ucBiosVer / 10, g_stSysFlag.stFSysFlag.ucBiosVer % 10);
//	acTempStr[temp_pos + 3] = 0x00;
#ifdef BIOS_DEBUG
	strcat((char*)acTempStr, "  Beta");
#endif
	// 删除时间,否则无法验证,如何生成BIN的过程
//	strcat((char*)acTempStr, " ");
//	strcat((char*)acTempStr, __TIME__);
	strcat((char*)acTempStr, " ");
	strcat((char*)acTempStr, __DATE__);
	if (g_stSysFlag.stFSysFlag.ucFlashSizeType == FLASH_SIZE_4M)
	{
		strcat((char*)acTempStr, "   FLASH: 4M");
	}
	else
	{
		strcat((char*)acTempStr, "   FLASH: 2M");
	}
	TextOut(40, 20, YELLOW, 0, (char*)acTempStr);

//	GetCurBedNo();
	char			flashbuf[30];

	sprintf( flashbuf, "%02X%02X%02X%02X%02X%02X%02X%02X",   
		g_stSysFlag.stFSysFlag.acFlashID[0],
		g_stSysFlag.stFSysFlag.acFlashID[1],
		g_stSysFlag.stFSysFlag.acFlashID[2],
		g_stSysFlag.stFSysFlag.acFlashID[3],
		g_stSysFlag.stFSysFlag.acFlashID[4],
		g_stSysFlag.stFSysFlag.acFlashID[5],
		g_stSysFlag.stFSysFlag.acFlashID[6],
		g_stSysFlag.stFSysFlag.acFlashID[7]);
	TextOut( 100, 40, YELLOW, 0 ,flashbuf );
	TextOut(40, 40, YELLOW, 0, "BedNo:" );

	if (bMainIsValid == FALSE)
	{
		TextOut(40, 80, YELLOW, 0,  "Main system is invalid, and must firstly upgrade main system");
	}
	else if (bFpgaIsValid == FALSE)
	{
		TextOut(40, 80, YELLOW, 0,  "FPGA data is invalid, and must firstly download FPGA data");
	}

	Update();

	while (1);	// waiting for reseting
}




//Jump to normal program 
VOID DoJump(VOID)
{
	//Reset the watchdog : why the pm_8000 do not reset automtically?
//	ResetWatchdog();

	//Clear all uart and interrupt
	// clear all interrupt state.
	DisableSysInterrupt(MCF5206::IM_ALL);

	//Jump to normal program
	asm("   JMP		0x820000");
}


void TestForBios()
{
#ifdef BIOS_TEST_FLASH_4M
	UINT8 acTestNo[8];
	ScreenInit();
	JudgeLayOut();
	GetCurBedNo(acTestNo);
	extern void Test_4MFlash();
	Test_4MFlash();
	while (1);
#endif

#ifdef BIOS_NOT_ENTER_MAIN
	g_stSysFlag.stESysFlag.ucMainSysIsValid = 0;
#endif

#ifdef BIOS_TEST_MODULE
	// for test module 
	g_stSysFlag.stESysFlag.ucUpdateIsValid = 1;
	g_stSysFlag.stESysFlag.ucUpdateMachineID = 128;
	g_stSysFlag.stESysFlag.ucUpdateUartBaud = 7;
	g_stSysFlag.stESysFlag.ucUpdatePortID = 2;
#endif
}

⌨️ 快捷键说明

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