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