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

📄 inthandle.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
字号:
/*------------------------------------------------------------------------------*/
/* Project Name: Multiplexer of MPEG-II                                         */
/* Module  Name: Interrupt handle                                               */
/* Purpose     :                                                                */
/* Author      : LingYiChuan                                                    */
/* Date        : 2000/9/20                                                      */
/* Version     : 1.0                                                            */
/* Copyright HignSun Dvision, All Right Reservered.                             */
/*------------------------------------------------------------------------------*/

#include <icontrol\pda8xx.h>
#include <icontrol\mpc8xx.h>
#include "psos.h"
#include "constant.h"
#include "structure.h"
#include "command.h"
#include "tspack.h"
extern void my_Delay(unsigned long int dly_ms);
extern unsigned long	SystemState;
unsigned char           UserChannelAlarm;

unsigned char           OldAlarmMsg[16];
int                     AlarmRepeat;

extern void GetConnectState(unsigned char *p);
/*------------------------------------------------------------------------------*/
/* interrupt vectors initiaze                                                   */
/*------------------------------------------------------------------------------*/
/* IRQ1                                                                         */
/* 各端口发生失步或FIFO溢出或温度告警                                           */
/* 以及用户数据通道失步或溢出                                                   */
/* 均产生此中断                                                                 */
/*------------------------------------------------------------------------------*/
void IRQ1_Handle(void)
{

	/*--------------------------------------------------------------------------*/
	/* 0-7表示每个端口的告警状态                                                */
	/* 8表示用户数据通道的告警状态                                              */
	/* 9-11 依次表示每个温度传感器的告警状态                                    */
	/*--------------------------------------------------------------------------*/
	unsigned char msg[16];
	unsigned char con[8];
	int           i,j;
	unsigned char State;
	unsigned char NewAlarm;

	if(SYSTEM_NOT_READY!=SystemState)
	{
		MemSet(msg,16,0x00);

		/*--------------------------------------------------------------------------*/
		/* 取每个端口的告警状态                                                     */
		/*--------------------------------------------------------------------------*/
		GetConnectState(con);

		msg[0]=(~PORT0_ALARM_STATE_REG)&0x07;
		msg[1]=(~PORT1_ALARM_STATE_REG)&0x07;
		msg[2]=(~PORT2_ALARM_STATE_REG)&0x07;
		msg[3]=(~PORT3_ALARM_STATE_REG)&0x07;
		msg[4]=(~PORT4_ALARM_STATE_REG)&0x07;
		msg[5]=(~PORT5_ALARM_STATE_REG)&0x07;
		msg[6]=(~PORT6_ALARM_STATE_REG)&0x07;
		msg[7]=(~PORT7_ALARM_STATE_REG)&0x07;

		/*--------------------------------------------------------------------------*/
		/* 取用户通道的状态                                                         */
		/* D0和D2有效                                                               */
		/*--------------------------------------------------------------------------*/
		UserChannelAlarm=0;

		State=USER_CHANNEL_ALARM_STATE_REG;
		State=~State;
		State=State&0x05;

		msg[8]=State;

		/*
		暂时屏蔽温度告警

		if(~PORT1_ALARM_STATE_REG&0x08)
			msg[9]=1;

		if(~PORT4_ALARM_STATE_REG&0x08)
			msg[10]=1;

		if(~PORT7_ALARM_STATE_REG&0x08)
			msg[11]=1;
		*/

		if(msg[8])
			UserChannelAlarm=1;

		/*=================================================================================*/
		/*重复告警不处理                                                                   */
		/*=================================================================================*/
		NewAlarm=FALSE;
		for(i=0;i<16;i++)
		{
			if(OldAlarmMsg[i]!=msg[i])
			{
				NewAlarm=TRUE;
				AlarmRepeat=0;
			}
		}

		if(!NewAlarm)
		{
			/*============================================================================*/
			/*告警重复三次,也上报一次                                                    */
			/*============================================================================*/
			if(AlarmRepeat==3)
			{
				NewAlarm=TRUE;
				AlarmRepeat=0;
			}
			else
				AlarmRepeat++;
		}

		if(NewAlarm)
		{
			for(i=0;i<16;i++)
			{
				/*-----------------------------------------------------------------------------*/
				/* 有告警存在                                  */
				/*-----------------------------------------------------------------------------*/
				if(msg[i]!=0)
				{
					/*-------------------------------------------------------------------------*/
					/* 将告警状态字发送给告警处理任务                                          */
					/*-------------------------------------------------------------------------*/
					SendQueue(QN_ALARM,(unsigned long *)msg);
					break;
				}

			}

			for(i=0;i<16;i++)
				OldAlarmMsg[i]=msg[i];
		}
	}
}
/*------------------------------------------------------------------------------*/
/* IRQ2                                                                         */
/*------------------------------------------------------------------------------*/
void C549_Handle(void)
{


	
	
}
/*------------------------------------------------------------------------------*/
/* IRQ3                                                                         */
/*------------------------------------------------------------------------------*/
void RaoMa_Handle(void)
{
	unsigned long Event;

	Event=S_SiPendRegister;
	S_SiPendRegister=Event;
	
}

void IntHandleInit(void)
{


	volatile unsigned long val;
	int i;
	
	/*-----------------------------------------------------------------------*/
	/* 屏蔽IRQ1外的所有外部中断                                              */
	/*-----------------------------------------------------------------------*/
	
	val=S_SiMaskRegister;
	val|=0xA0000000;
	S_SiMaskRegister=val;

	val=S_IntEdgeLvlMaskReg;
	val|=0xA0000000;
	S_IntEdgeLvlMaskReg=val;

	for(i=0;i<16;i++)
		OldAlarmMsg[i]=0;

	AlarmRepeat=0;

	PssSetIntHandler(V_SIU_IRQ1, (void*)IRQ1_Handle, (void *)0, 0);
}

⌨️ 快捷键说明

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