📄 board_type.c
字号:
#include <REG54.H>
#include "rc7820.h"
#include "rc7860.h"
#include "f2rc7820.h"
#include "f2rc7860.h"
#include "cmd_para_save.h"
#include "rc7860.h"
#include "ep1k50.h"
extern void init_7820(void);
extern void init_7860(void);
extern void init_se0111(unsigned char slot);
extern void init_se0121(unsigned char slot);
extern unsigned char se0111_reg_rd(unsigned char Haddr,unsigned char Laddr,unsigned char slot);
extern void se0111_reg_wr(unsigned char Haddr,unsigned char Laddr,unsigned char value,unsigned char slot);
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);
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 void SetResRdyTbl(unsigned char prio) large reentrant;
extern unsigned char GetResRdyTbl(unsigned char prio) large reentrant;
extern unsigned char xdata tx_buf[];
extern unsigned char xdata tx_buf_pointer;
extern bit tx_done;
extern unsigned long int xdata commandid;
unsigned char xdata start_flg[4] = {1,1,1,1}; //查询单盘是否初始化标志位
unsigned char xdata start_flg_EOS[4] = {1,1,1,1};
unsigned char xdata board_flg[4] = {0,0,0,0}; //是否调用单盘初始化函数标志位
unsigned char xdata hold_board[4] = {0,0,0,0}; //单盘保持标志,防止单盘抖动用
extern unsigned char xdata lparray2m[3][21];
extern unsigned char xdata lparray_EOS[3];
extern unsigned char xdata EB_2M[3][21];
extern unsigned long int xdata REI_2M[3][21];
extern unsigned long int xdata REI_2M_15min[3][21];
extern unsigned int xdata PJC_2M[3][21];
extern unsigned int xdata PJC_2M_15min[3][21];
extern unsigned int xdata NJC_2M[3][21];
extern unsigned int xdata NJC_2M_15min[3][21];
extern unsigned char xdata lparrayf[4];
extern unsigned int xdata B1[4];
extern unsigned int xdata B2[4];
extern unsigned long int xdata REI_MS[4];
extern unsigned long int xdata REI_MS_15min[4];
extern unsigned int xdata B3[4];
extern unsigned long int xdata REI_HP[4];
extern unsigned long int xdata REI_HP_15min[4];
extern unsigned int xdata OFS[4];
extern unsigned int xdata OFS_15min[4];
extern unsigned int xdata PJC_HP[4];
extern unsigned int xdata PJC_HP_15min[4];
extern unsigned int xdata NJC_HP[4];
extern unsigned int xdata NJC_HP_15min[4];
extern unsigned char xdata timeslot_2M[3][21];
unsigned char xdata board_type[4][2] = {{4,4},{1,0},{2,0},{3,0}}; //定义插盘类型数组,第一位表示槽号,第二位表示盘号
unsigned char get_board_type(struct cmd_para_save *get_board){
//C30读取槽位中的插盘类型
unsigned char xdata boardid;
unsigned char xdata return_value;
boardid = get_board -> board_num;
switch (boardid){
case 1: P1 = 0x20;
return_value = XBYTE[0xA400];
P1 = 0xFF;
if (return_value == 0x51){
return_value = 2; //查到插盘为AMB(2M盘)
}
else if (return_value == 0x57){
return_value = 3;
}
else return_value = 0;
break;
case 2: P1 = 0x60;
return_value = XBYTE[0xA400];
P1 = 0xFF;
if (return_value == 0x51){
return_value = 2; //查到插盘为AMB(2M盘)
}
else if (return_value == 0x57){
return_value = 3;
}
else return_value = 0;
break;
case 3: P1 = 0x40;
return_value = XBYTE[0xA400];
P1 = 0xFF;
if (return_value == 0x51){
return_value = 2; //查到插盘为AMB(2M盘)
}
else if (return_value == 0x57){
return_value = 3;
}
else return_value = 0;
break;
case 4: P1 = 0x10;
return_value = XBYTE[0xB000];
P1 = 0xFF;
if (return_value == 0x55){
return_value = 4; //查到插盘为OTB-1
}
else return_value = 0;
break;
default: return_value = 6;
break;
}
if (!GetResRdyTbl(13))
SetResRdyTbl(13);
return (return_value);
}
void report_board_type(unsigned char value){
//C30回应函数
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x43;
tx_buf[4] = 0x33;
tx_buf[5] = 0x30;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '0';
tx_buf[9] = '2';
if (value == 6){
tx_buf[10] = '2';
}
else tx_buf[10] = '0';
tx_buf[11] = value + 0x30;
tx_buf[12] = '*';
tx_buf_pointer = 0;
while(tx_buf[tx_buf_pointer] != '*'){
SBUF = tx_buf[tx_buf_pointer];
while(tx_done == 0);
tx_done = 0;
tx_buf_pointer++;
}
SBUF = tx_buf[tx_buf_pointer]; //发送最后一个字符'*'
while(tx_done == 0);
tx_done = 0;
}
unsigned char get_board_state(struct cmd_para_save *get_board){
//C31读取槽位中的插盘状态
unsigned char xdata boardid;
unsigned char xdata return_value;
boardid = get_board -> board_num;
switch (boardid){
case 1: P1 = 0x20;
return_value = XBYTE[0xA400];
P1 = 0xFF;
if (return_value == 0x51){
return_value = 1; //查到插盘为AMB(2M盘)
}
else if (return_value == 0x57){
return_value = 1; //查到插盘为EOS
}
else return_value = 2;
break;
case 2: P1 = 0x60;
return_value = XBYTE[0xA400];
P1 = 0xFF;
if (return_value == 0x51){
return_value = 1; //查到插盘为AMB(2M盘)
}
else if (return_value == 0x57){
return_value = 1; //查到插盘为EOS
}
else return_value = 2;
break;
case 3: P1 = 0x40;
return_value = XBYTE[0xA400];
P1 = 0xFF;
if (return_value == 0x51){
return_value = 1; //查到插盘为AMB(2M盘)
}
else if (return_value == 0x57){
return_value = 1; //查到插盘为EOS
}
else return_value = 2;
break;
case 4: P1 = 0x10;
return_value = XBYTE[0xB000];
P1 = 0xFF;
if (return_value == 0xAA){
return_value = 1; //查到插盘为OTB-1
}
else return_value = 2;
break;
default: return_value = 3;
break;
}
if (!GetResRdyTbl(14))
SetResRdyTbl(14);
return (return_value);
}
void report_board_state(unsigned char value){
//C31回应函数
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x43;
tx_buf[4] = 0x33;
tx_buf[5] = 0x31;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '0';
tx_buf[9] = '2';
if (value == 3){
tx_buf[10] = '2';
}
else tx_buf[10] = '0';
tx_buf[11] = value + 0x30;
tx_buf[12] = '*';
tx_buf_pointer = 0;
while(tx_buf[tx_buf_pointer] != '*'){
SBUF = tx_buf[tx_buf_pointer];
while(tx_done == 0);
tx_done = 0;
tx_buf_pointer++;
}
SBUF = tx_buf[tx_buf_pointer]; //发送最后一个字符'*'
while(tx_done == 0);
tx_done = 0;
}
unsigned char initializers_one_board(struct cmd_para_save *init_one_board){
//M01 MCP下发初始化某一单盘命令
unsigned char xdata btemp;
unsigned char xdata boardid;
unsigned char xdata return_value;
commandid = 0x00543931;
boardid = init_one_board -> single_board_reset;
switch (boardid){
case 1: P1 = 0x20;
btemp = XBYTE[0xA400];
P1 = 0xFF;
if (btemp == 0x51){
init_se0111(1);
start_flg[1] = 0;
return_value = 0;
}
else if (btemp == 0x57){
init_se0121(1);
start_flg_EOS[1] = 0;
return_value = 0;
}
else return_value = 2;
break;
case 2: P1 = 0x60;
btemp = XBYTE[0xA400];
P1 = 0xFF;
if (btemp == 0x51){
init_se0111(2);
start_flg[2] = 0;
return_value = 0;
}
else if (btemp == 0x57){
init_se0121(2);
start_flg_EOS[2] = 0;
return_value = 0;
}
else return_value = 2;
break;
case 3: P1 = 0x40;
btemp = XBYTE[0xA400];
P1 = 0xFF;
if (btemp == 0x51){
init_se0111(3);
start_flg[3] = 0;
return_value = 0;
}
else if (btemp == 0x57){
init_se0121(3);
start_flg_EOS[3] = 0;
return_value = 0;
}
else return_value = 2;
break;
case 4: P1 = 0x10;
btemp = XBYTE[0xB000];
P1 = 0xFF;
if (btemp == 0x55){
reset_f2rc7860();
f2_rc7820();
f2rc7820_wr(F2Encrypt_reg,0xAA);
f2rc7820_wr(F2Intmask_reg,0xFF);
f2_rc7860();
f2rc7860_wr(F2Dxc_cntr,0xA0);
start_flg[0] = 0;
return_value = 0;
}
else return_value = 2;
break;
case 5: P1 = 0x50;
XBYTE[0xC400] = 0x01;
XBYTE[0xC400] = 0x00;
P1 = 0;
init_7820();
Encrypt_reg = 0xAA;
Intmask_reg = 0xFF;
S_reg = 0xC1; //set 7820 free run
//init 7860
P1 = 0x30;
XBYTE[0xC400] = 0x01;
XBYTE[0xC400] = 0x00;
P1 = 0;
init_7860();
Reg_protect = 0xAA;
Dxc_cntr = 0xA0;
return_value = 0;
break;
default:return_value = 2;
break;
}
if (!GetResRdyTbl(1))
SetResRdyTbl(1); //置响应事件列表相应位为1
return (return_value); //返回函数执行结果
}
unsigned char check_initializers(void){
//C80MCP查询MCU上电初始化状态
commandid = 0x00433830;
if (!GetResRdyTbl(1))
SetResRdyTbl(1); //置响应事件列表相应位为1
return (0); //返回函数执行结果
}
void initializers_board(void){
//C81初始化某一单盘函数
unsigned char xdata btemp;
unsigned char xdata temp;
unsigned char xdata temp1;
P1 = 0x20;
btemp = XBYTE[0xA400];
P1 = 0xFF;
if ((btemp != 0x51) & (board_type[1][1] == 2)){ //2M盘1不在则置位该盘初始化标志位为1
start_flg[1] = 1;
if (board_flg[1] == 0){ //2M盘1丢失
for (temp = 0; temp <= 20; temp++){
lparray2m[0][temp] = 0; //将2M盘的环回状态复原为无环回
EB_2M[0][temp] = 0; //将2M盘的性能值清0
REI_2M[0][temp] = 0;
REI_2M_15min[0][temp] = 0;
PJC_2M[0][temp] = 0;
PJC_2M_15min[0][temp] = 0;
NJC_2M[0][temp] = 0;
NJC_2M_15min[0][temp] = 0;
timeslot_2M[0][temp] = 0;
}
hold_board[1] = 0;
board_flg[1] = 1;
if (!GetResRdyTbl(6))
SetResRdyTbl(6); //置响应事件列表相应位为1
}
}
else if((btemp != 0x57) & (board_type[1][1] == 3)){
start_flg_EOS[1] = 1;
if (board_flg[1] == 0){ //EOS盘1丢失
lparray_EOS[0] = 0;
hold_board[1] = 0;
board_flg[1] = 1;
if (!GetResRdyTbl(6))
SetResRdyTbl(6); //置响应事件列表相应位为1
}
}
if (btemp == 0x51 & start_flg[1]){
if (hold_board[1] != 0){ //一秒以后盘标志位表示该盘还在原位置
if (hold_board[1] == 1){ //该盘还未初始化,则进行初始化
init_se0111(1);
board_type[1][1] = 2;
hold_board[1] = 2; //表示该盘已经初始化完毕
start_flg[1] = 0; //
board_flg[1] = 0;
if (!GetResRdyTbl(2))
SetResRdyTbl(2); //置响应事件列表相应位为1
}
else hold_board[1] = 2;
}
else hold_board[1] = 1;
}
if (btemp == 0x57 & start_flg_EOS[1]){
if (hold_board[1] != 0){ //一秒以后盘标志位表示该盘还在原位置
if (hold_board[1] == 1){ //该盘还未初始化,则进行初始化
init_se0121(1);
board_type[1][1] = 3;
hold_board[1] = 2; //表示该盘已经初始化完毕
start_flg_EOS[1] = 0;
board_flg[1] = 0;
if (!GetResRdyTbl(2))
SetResRdyTbl(2); //置响应事件列表相应位为1
}
else hold_board[1] = 2;
}
else hold_board[1] = 1;
}
P1 = 0x60;
btemp = XBYTE[0xA400];
P1 = 0xFF;
if ((btemp != 0x51) & (board_type[2][1] == 2)){ //2M盘2不在则置位该盘初始化标志位为1
start_flg[2] = 1;
if (board_flg[2] == 0){
for (temp = 0; temp <= 20; temp++){
lparray2m[1][temp] = 0; //将2M盘的环回状态复原为无环回
EB_2M[1][temp] = 0; //将2M盘的性能值清0
REI_2M[1][temp] = 0;
REI_2M_15min[1][temp] = 0;
PJC_2M[1][temp] = 0;
PJC_2M_15min[1][temp] = 0;
NJC_2M[1][temp] = 0;
NJC_2M_15min[1][temp] = 0;
timeslot_2M[1][temp] = 0;
}
hold_board[2] = 0;
board_flg[2] = 1;
if (!GetResRdyTbl(7))
SetResRdyTbl(7); //置响应事件列表相应位为1
}
}
else if((btemp != 0x57) & (board_type[2][1] == 3)){
start_flg_EOS[2] = 1;
if (board_flg[2] == 0){ //EOS盘1丢失
lparray_EOS[1] = 0;
hold_board[2] = 0;
board_flg[2] = 1;
if (!GetResRdyTbl(7))
SetResRdyTbl(7); //置响应事件列表相应位为1
}
}
if (btemp == 0x51 & start_flg[2]){
if (hold_board[2] != 0){ //一秒以后盘标志位表示该盘还在原位置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -