📄 hardware.c
字号:
/*------------------------------------------------------------------------------*/
/* Project Name: Multiplexer of MPEG-II */
/* Module Name: */
/* Purpose : */
/* Author : LingYiChuan */
/* Date : 2000/9/20 */
/* Version : 1.0 */
/* Copyright HignSun Dvision, All Right Reservered. */
/*------------------------------------------------------------------------------*/
#include <icontrol\mpc8xx.h>
#include "src\board.h"
#include "psos.h"
#include "constant.h"
#include "structure.h"
#include "command.h"
#include "tspack.h"
#include "repid.h"
#include "nib.h"
#include "caproc.h"
extern void my_Delay(unsigned long int dly_ms);
extern unsigned char PanelOK;
extern unsigned char Connected;
extern unsigned char SystemState;
extern System_Data SystemData;
extern unsigned long First_PID_Remap(void);
extern unsigned long WriteReMapTable(void);
extern void ReportPIDRemap(unsigned char);
extern void tk_psiSend(void);
extern void TK_Repid(void);
extern void TK_SDTSend(void);
extern void TK_NITSend(void);
extern void TK_EITSend(void);
extern void TK_SearchProgram(void);
extern void TK_Get0PSI(void);
extern void TK_Get1PSI(void);
extern void TK_Get2PSI(void);
extern void TK_Get3PSI(void);
extern void TK_Get4PSI(void);
extern void TK_Get5PSI(void);
extern void TK_Get6PSI(void);
extern void TK_Get7PSI(void);
unsigned long TestFPGA(void)
{
unsigned char Failed=FALSE;
unsigned char FPGA1,FPGA2,FPGA3;
unsigned char rt;
FPGA1=0;
FPGA2=0;
FPGA3=0;
FPGA1_TEST_REG=0x55;
my_Delay(50);
rt=FPGA1_TEST_REG;
if(rt!=0x55)
{
FPGA1=1;
Display("FPGA1 selftest failed! \n");
}
FPGA1_TEST_REG=0xAA;
my_Delay(50);
rt=FPGA1_TEST_REG;
if(rt!=0xAA)
{
FPGA1=1;
Display("FPGA1 selftest failed! \n");
}
FPGA2_TEST_REG=0x55;
my_Delay(50);
rt=FPGA2_TEST_REG;
if(rt!=0x55)
{
FPGA2=1;
Display("FPGA2 selftest failed! \n");
}
FPGA2_TEST_REG=0xAA;
my_Delay(50);
rt=FPGA2_TEST_REG;
if(rt!=0xAA)
{
FPGA2=1;
Display("FPGA2 selftest failed! \n");
}
FPGA3_TEST_REG=0x55;
my_Delay(50);
rt=FPGA3_TEST_REG;
if(rt!=0x55)
{
FPGA3=1;
Display("FPGA3 selftest failed! \n");
}
FPGA3_TEST_REG=0xAA;
my_Delay(50);
rt=FPGA3_TEST_REG;
if(rt!=0xAA)
{
FPGA3=1;
Display("FPGA3 selftest failed! \n");
}
rt=0x00|(FPGA3<<2)|(FPGA2<<1)|(FPGA1);
if(rt==0)
Display("FPGA selftest successfully! \n");
return rt;
}
unsigned long TestC54(void)
{
unsigned long Event;
unsigned short ret;
volatile unsigned char r1,r2;
unsigned char Success=FALSE;
unsigned short i,j;
unsigned char bufh[2048];
unsigned char bufl[2048];
/*--------------------------------------------------------------------------*/
/* 写HPI控制寄存器,设置操作时高八位在前 */
/*--------------------------------------------------------------------------*/
HPI_CONTROL_REG_H=0x00;
HPI_CONTROL_REG_L=0x00;
HPI_ADDR_REG_H=0x00;
HPI_ADDR_REG_L=0x10;
HPI_DATA2_REG_H=0x01;
HPI_DATA2_REG_L=0x55;
HPI_DATA2_REG_H=0x01;
HPI_DATA2_REG_L=0x55;
/*-------------------------------------------------------------------------*/
/* 中断C54 */
/*-------------------------------------------------------------------------*/
HPI_CONTROL_REG_H=0x04;
HPI_CONTROL_REG_L=0x04;
/*-------------------------------------------------------------------------*/
/* 检查C549返回的结果 */
/*-------------------------------------------------------------------------*/
for(i=0;i<100;i++)
{
/*---------------------------------------------------------------------*/
/* 检查是否有C54的中断,对应于IRQ2 */
/*---------------------------------------------------------------------*/
Event=S_SiPendRegister;
S_SiPendRegister=Event;
if(Event&0x08000000)
{
Success=TRUE;
/*-----------------------------------------------------------------*/
/* 清除C54产生的中断 */
/*-----------------------------------------------------------------*/
HPI_CONTROL_REG_H=0x08;
HPI_CONTROL_REG_L=0x08;
break;
}
else
my_Delay(50);/*by xu*/
}
if(Success)
{
/*--------------------------------------------------------------------*/
/* 如果有回应,检查返回的值是否成功 */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* 读C54的返回值 */
/*--------------------------------------------------------------------*/
HPI_CONTROL_REG_H=0x00;
HPI_CONTROL_REG_L=0x00;
HPI_ADDR_REG_H=0x00;
HPI_ADDR_REG_L=0x14;
r1=HPI_DATA2_REG_H;
r2=HPI_DATA2_REG_L;
r1=HPI_DATA2_REG_H;
r2=HPI_DATA2_REG_L;
ret=(r1<<8)|r2;
if(ret==0xAA01)
{
HPI_CONTROL_REG_H=0x00;
HPI_CONTROL_REG_L=0x00;
HPI_ADDR_REG_H=0x01;
HPI_ADDR_REG_L=0x14;
r1=HPI_DATA2_REG_H;
r2=HPI_DATA2_REG_L;
r1=HPI_DATA2_REG_H;
r2=HPI_DATA2_REG_L;
ret=(r1<<8)|r2;
if(ret==0x0101)
{
Display("C54 selftest succesfully! \n");
return 0;
}
else
{
Display("C54 selftest failed! ret=0x%x \n",ret);
return 1;
}
}
else
{
Display("C54 selftest failed! ret=0x%x \n",ret);
return 1;
}
}
else
{
Display("C54 selftest failed! no interrupt received.");
return 1;
}
}
void ResetFPGA(void)
{
/*----------------------------------------------------------------*/
/* set PA4 0, and then set PA4 1 */
/*----------------------------------------------------------------*/
S_PortADataReg&=0xF700;
my_Delay(50);
S_PortADataReg|=0x0800;
}
void ResetC54(void)
{
/*----------------------------------------------------------------*/
/* set PA0 0, and then set PA0 1 */
/*----------------------------------------------------------------*/
S_PortADataReg&=0x7FFF;
my_Delay(50);
S_PortADataReg|=0x8000;
}
void ResetPanel(void)
{
/*----------------------------------------------------------------*/
/* set PA1 0, and then set PA1 1 */
/*----------------------------------------------------------------*/
S_PortADataReg&=0xBFFF;
my_Delay(50);
S_PortADataReg|=0x4000;
}
void ResetRaoma(void)
{
/*----------------------------------------------------------------*/
/* set PA2 0, and then set PA2 1 */
/*----------------------------------------------------------------*/
S_PortADataReg&=0xDFFF;
my_Delay(1);
S_PortADataReg|=0x2000;
}
void ResetNetboard(void)
{
/*----------------------------------------------------------------*/
/* set PA3 0, and then set PA3 1 */
/*----------------------------------------------------------------*/
S_PortADataReg&=0xEFFF;
my_Delay(50);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -