📄 test.c
字号:
/*------------------------------------------------------------------------------
TEST.C: ISD51 Demo for classic 8051 devices like Philips 89C51RD2/89C66x
Copyright 2002 Keil Software, Inc.
------------------------------------------------------------------------------*/
//#include <REG51F.H>
#include <REG54.H>
#include <intrins.h>
#include <absacc.h>
#include <stdio.h>
#include "ISD51.h"
#include "ep1k50.h"
#include "rc7820.h"
#include "rc7860.h"
#include "f2rc7820.h"
#include "f2rc7860.h"
#include "cmd_para_save.h"
#define Uchar unsigned char
extern void init_7820(void);
extern void init_7860(void);
extern void se0111_reg_wr(unsigned char Haddr,unsigned char Laddr,unsigned char value,unsigned char slot);
extern unsigned char se0111_reg_rd(unsigned char Haddr,unsigned char Laddr,unsigned char slot);
extern void init_se0111(unsigned char slot);
extern void init_1k50(void);
extern void f2_rc7820(void);
extern unsigned char f2rc7820_rd(unsigned char f2addr) large reentrant;
extern void f2rc7820_wr(unsigned char f2addr,unsigned char value) large reentrant;
extern void f2_rc7860(void);
extern unsigned char f2rc7860_rd(unsigned int f2addr) large reentrant;
extern void f2rc7860_wr(unsigned int f2addr,unsigned char value) large reentrant;
extern void reset_f2rc7860(void);
extern Uchar ScanResRdyTbl();
extern void SetResRdyTbl(Uchar prio) large reentrant;
extern void ClearResRdyTbl(Uchar prio);
extern Uchar GetResRdyTbl(Uchar prio) large reentrant;
extern Uchar ScanMcpRdyTbl();
extern void SetMcpRdyTbl(Uchar prio);
extern void ClearMcpRdyTbl(Uchar prio);
extern Uchar GetMcpRdyTbl(Uchar prio);
extern Uchar ScanExtRdyTbl();
extern void SetExtRdyTbl(Uchar prio) large reentrant;
extern void ClearExtRdyTbl(Uchar prio);
extern Uchar GetExtRdyTbl(Uchar prio);
struct cmd_para_save xdata cmd_para_save;
Uchar xdata clock_prior_table[8]; //'c12'配置时钟优先级
extern unsigned char timeslot_setup(struct cmd_para_save *timeslot_set);
extern unsigned char timeslot_del(struct cmd_para_save *timeslot_del);
extern unsigned char get_port_lpstat(struct cmd_para_save *get_portloop);
extern unsigned char set_port_loopback(struct cmd_para_save *set_portloop);
extern unsigned char set_clock_source(struct cmd_para_save *set_clock);
extern unsigned char set_clock_mode(struct cmd_para_save *set_clock);
extern unsigned char set_clock_prio(struct cmd_para_save *set_clock);
extern unsigned char get_clock_working(void);
extern unsigned char get_clock_stat(struct cmd_para_save *get_clock);
extern void get_clk_prio(unsigned char clksource);
extern void clk_switch(void);
extern void check_switch_clk(void);
extern void clk_check_frequence(void);
extern unsigned char get_board_type(struct cmd_para_save *get_board);
extern unsigned char get_board_state(struct cmd_para_save *get_board);
extern unsigned char set_overhead_value(struct cmd_para_save *set_overhead);
extern unsigned char get_overhead_value(struct cmd_para_save *get_overhead);
extern unsigned char get_overheadj_value(struct cmd_para_save *get_overheadj);
extern unsigned char set_overheadj_value(struct cmd_para_save *set_overheadj);
extern unsigned char get_path_switch(struct cmd_para_save *path_switch);
extern unsigned char set_path_switch(struct cmd_para_save *path_switch);
extern unsigned char run_path_switch(struct cmd_para_save *path_switch);
extern unsigned char get_path_state(struct cmd_para_save *path_switch);
extern void path_switch_recover(void);
extern unsigned char check_initializers(void);
extern unsigned char down_file_over(void);
extern unsigned char close_int0(void);
extern void get_performance(void);
extern unsigned char clear_all_performance(void);
extern unsigned char clear_one_perf_15min(struct cmd_para_save *set_performance);
extern unsigned char clear_one_performance(struct cmd_para_save *set_performance);
extern void get_15min_performance(void);
extern unsigned char get_work_performance(struct cmd_para_save *set_performance);
extern unsigned char set_max_performance(struct cmd_para_save *set_performance);
extern void get_alarm_value(void);
extern unsigned char alarm_led(struct cmd_para_save *set_alarm_led);
extern void initializers_board(void);
extern unsigned char initializers_one_board(struct cmd_para_save *init_one_board);
extern void reply_mcp_command(unsigned long codeid,unsigned char returnvalue);
extern void report_port_lpstat(unsigned char lp_state);
extern void report_clock_working(unsigned char clksource);
extern void report_clock_stat(unsigned char clk_state);
extern void report_board_type(unsigned char value);
extern void report_board_state(unsigned char value);
extern void report_overhead_value(unsigned char value,unsigned char overhead_value);
extern void report_overheadj_value(unsigned char value);
extern void report_path_switch_table(unsigned char value,unsigned char bboard,unsigned char bport,unsigned char btime);
extern void report_path_stat(unsigned char value,unsigned char board,unsigned port);
extern void report_15min_performance(void);
extern void report_1sec_performance(void);
extern void report_alarm(void);
extern void report_initializers_2M1(void);
extern void report_initializers_2M2(void);
extern void report_initializers_2M3(void);
extern void report_initializers_OTB(void);
extern void report_loss_2M1(void);
extern void report_loss_2M2(void);
extern void report_loss_2M3(void);
extern void report_loss_OTB(void);
extern void report_auto_path_switch(unsigned char path_port);
extern report_work_performance(unsigned char value);
//extern void write_ais_rate(void);
extern unsigned char set_timeslot_num(struct cmd_para_save *timeslot_num);
extern unsigned char get_timeslot_num(struct cmd_para_save *timeslot_num);
extern void report_EOS_num(unsigned char time_num);
extern unsigned char reset_EOS(struct cmd_para_save *reset_EOS);
extern unsigned char set_EOS_address(struct cmd_para_save *set_EOS_address);
extern unsigned char get_EOS_address(struct cmd_para_save *get_EOS_address);
extern void report_EOS_address(unsigned char value);
extern unsigned char set_search_location(struct cmd_para_save *set_EOS_search);
extern unsigned char get_search_location(struct cmd_para_save *get_EOS_search);
extern void report_search_location(unsigned char value);
extern unsigned char set_EOS_work_state(struct cmd_para_save *set_EOS_work);
extern unsigned char get_EOS_work_state(struct cmd_para_save *get_EOS_work);
extern void report_EOS_work_state(unsigned char value);
extern void read_soft_version(void);
extern void report_soft_version(void);
extern void read_hard_version(void);
extern void report_hard_version(void);
extern unsigned char se0121_reg_rd(unsigned char Laddr,unsigned char slot);
extern void se0121_reg_wr(unsigned char Laddr,unsigned char value,unsigned char slot);
extern void init_se0121(unsigned char slot);
unsigned long int xdata commandid = 0; //表示命令代码的变量
unsigned char xdata result;
extern unsigned char xdata overhead_value;
extern unsigned char xdata marray[189];
extern unsigned char xdata barray[189];
extern unsigned char xdata warray[63];
extern unsigned char xdata bboardid;
extern unsigned char xdata bportid;
extern unsigned char xdata btimeid;
extern unsigned char xdata mboardid;
extern unsigned char xdata mportid;
extern unsigned char xdata clksource_reg;
extern unsigned char xdata clkarray_flg;
extern unsigned char xdata clk_source;
extern unsigned char xdata clk_prio;
extern unsigned char xdata clkmode_reg;
extern unsigned char xdata check_alarm_mcb[5];
extern void path_switch_mcba(void) large reentrant ;
extern void path_switch_mcbb(void) large reentrant ;
extern void path_switch_otba(void) large reentrant ;
extern void path_switch_otbb(void) large reentrant ;
extern void path_switch_mcba_tu(void) large reentrant ;
extern void path_switch_mcbb_tu(void) large reentrant ;
extern void path_switch_otba_tu(void) large reentrant ;
extern void path_switch_otbb_tu(void) large reentrant ;
unsigned char xdata intflg_MCBA = 0; //为性能值而设的MCB的A口中断标志位
unsigned char xdata intflg_MCBB = 0; //为性能值而设的MCB的B口中断标志位
unsigned char xdata intflg_OTBA = 0; //为性能值而设的OTB的A口中断标志位
unsigned char xdata intflg_OTBB = 0; //为性能值而设的OTB的B口中断标志位
extern unsigned char xdata min15_flg; //每秒定时标志位
extern unsigned char xdata start_flg[4];
extern unsigned char xdata start_flg_EOS[4];
extern unsigned char xdata init_recover[4];
extern unsigned char xdata auto_path_port;
extern unsigned char xdata j_tx[15];
extern unsigned char xdata clk_check_flg[2];
extern unsigned char read_register(struct cmd_para_save *read_reg);
extern void report_regiester_value(unsigned char value);
extern unsigned char write_register(struct cmd_para_save *write_reg);
extern void report_variable_value(void);
extern void read_port_reg(unsigned char read_port);
extern void report_read_port(void);
extern void read_ais_reg(void);
extern void report_ais_reg(unsigned char read_port);
unsigned char xdata read_port;
extern unsigned char xdata board_type[4][2]; //定义插盘类型数组,第一位表示槽号,第二位表示盘号
unsigned char int_sum[8] = {0,0,0,0,0,0,0,0};
unsigned char ais_reg[4][8];
unsigned char inter_reg[4][4];
unsigned char los_reg[4] = {0,0,0,0};
unsigned char xdata test_reg[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char xdata init_temp = 0; //初始化完成标志位(即C82命令完成)
#define RX_BUF_SIZE 50
#define RX_BUF_NUM 2
#define TX_BUF_SIZE 140
Uchar xdata rx_buf[RX_BUF_NUM][RX_BUF_SIZE],tx_buf[TX_BUF_SIZE];
Uchar xdata rx_buf_pointer[RX_BUF_NUM]={0,0},tx_buf_pointer=0,rx_buf_num=0;
Uchar xdata save_cmd_enable[RX_BUF_NUM]={0,0},rx_buf_overflow[RX_BUF_NUM]={0,0};
Uchar xdata cmd_head[RX_BUF_NUM]={0,0},cmd_length[RX_BUF_NUM]={0,0};
bit tx_done=0;
void delay(void){
long xdata i;
for(i=0;i<8000;i++);
}
sbit P3_4 = P3^4;
sbit P1_0 = P1^0;
sbit P1_7 = P1^7;
unsigned char xdata time;
unsigned char xdata time1;
unsigned char xdata time2;
unsigned char xdata time3;
/****************************************************************************************/
void service_int0(void) interrupt 0 using 1{
volatile unsigned char int_reg;
volatile unsigned char f2int_reg;
unsigned char i;
volatile unsigned char temp,temp1,temp2;
int_reg = Int_vec; //取出中断矢量寄存器的值
f2int_reg = f2rc7860_rd(F2Int_vec);
Int_mask = 0x80; //设置屏蔽
for (i = 0; i <= 3; i++){ //取出4个光口的中断寄存器值
inter_reg[0][i] = XBYTE[i + 0x88B5];
inter_reg[1][i] = XBYTE[i + 0x8AB5];
if (start_flg[0] == 0){
inter_reg[2][i] = f2rc7860_rd(i + 0x00B5);
inter_reg[3][i] = f2rc7860_rd(i + 0x02B5);
}
}
for (i = 0; i <= 7; i++){ //取出63个时隙的AIS寄存器值
ais_reg[0][i] = XBYTE[i + 0x88A6];
ais_reg[1][i] = XBYTE[i + 0x8AA6];
if (start_flg[0] == 0){
ais_reg[2][i] = f2rc7860_rd(i + 0x00A6);
ais_reg[3][i] = f2rc7860_rd(i + 0x02A6);
}
}
// test_reg[0] += 1; //中断响应次数计数
// temp1 = int_reg & 0x10; //取出A光口中AIS的中断值
// if (int_reg){
// test_reg[1] += 1; //中断向量不为零的计数
// }
// if (temp1){
// test_reg[2] += 1; //中断向量中A光口出现AIS的中断计数
// }
temp = int_reg & 0xF0; //取出A光口中断值
if (temp){ //判断A光口有中断信号
for (i = 0; i <= 7; i++){ //取出63个时隙的AIS寄存器值
ais_reg[0][i] |= XBYTE[i + 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){
init_recover[0] = 1;
path_switch_mcba();
// SetExtRdyTbl(1);
}
}
if (inter_reg[0][3] != 0){
// Intmask3_a = judge3;
inter_reg[0][3] &= 0x80;
if (inter_reg[0][3] != 0){
// test_reg[3] += 1;
init_recover[0] = 1;
path_switch_mcba_tu();
SetExtRdyTbl(2);
}
}
clk_check_flg[0] = 1; //置位时钟频偏标志位
}
// temp1 = int_reg & 0x01;
// if (temp1){
// test_reg[5] += 1;
// }
temp = int_reg & 0x0F;
if (temp){
for (i = 0; i <= 7; i++){ //取出B光口63个时隙的AIS寄存器值
ais_reg[1][i] |= XBYTE[i + 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;
clk_check_flg[0] = 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){
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){
init_recover[1] = 1;
path_switch_mcbb();
// SetExtRdyTbl(3);
}
}
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);
// test_reg[6] += 1;
}
}
clk_check_flg[0] = 1; //置位时钟频偏标志位
}
// Rdint_clr = 0x40; //清除MCB盘的Ia3_a与Ia3_b中断位
if (f2rc7820_rd(F2Int_reg)){
f2rc7820_wr(F2Encrypt_reg,0xAA); //open 7820 write reg
f2rc7820_wr(F2Intmask_reg,0xFF);
}
if (f2int_reg){
if (start_flg[0] == 1){
f2rc7860_wr(F2Reg_protect,0xAA); //open 7860 write reg protect
}
else{
f2rc7860_wr(F2Int_mask,0x80);
if (f2int_reg & 0xF0){ //光分支盘A口中断处理
for (i = 0; i <= 7; i++){ //取出光分支A口63个时隙的AIS寄存器值
ais_reg[2][i] |= f2rc7860_rd(i + 0x00A6);
}
if ((inter_reg[2][0] & 0xDA) | (inter_reg[2][2] & 0xE0) | (inter_reg[2][3] & 0x80)){
intflg_OTBA = 1;
}
if (inter_reg[2][0] != 0){
f2rc7860_wr(F2Intmask0_a,inter_reg[2][0]);
inter_reg[2][0] &= 0xD0; //取出可发生自动倒换的bit位
if (inter_reg[2][0] != 0){
init_recover[2] = 1;
path_switch_otba();
// SetExtRdyTbl(5);
}
}
if (inter_reg[2][1] != 0){
f2rc7860_wr(F2Intmask1_a,inter_reg[2][1]);
// judge1 &= 0xF0;
// if (judge1 != 0){
// SetExtRdyTbl(5);
// path_switch_otba();
// }
}
if (inter_reg[2][2] != 0){
f2rc7860_wr(F2Intmask2_a,inter_reg[2][2]);
inter_reg[2][2] &= 0xE0;
if (inter_reg[2][2] != 0){
init_recover[2] = 1;
path_switch_otba();
// SetExtRdyTbl(5);
}
}
if (inter_reg[2][3] != 0){
// f2rc7860_wr(F2Intmask3_a,inter_reg[2][3]);
inter_reg[2][3] &= 0x80;
if (inter_reg[2][3] != 0){
init_recover[2] = 1;
path_switch_otba_tu();
SetExtRdyTbl(6);
}
}
}
if (f2int_reg & 0x0F){ //光分支盘B口中断处理
for (i = 0; i <= 7; i++){ //取出63个时隙的AIS寄存器值
ais_reg[3][i] |= f2rc7860_rd(i + 0x02A6);
}
if ((inter_reg[3][0] & 0xDA) | (inter_reg[3][2] & 0xE0) | (inter_reg[3][3] & 0x80)){
intflg_OTBB = 1;
}
if (inter_reg[3][0] != 0){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -