📄 hardware.c
字号:
S_PortADataReg|=0x1000;
}
/*---------------------------------------------------------------------*/
/* 初始化复位引脚: PA4-PA0 */
/*---------------------------------------------------------------------*/
/*
void InitResetPins(void)
{
S_PortAPinAssgmntReg&=0x03FF;
S_PortADataDirReg|=0xFC00;
S_PortADataReg|=0xF800;
}
*/
/*-----------------------------------------------------------------------*/
/* 系统各部件自检 */
/*-----------------------------------------------------------------------*/
void SelfTest(SelfTest_Result *pResult)
{
int i;
unsigned long rc;
pResult->MPC860_Result=SELFTEST_SUCCESS;
/* InitResetPins(); */
/*-------------------------------------------------------------*/
/* 测试FPGA */
/*-------------------------------------------------------------*/
pResult->FPGA_Result=SELFTEST_FAILED;
for(i=0;i<10;i++)
{
rc=TestFPGA();
if(rc==0)
{
pResult->FPGA_Result=SELFTEST_SUCCESS;
break;
}
else
{
pResult->FPGA_Result=rc;
ResetFPGA();
my_Delay(50);
}
}
/*-------------------------------------------------------------*/
/* 测试C54 */
/* C54的功能用CPLD完成,2001.11.29 修改 */
/*-------------------------------------------------------------*/
/*pResult->C54_Result=SELFTEST_SUCCESS; */
/*-------------------------------------------------------------*/
if(TestNib())
pResult->Nib_Result=SELFTEST_FAILED;
else
pResult->Nib_Result=SELFTEST_SUCCESS;
}
void StartFPGA(void)
{
FPGA_START_REG=0x01;
}
void StopFPGA(void)
{
FPGA_START_REG=0x00;
}
/*-------------------------------------------------------------------------*/
/* 设置温度传感器的告警门限 */
/*-------------------------------------------------------------------------*/
void Set_Temp_Alarm_Threshold()
{
TEMP_MONITOR_REG1=SystemData.TempAlarm.Temp1;
TEMP_MONITOR_REG2=SystemData.TempAlarm.Temp2;
TEMP_MONITOR_REG3=SystemData.TempAlarm.Temp3;
}
void Write_Empty_Packet(void)
{
TSBP_T Ts;
int i;
Ts.Sync_byte =0x47;
Ts.Adaption_field_control =1;
Ts.Continuity_counter =0;
Ts.Payload_unit_start_indicator =0;
Ts.Transport_err_indicator =0;
Ts.Transport_priority =0;
Ts.Transport_scambling_control =0;
Ts.PID =0x1FFF;
Ts.UserFlag =0xBA;
Ts.IpAddr =SystemData.EthernetPara.IP;
for(i=0;i<179;i++)
Ts.Padding[i]=0xFF;
FRAME_READY_REG =0x00;
MemCopy((unsigned char *)EMPTY_PACKET_START_ADDR,(unsigned char *)&Ts,sizeof(TSBP_T));
for(i=0;i<10;i++)
{
if(*(unsigned char *)EMPTY_PACKET_START_ADDR==0x47)
break;
else
MemCopy((unsigned char *)EMPTY_PACKET_START_ADDR,(unsigned char *)&Ts,sizeof(TSBP_T));
}
my_Delay(50);
FRAME_READY_REG=0x03;
}
void StartWork(void)
{
StartFPGA();
}
unsigned long ConfigRemapTable(int flag)
{
/*--------------------------------------------------------------------------*/
/* 设置所有端口禁止复用 */
/*--------------------------------------------------------------------------*/
PORT_OPEN_REG=0x00;
if(flag==0)
WriteReMapTableFirstTime();
else if(flag==1)
{
/*往FPGA写PID映射*/
WriteReMapTable();
SavePSI();
}
else if(flag==2)
{
WriteReMapTableFirstTime();
SavePSI();
}
PORT_OPEN_REG=0xFF;
USER_CHANNEL_TIMRER_REG=2;
return 0;
}
/*------------------------------------------------------------------------*/
/* 获取各部件的复位状态 */
/*------------------------------------------------------------------------*/
void GetResetState(Reset_State *pState)
{
unsigned long Rsr;
Rsr=S_ResetStatusReg;
if(Rsr&0x8000)
{
pState->MPC860_State=STATE_HARDRESET;
pState->C54_State =STATE_HARDRESET;
pState->FPGA_State =STATE_HARDRESET;
pState->Panel_State =STATE_HARDRESET;
}
else if(Rsr&0x4000)
{
pState->MPC860_State=STATE_SOFTRESET;
pState->C54_State =STATE_SOFTRESET;
pState->FPGA_State =STATE_SOFTRESET;
pState->Panel_State =STATE_SOFTRESET;
}
else
{
pState->MPC860_State=STATE_POWERON;
pState->C54_State =STATE_POWERON;
pState->FPGA_State =STATE_POWERON;
pState->Panel_State =STATE_POWERON;
}
}
void SetSIConfig()
{
int i,j;
for(i=0;i<8;i++)
for(j=0;j<4;j++)
*(unsigned char *)(SET_EXT_SI_BASE_ADDR + 0x100*i + j)=SystemData.SIConfig.PortSIConfig[i][j];
*(unsigned char *)SET_INT_SI_ADDR=0;
}
void TK_HardWareInit(void)
{
int rc;
unsigned char Cct;
unsigned long qid;
unsigned long tid;
unsigned char NibVer;
/*--------------------------------------------------------------------------*/
/* 停止FPGA */
/*--------------------------------------------------------------------------*/
StopFPGA();
/*--------------------------------------------------------------------------*/
/* 设置温度告警门限 */
/*--------------------------------------------------------------------------*/
Set_Temp_Alarm_Threshold();
/*--------------------------------------------------------------------------*/
/* 写空包 */
/*--------------------------------------------------------------------------*/
Write_Empty_Packet();
/*--------------------------------------------------------------------------*/
/* 设置级连口属性 */
/*--------------------------------------------------------------------------*/
switch(SystemData.Cct_Port_Type)
{
case CCT_PORT_TYPE_ASI:
Cct=0x01;
break;
case CCT_PORT_TYPE_SPI:
Cct=0x02;
break;
case CCT_PORT_TYPE_E3:
Cct=0x08;
break;
case CCT_PORT_TYPE_T3:
Cct=0x00;
break;
default:
Cct=0x01;
}
CCT_PORT_TYPE_REG=Cct;
/*PID重映射*/
First_PID_Remap();
/*写入SI配置信息*/
SetSIConfig();
/*--------------------------------------------------------------------------*/
/*创建PSI发送任务 */
/*--------------------------------------------------------------------------*/
#if 0
rc = t_create("PSIS", 225, 2048, 2048,T_LOCAL, &tid);
if(rc)
{
Display(" Task %s create error ! ","EMMG");
t_suspend(0L);
}
/*启动任务用于接收EMMG的连接*/
rc = t_start(tid, T_ISR|T_NOPREEMPT|T_SUPV, tk_psiSend, 0);
if(rc)
{
Display(" Task %s start error !", "PSIS");
t_suspend(0L);
}
#endif
CreateStartTask("PSIS",232,4096,4096,0,tk_psiSend,0);
/*---------------------------------------------------------------------------*/
/*网络接口版本在2.0以上启动加扰启动任务 */
/*---------------------------------------------------------------------------*/
NibVer=GetNibVer();
if(NibVer>=0x20)
{
CreateStartTask("TCAS",232,2048,2048,0,tk_caStart,0);
}
CreateStartTask(TN_SDT,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_SDTSend,0);
CreateStartTask(TN_NIT,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_NITSend,0);
CreateStartTask(TN_EIT,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_EITSend,0);
CreateQueue(QN_GETPORT0PSI,&qid);
CreateQueue(QN_GETPORT1PSI,&qid);
CreateQueue(QN_GETPORT2PSI,&qid);
CreateQueue(QN_GETPORT3PSI,&qid);
CreateQueue(QN_GETPORT4PSI,&qid);
CreateQueue(QN_GETPORT5PSI,&qid);
CreateQueue(QN_GETPORT6PSI,&qid);
CreateQueue(QN_GETPORT7PSI,&qid);
CreateStartTask(TN_GET0PSI,233,SUPERSTACK,USERSTACK,0,TK_Get0PSI,0);
CreateStartTask(TN_GET1PSI,233,SUPERSTACK,USERSTACK,0,TK_Get1PSI,0);
CreateStartTask(TN_GET2PSI,233,SUPERSTACK,USERSTACK,0,TK_Get2PSI,0);
CreateStartTask(TN_GET3PSI,233,SUPERSTACK,USERSTACK,0,TK_Get3PSI,0);
CreateStartTask(TN_GET4PSI,233,SUPERSTACK,USERSTACK,0,TK_Get4PSI,0);
CreateStartTask(TN_GET5PSI,233,SUPERSTACK,USERSTACK,0,TK_Get5PSI,0);
CreateStartTask(TN_GET6PSI,233,SUPERSTACK,USERSTACK,0,TK_Get6PSI,0);
CreateStartTask(TN_GET7PSI,233,SUPERSTACK,USERSTACK,0,TK_Get7PSI,0);
CreateQueue(QN_SEARCHPROGRAM,&qid);
CreateStartTask(TN_SEARCHPROGRAM,232,SUPERSTACK,USERSTACK,0,TK_SearchProgram,0);
my_Delay(100);/*by xu*/
Config_Nib();
t_suspend(0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -