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

📄 hardware.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -