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