📄 test.c
字号:
f2rc7860_wr(F2Intmask0_b,inter_reg[3][0]);
inter_reg[3][0] &= 0xD0; //取出可发生自动倒换的bit位
if (inter_reg[3][0] != 0){
init_recover[3] = 1;
path_switch_otbb();
// SetExtRdyTbl(7);
}
}
if (inter_reg[3][1] != 0){
f2rc7860_wr(F2Intmask1_b,inter_reg[3][1]);
}
if (inter_reg[3][2] != 0){
f2rc7860_wr(F2Intmask2_b,inter_reg[3][2]);
inter_reg[3][2] &= 0xE0;
if (inter_reg[3][2] != 0){
init_recover[3] = 1;
path_switch_otbb();
// SetExtRdyTbl(7);
}
}
if (inter_reg[3][3] != 0){
// f2rc7860_wr(F2Intmask3_b,judge3);
inter_reg[3][3] &= 0x80;
if (inter_reg[3][3] != 0){
init_recover[3] = 1;
path_switch_otbb_tu();
SetExtRdyTbl(8);
}
}
}
f2rc7860_wr(F2Int_mask,0);
}
}
if (int_reg == 0){ //检测出中断信号漏检以后再次进行倒换
SetExtRdyTbl(2);
SetExtRdyTbl(4);
if ((start_flg[0] == 0) && (f2int_reg == 0)){
SetExtRdyTbl(6);
SetExtRdyTbl(8);
}
// test_reg[1] = test_reg[0] = 0; //检测变量重新清零
}
// SetExtRdyTbl(15); //每秒查询改写2M盘的AIS速率
Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
f2rc7860_wr(F2Rdint_clr,0x40); //清除OTB盘的F2Ia3_a与F2Ia3_b中断位
Int_mask = 0;
SetExtRdyTbl(17); //进行时钟频偏检测程序
// SetResRdyTbl(41); //打印中断次数
}
/****************************************************************************************
void service_int0(void) interrupt 0 using 1{
volatile unsigned char int_reg;
volatile unsigned char judge;
volatile unsigned char judge1;
volatile unsigned char judge2;
volatile unsigned char judge3;
volatile unsigned char temp,temp1,temp2;
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[0][temp] = XBYTE[temp + 0x88A6];
ais_reg[1][temp] = XBYTE[temp + 0x8AA6];
if (start_flg[0] == 0){
ais_reg[2][temp] = f2rc7860_rd(temp + 0x00A6);
ais_reg[3][temp] = f2rc7860_rd(temp + 0x02A6);
}
}
for (temp = 0; temp <= 3; temp++){ //取出4个光口的中断寄存器值
inter_reg[0][temp] = XBYTE[temp + 0x88B5];
inter_reg[1][temp] = XBYTE[temp + 0x8AB5];
if (start_flg[0] == 0){
inter_reg[2][temp] = f2rc7860_rd(temp + 0x00B5);
inter_reg[3][temp] = f2rc7860_rd(temp + 0x02B5);
}
}
int_reg = Int_vec;
temp = int_reg & 0xF0;
if (temp){
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[0][temp] |= XBYTE[temp + 0x88A6];
}
temp = inter_reg[0][0] & 0xDA;
temp1 = inter_reg[0][2] & 0xE0;
temp2 = inter_reg[0][3] & 0x80;
if (temp | temp1 | temp2){
intflg_MCBA = 1; //计算误码秒的标志位
}
if (inter_reg[0][0] != 0){
Intmask0_a = inter_reg[0][0];
inter_reg[0][0] &= 0xD0; //取出可发生自动倒换的bit位
if (inter_reg[0][0] != 0){
init_recover[0] = 1;
path_switch_mcba();
// SetExtRdyTbl(1);
}
}
if (inter_reg[0][1] != 0){
Intmask1_a = inter_reg[0][1];
}
if (inter_reg[0][2] != 0){
Intmask2_a = inter_reg[0][2];
inter_reg[0][2] &= 0xE0;
if (inter_reg[0][2] != 0){
// SetExtRdyTbl(1);
init_recover[0] = 1;
path_switch_mcba();
}
}
if (inter_reg[0][3] != 0){
// Intmask3_a = judge3;
inter_reg[0][3] &= 0x80;
if (inter_reg[0][3] != 0){
test_reg[0] += 1;
init_recover[0] = 1;
path_switch_mcba_tu();
SetExtRdyTbl(2);
}
}
}
temp = int_reg & 0x0F;
if (temp){
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[1][temp] |= XBYTE[temp + 0x8AA6];
}
temp = inter_reg[1][0] & 0xDA;
temp1 = inter_reg[1][2] & 0xE0;
temp2 = inter_reg[1][3] & 0x80;
if (temp | temp1 | temp2){
intflg_MCBB = 1;
}
if (inter_reg[1][0] != 0){
Intmask0_b = inter_reg[1][0];
inter_reg[1][0] &= 0xD0; //取出可发生自动倒换的bit位
if (inter_reg[1][0] != 0){
test_reg[1] += 1;
init_recover[1] = 1;
path_switch_mcbb();
// SetExtRdyTbl(3);
}
}
if (inter_reg[1][1] != 0){
Intmask1_b = inter_reg[1][1];
}
if (inter_reg[1][2] != 0){
Intmask2_b = inter_reg[1][2];
inter_reg[1][2] &= 0xE0;
if (inter_reg[1][2] != 0){
// SetExtRdyTbl(3);
init_recover[1] = 1;
path_switch_mcbb();
}
}
if (inter_reg[1][3] != 0){
// Intmask3_b = judge3;
inter_reg[1][3] &= 0x80;
if (inter_reg[1][3] != 0){
init_recover[1] = 1;
path_switch_mcbb_tu();
SetExtRdyTbl(4);
}
}
}
// Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
// judge = int_flg & 0x04;
// if (judge == 0x04){
if (f2rc7820_rd(F2Int_reg)){
f2rc7820_wr(F2Encrypt_reg,0xAA); //open 7820 write reg
f2rc7820_wr(F2Intmask_reg,0xFF);
}
// judge = int_flg & 0x08; //取出OTB7860的中断
// if (judge == 0x08){
int_reg = f2rc7860_rd(F2Int_vec);
if (int_reg){
if (start_flg[0] == 1){
f2rc7860_wr(F2Reg_protect,0xAA); //open 7860 write reg protect
f2rc7860_wr(F2Int_mask,0x80);
}
else{
if (int_reg & 0xF0){
judge = f2rc7860_rd(F2Ia0_a); //光分支盘A口中断处理
judge1 = f2rc7860_rd(F2Ia1_a);
judge2 = f2rc7860_rd(F2Ia2_a);
judge3 = f2rc7860_rd(F2Ia3_a);
// f2rc7860_wr(F2Rdint_clr,0x40); //清除OTB盘的F2Ia3_a与F2Ia3_b中断位
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[2][temp] |= f2rc7860_rd(temp + 0x00A6);
}
if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
intflg_OTBA = 1;
}
if (judge != 0){
f2rc7860_wr(F2Intmask0_a,judge);
judge &= 0xD0; //取出可发生自动倒换的bit位
if (judge != 0){
init_recover[2] = 1;
path_switch_otba();
// SetExtRdyTbl(5);
}
}
if (judge1 != 0){
f2rc7860_wr(F2Intmask1_a,judge1);
// judge1 &= 0xF0;
// if (judge1 != 0){
// SetExtRdyTbl(5);
// path_switch_otba();
// }
}
if (judge2 != 0){
f2rc7860_wr(F2Intmask2_a,judge2);
judge2 &= 0xE0;
if (judge2 != 0){
// SetExtRdyTbl(5);
init_recover[2] = 1;
path_switch_otba();
}
}
if (judge3 != 0){
// f2rc7860_wr(F2Intmask3_a,judge3);
judge3 &= 0x80;
if (judge3 != 0){
init_recover[2] = 1;
path_switch_otba_tu();
SetExtRdyTbl(6);
}
}
}
if (int_reg & 0x0F){
judge = f2rc7860_rd(F2Ia0_b); //光分支盘B口中断处理
judge1 = f2rc7860_rd(F2Ia1_b);
judge2 = f2rc7860_rd(F2Ia2_b);
judge3 = f2rc7860_rd(F2Ia3_b);
// f2rc7860_wr(F2Rdint_clr,0x40); //清除OTB盘的F2Ia3_a与F2Ia3_b中断位
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[3][temp] |= f2rc7860_rd(temp + 0x02A6);
}
if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
intflg_OTBB = 1;
}
if (judge != 0){
f2rc7860_wr(F2Intmask0_b,judge);
judge &= 0xD0; //取出可发生自动倒换的bit位
if (judge != 0){
init_recover[3] = 1;
path_switch_otbb();
// SetExtRdyTbl(7);
}
}
if (judge1 != 0){
f2rc7860_wr(F2Intmask1_b,judge1);
// judge1 &= 0xF0;
// if (judge1 != 0){
// SetExtRdyTbl(7);
// path_switch_otbb();
// }
}
if (judge2 != 0){
f2rc7860_wr(F2Intmask2_b,judge2);
judge2 &= 0xE0;
if (judge2 != 0){
// SetExtRdyTbl(7);
init_recover[3] = 1;
path_switch_otbb();
}
}
if (judge3 != 0){
// f2rc7860_wr(F2Intmask3_b,judge3);
judge3 &= 0x80;
if (judge3 != 0){
init_recover[3] = 1;
path_switch_otbb_tu();
SetExtRdyTbl(8);
}
}
}
}
}
SetExtRdyTbl(15); //每秒查询改写2M盘的AIS速率
Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
f2rc7860_wr(F2Rdint_clr,0x40); //清除OTB盘的F2Ia3_a与F2Ia3_b中断位
}
/****************************************************************************************
void service_int0(void) interrupt 0 using 1{
volatile unsigned char int_reg;
volatile unsigned char judge;
volatile unsigned char judge1;
volatile unsigned char judge2;
volatile unsigned char judge3;
volatile unsigned char temp;
// Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
// f2rc7860_wr(F2Rdint_clr,0x40); //清除OTB盘的F2Ia3_a与F2Ia3_b中断位
// int_flg = XBYTE[0xB400]; //中断源片选信号 Bit0 MCB7820,Bit1 MCB7860,Bit2 OTB7820,Bit3 OTB7860
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[0][temp] = XBYTE[temp + 0x88A6];
ais_reg[1][temp] = XBYTE[temp + 0x8AA6];
if (start_flg[0] == 0){
ais_reg[2][temp] = f2rc7860_rd(temp + 0x00A6);
ais_reg[3][temp] = f2rc7860_rd(temp + 0x02A6);
}
}
// for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
// ais_reg[0][temp] |= XBYTE[temp + 0x88A6];
// ais_reg[1][temp] |= XBYTE[temp + 0x8AA6];
// if (start_flg[0] == 0){
// ais_reg[2][temp] |= f2rc7860_rd(temp + 0x00A6);
// ais_reg[3][temp] |= f2rc7860_rd(temp + 0x02A6);
// }
// }
// Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
// f2rc7860_wr(F2Rdint_clr,0x40); //清除OTB盘的F2Ia3_a与F2Ia3_b中断位
int_reg = Int_vec;
if (int_reg & 0xF0){
judge = Ia0_a; //得出MCB的7860A口IA0中断寄存器值
judge1 = Ia1_a;
judge2 = Ia2_a;
judge3 = Ia3_a;
Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[0][temp] |= XBYTE[temp + 0x88A6];
}
if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
intflg_MCBA = 1; //计算误码秒的标志位
}
if (judge != 0){
Intmask0_a = judge;
judge &= 0xD0; //取出可发生自动倒换的bit位
if (judge != 0){
// SetExtRdyTbl(1);
init_recover[0] = 1;
path_switch_mcba();
}
}
if (judge1 != 0){
Intmask1_a = judge1;
// judge1 &= 0xF0;
// if (judge1 != 0){
// SetExtRdyTbl(1);
// path_switch_mcba();
// }
}
if (judge2 != 0){
Intmask2_a = judge2;
judge2 &= 0xE0;
if (judge2 != 0){
// SetExtRdyTbl(1);
init_recover[0] = 1;
path_switch_mcba();
}
}
if (judge3 != 0){
// Intmask3_a = judge3;
judge3 &= 0x80;
if (judge3 != 0){
// ina += 1;
SetExtRdyTbl(2);
init_recover[0] = 1;
path_switch_mcba_tu();
}
}
}
if (int_reg & 0x0F){
judge = Ia0_b; //得出MCB的7860B口IA0中断寄存器值
judge1 = Ia1_b;
judge2 = Ia2_b;
judge3 = Ia3_b;
Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
for (temp = 0; temp <= 7; temp++){ //取出63个时隙的AIS寄存器值
ais_reg[1][temp] |= XBYTE[temp + 0x8AA6];
}
if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
intflg_MCBB = 1;
}
if (judge != 0){
Intmask0_b = judge;
judge &= 0xD0; //取出可发生自动倒换的bit位
if (judge != 0){
// SetExtRdyTbl(3);
init_recover[1] = 1;
path_switch_mcbb();
}
}
if (judge1 != 0){
Intmask1_b = judge1;
// judge1 &= 0xF0;
// if (judge1 != 0){
// SetExtRdyTbl(3);
// path_switch_mcbb();
// }
}
if (judge2 != 0){
Intmask2_b = judge2;
judge2 &= 0xE0;
if (judge2 != 0){
// SetExtRdyTbl(3);
init_recover[1] = 1;
path_switch_mcbb();
}
}
if (judge3 != 0){
// Intmask3_b = judge3;
judge3 &= 0x80;
if (judge3 != 0){
// inb += 1;
SetExtRdyTbl(4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -