📄 hs.c
字号:
/****************************************/
/* Copyright (c) 2004, 通信工程学院戴佳 */
/* All rights reserved. */
/* 作 者:戴佳 */
/****************************************/
//Mapper: A0-10 211=2k*4=8K A000H-A7FFH 1M_SEL
//A800H-AFFFH 2M_SEL
//B000H-B7FFH 3M_SEL
//B800H-BFFFH 4M_SEL
//Transceiver: A0-9 210=1K*4=4K C000H-C3FFH 1T_CS
// C400H-C7FFH 2T_CS
// C800H-CBFFH 3T_CS
// CC00H-CFFFH 4T_CS
//双口RAM:A0-12 213=8K 8000H-9FFFH IDT_CS
//RAM HM62256:A0-14 215=32K 0000H-7FFFH HM_CS
//SEM : D000H-DxxxH SEML
//外部程序存储区:~EA=0区分内部ROM和外部ROM的公共地址区,~PSEN=0
//ROM AM27C512:A0-15 216=64K 0000H-FFFFH
#include <other.h>
void M1_Init(); //初始化
void M2_Init();
void M3_Init();
void M4_Init();
void T1_Init();
void T2_Init();
void T3_Init();
void T4_Init();
void LoadM1_C(); //初始化时配置特殊寄存器
void LoadM2_C(); //初始化时配置特殊寄存器
void LoadM3_C(); //初始化时配置特殊寄存器
void LoadM4_C(); //初始化时配置特殊寄存器
void PerQ_Init();
void Perf_query(); //性能查询
void Int_query(); //中断队列查询
void Ram2p_q(); //双口RAM查询
void NotifyProv(); //通知主控二次配置
void Provision();
void Alm_query();
void OpenInt();
bit get_sem(uchar *sem_type);
uchar f40ms; //40ms标志
uchar f1s; //1s标志
uchar f15min; //15min标志
uchar i40ms;
uint i1s;
uchar i15min;
uchar ius;
uint xdata CounterBIP[16];
uint xdata CounterFEBE[16];
uint xdata CounterES[16];
uint xdata CounterSES[16];
uint xdata CounterUS[16];
uchar xdata FgESEn[16]; //越限使能标志
uchar xdata FgSESEn[16];
uchar xdata FgUSEn[16];
uchar xdata ESAlm[16]; //性能越限告警标志
uchar xdata SESAlm[16];
uchar xdata USAlm[16];
uchar xdata USFlag[16]; //不可用时间标示
uchar xdata k[16];
uchar xdata m[16];
uchar FgProEd; //二次配置完成标志
uchar xdata f[16]; //16个2M使用标志
uchar xdata *AddrDPR; //双口RAM起始地址
uchar Alm_Rd; //告警队列相对读指针
uchar Alm_Wr; //告警队列相对写指针
uchar Pol_Rd; //轮询队列相对读指针
uchar Pol_Wr; //轮询队列相对写指针
uchar Pro_Rd; //配置队列相对读指针
uchar Pro_Wr; //配置队列相对写指针
uchar xdata FgSDAlm[16];
uchar xdata FgADLOC;
uchar xdata FgAALOC;
uchar xdata FgAUAIS;
uchar xdata FgADH4E;
uchar xdata FgRFFE[16];
uchar xdata FgTAFE[16];
uchar xdata FgTLOS[16];
uchar xdata FgTLOC[16];
uchar xdata FgTDAIS[16];
uchar xdata FgAAIS[16];
uchar xdata FgALOP[16];
uchar xdata FgASIZE[16];
uchar xdata FgANDF[16];
uchar xdata FgAREI[16];
uchar xdata FgARDI[16];
uchar xdata FgARFI[16];
uchar xdata FgAUNEQ[16];
uchar xdata FgASLER[16];
uchar xdata FgAJ2LOL[16];
uchar xdata FgAJ2TIM[16];
uchar xdata FgPEREn[16];
uint xdata ESThre[16]; //性能门限初始值
uint xdata SESThre[16];
uint xdata USThre[16];
uchar Int0_flag; //中断队列标志
uchar Int1_flag;
void Timer_int() interrupt 1 using 1
{
TH0=0x70; //预置计数初值
TL0=0x00;
f40ms=1;
i40ms++;
if (i40ms==25)
{
f1s=1;
i40ms=0;
i1s++;
if (i1s==900) //15 minutes performance
{
f15min=1;
i1s=0;
}
}
}
void Out_int0() interrupt 0 using 1
{
uchar ch;
Int0_flag=1; //表示外部中断0,实际是双口RAM产生的中断
ch=DP_RAM_INTR; //读清中断
}
void delay1ms()
{
uchar j;
for (j=0;j<125;j++)
{
j++;
j--;
}
}
main()
{
uchar t;
uchar tmp1;
uint delcou;
WDI=0;
for (delcou=1;delcou<1000;delcou++) //delay 1s for chip configuration
{
delay1ms();
WDI=1;
WDI=0;
}
Int0_flag=0;
Int1_flag=1;
f40ms=0; //40ms标志
f1s=0; //1s标志
f15min=0; //15min标志
i40ms=0;
i1s=0;
i15min=0;
ius=0;
FgProEd=0;
EA=0; //关中断
Alm_Rd=0;
Alm_Wr=0;
Pol_Rd=0;
Pol_Wr=0;
Pro_Rd=0;
Pro_Wr=0;
M1_Init();
WDI=1;
WDI=0;
M4_Init();
WDI=1;
WDI=0;
M2_Init();
WDI=1;
WDI=0;
M3_Init();
WDI=1;
WDI=0;
WDI=1;
WDI=0;
T4_Init();
T2_Init();
T3_Init();
T1_Init();
ALM_SEM=0xFF; //drop_sem
POL_SEM=0xFF;
PRO_SEM=0xFF;
AddrDPR=0x8000;
*(AddrDPR+1)=ALMQ_ST_ADDR_L;
*(AddrDPR)=ALMQ_ST_ADDR_H;
*(AddrDPR+2)=ALMQ_LEN;
*(AddrDPR+6)=POLQ_ST_ADDR_L;
*(AddrDPR+5)=POLQ_ST_ADDR_H;
*(AddrDPR+7)=POLQ_LEN;
*(AddrDPR+11)=PROQ_ST_ADDR_L;
*(AddrDPR+10)=PROQ_ST_ADDR_H;
*(AddrDPR+12)=PROQ_LEN;
*(AddrDPR+16)=PERQ_ST_ADDR_L;
*(AddrDPR+15)=PERQ_ST_ADDR_H;
WDI=1;
WDI=0;
if (get_sem(&ALM_SEM)==1)
{
*(AddrDPR+3)=Alm_Rd;
*(AddrDPR+4)=Alm_Wr;
}
ALM_SEM=0xFF;
if (get_sem(&POL_SEM)==1)
{
*(AddrDPR+8)=Pol_Rd;
*(AddrDPR+9)=Pol_Wr;
}
POL_SEM=0xFF;
if (get_sem(&PRO_SEM)==1)
{
*(AddrDPR+13)=Pro_Rd;
*(AddrDPR+14)=Pro_Wr;
}
PRO_SEM=0xFF;
WDI=1;
WDI=0;
for (t=0;t<16;t++) //初始化
{
*(AddrDPR+18+t)=0xFF; //全部赋为0xFF,16字节留给主控用
CounterBIP[t]=0;
CounterFEBE[t]=0;
CounterES[t]=0; //used for performance counting
CounterSES[t]=0; //used for performance counting
CounterUS[t]=0; //used for performance counting
k[t]=0; //used for performance counting
m[t]=0; //used for performance counting
USFlag[t]=0; //used for performance counting
f[t]=0; //2M时隙映射配置标志赋初值
ESAlm[t]=0;
SESAlm[t]=0;
USAlm[t]=0;
ESThre[t]=900; //性能门限初始默认值900
SESThre[t]=900;
USThre[t]=900;
FgSDAlm[t]=0;
FgRFFE[t]=0;
FgTAFE[t]=0;
FgTLOS[t]=0;
FgTLOC[t]=0;
FgTDAIS[t]=0;
FgAAIS[t]=0;
FgALOP[t]=0;
FgASIZE[t]=0;
FgANDF[t]=0;
FgAREI[t]=0;
FgARDI[t]=0;
FgARFI[t]=0;
FgAUNEQ[t]=0;
FgASLER[t]=0;
FgAJ2LOL[t]=0;
FgAJ2TIM[t]=0;
FgPEREn[t]=1; //初始打开性能越限使能
}
FgADLOC=0;
FgAALOC=0;
FgAUAIS=0;
FgADH4E=0;
WDI=1;
WDI=0;
FgProEd=1;
NotifyProv(); //通知主控进行二次配置
Provision(); //二次配置
//Green Light Red Dark
Led_C1=0;
Led_C2=1;
tmp1=DP_RAM_INTR; //清除中断
OpenInt(); //通过中断掩码打开中断
EA=1; //开CPU中断
EX0=1; //开外部中断0 ,二次配置通过双口RAM中断进行
ET0=1; //开T/C0中断
PX0=0; //外部中断低优先级
PT0=1; //计数器高优先级
TMOD=0x01; //T/C0工作在方式1
TH0=0x70; //预置计数初值
TL0=0x00;
TR0=1; //启动T/C0
M1_052=M1_052|0x40; //计数器清零
M1_082=M1_082|0x40;
M1_0B2=M1_0B2|0x40;
M1_0E2=M1_0E2|0x40;
M2_052=M2_052|0x40;
M2_082=M2_082|0x40;
M2_0B2=M2_0B2|0x40;
M2_0E2=M2_0E2|0x40;
M3_052=M3_052|0x40;
M3_082=M3_082|0x40;
M3_0B2=M3_0B2|0x40;
M3_0E2=M3_0E2|0x40;
M4_052=M4_052|0x40;
M4_082=M4_082|0x40;
M4_0B2=M4_0B2|0x40;
M4_0E2=M4_0E2|0x40;
PerQ_Init(); //性能队列初始化,向固定位置写固定值
WDI=1;
WDI=0;
while(1)
{
Int_query(); //中断队列查询
WDI=1;
WDI=0;
Alm_query(); //非中断告警查询
Perf_query(); //性能查询
WDI=1;
WDI=0;
}
}
//中断查询函数
void Int_query()
{
if (Int0_flag==1)
{
Int0_flag=0;
WDI=1;
WDI=0;
Ram2p_q(); //查询双口ram
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -