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