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

📄 init.cpp

📁 coldfire5206芯片平台的升级程序
💻 CPP
字号:
/****************************************************************************************************
* 文 件 名:					init.cpp
* 说    明:	原本该文件的内容是放在main.cpp中,是为了和writer.cpp共用,所以独立出来
*				
* 作    者:	史梁材
* 创建时间:	2002.07.09          
* 修改记录:
*				(1)	2003.07.09  创建该文件
***************************************************************************************************/


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

SYSCONFIGFLAG g_stSysFlag;

/**
*/
VOID  HardwareInit( VOID )
{
	UINT32 i, j;
	CHAR   result;

	*(unsigned char *)PARRAPORT_PADAT = 0xff;

	MCF5206Init();

	MBusInit( );

	// 在使用定时器喂狗之前,复位一下看门狗
	// 以免硬件初始化时间加上1S的喂狗时间叠加导致复位 
	ResetWatchdog();

	ConfigUart();
	
	return;
}

/**
*  global variables, objects. all initialization about software
*  coding here
*/
VOID  SoftwareInit( VOID )
{
	int vector;
	VOID   **vector_table;                      /* Pointer to vector table   */

	 // 定义在int_sbc.s中,装载中断向量表
	extern void* exception_handler1;
	extern void* irq_handler1;
	extern void* exception_handler;
	extern void* irq_handler;
	extern  VOID  *INT_FpgaExtInt2ISR;
	extern  VOID  *INT_FpgaExtInt3ISR;
	extern void* INT_Timer1_Interrupt;
	extern void* INT_Timer2_Interrupt;
	extern void* INT_UART2_Interrupt;
	extern void* INT_UART1_Interrupt;
	extern void* INT_Net_Interrupt;

     /* Calculate the starting address of the actual vector table.  */
    vector_table =  (VOID **) 0x0;
	for (vector = 2; vector <= 24; vector ++)
	{
		vector_table[vector] = &exception_handler1;
	}
	for (vector = 25; vector <= 31; vector ++)
	{
		vector_table[vector] = &irq_handler1;
	}
	for (vector = 32; vector <= 63; vector ++)
	{
		vector_table[vector] = &exception_handler;
	}
	for (vector = 64; vector <= 255; vector ++)
	{
		vector_table[vector] = &irq_handler;
	}
	vector = MCF5206::IV_TIMER1;
	vector_table[vector] = &INT_Timer1_Interrupt;
	vector = MCF5206::IV_TIMER2;
	vector_table[vector] = &INT_Timer2_Interrupt;
	vector = MCF5206::IV_UART1;
	vector_table[vector] = &INT_UART1_Interrupt;
	vector = MCF5206::IV_UART2;
	vector_table[vector] = &INT_UART2_Interrupt;
	vector = MCF5206::IV_EINT2;
	vector_table[vector] = &INT_FpgaExtInt2ISR;
	vector = MCF5206::IV_EINT3;
	vector_table[vector] = &INT_FpgaExtInt3ISR;
	vector = MCF5206::IV_EINT4;
	vector_table[vector] = &INT_Net_Interrupt;

	// enable timer for resetting watchdog
	EnableSysInterrupt(MCF5206::IM_TIMER1);		

	// read system flag from eeprom
	CAT24C021ReadSeqByte(EEPROM_SYSTEM_FLAG_POS, sizeof(EEPROMSYSFLAG), (UINT8*)(&g_stSysFlag.stESysFlag));

	// read system flag from flash
	memcpy((UINT8*)(&g_stSysFlag.stFSysFlag), (UINT8*)FLASH_SYSTEM_FLAG_POS, sizeof(FLASHSYSFLAG));

	if (g_stSysFlag.stESysFlag.ucMainSysIsValid != 1)	// 第一次会是0xff,所以不能用非0来判断
	{
		g_stSysFlag.stESysFlag.ucUpdateMachineID = g_stSysFlag.stFSysFlag.ucSelfMachineID;
		g_stSysFlag.stESysFlag.ucUpdatePortID = g_stSysFlag.stFSysFlag.ucSelfPortID;
	}	

	return;
}

⌨️ 快捷键说明

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