📄 init_se0111.c.bak
字号:
#include <reg54.h>
#include <stdio.h>
#include <math.h>
#include "se0111.h"
extern void delay();
extern unsigned char xdata lparray2m[3][21];
extern unsigned char xdata start_flg[4];
extern unsigned char xdata board_type[4][2]; //定义插盘类型数组,第一位表示槽号,第二位表示盘号
void se0111_reg_wr(unsigned char Haddr,unsigned char Laddr,unsigned char value,unsigned char slot){
switch(slot){
case 3 :
P1 = 0x40; break;
case 1 :
P1 = 0x20; break;
case 2 :
P1 = 0x60; break;
}
ADDRH = Haddr | 0x80;
ADDRL = Laddr;
SE0111_reg = value;
ADDRH = 0xFF;
ADDRL = 0xFF;
P1 = 0;
}
unsigned char se0111_reg_rd(unsigned char Haddr,unsigned char Laddr,unsigned char slot){
unsigned char xdata value;
switch(slot){
case 3 :
P1 = 0x40; break;
case 1 :
P1 = 0x20; break;
case 2 :
P1 = 0x60; break;
}
ADDRH = Haddr | 0x80;
ADDRL = Laddr;
value = SE0111_reg;
ADDRH = 0xFF;
ADDRL = 0xFF;
P1 = 0;
return(value);
}
/*
void leakrate_calculate(unsigned char slot){
unsigned char xdata leakrate,n,padj,pointer;
signed char xdata s[10],sum,sub,abs_sum;
switch(slot){
case 3 :
P1 = 0x40; break;
case 1 :
P1 = 0x20; break;
case 2 :
P1 = 0x60; break;
}
if ((se0111_reg_rd(Stat_Arx_12H,Stat_Arx_12L,slot)&0xD0) != 0)
se0111_reg_wr(LeakRate_12H,LeakRate_12L,0x04,slot);
padj = se0111_reg_rd(Pj_Arx_count_12H,Pj_Arx_count_12L,slot);
sub = ((padj >> 4) & 0x0F) - (padj & 0x0F);
s[pointer] = sub;
sum = 0;
for (n=0;n<10;n++)
sum = sum + s[n];
abs_sum = fabs(sum);
if (abs_sum == 0)
leakrate = 255;
else
leakrate = 280/abs_sum;
if (leakrate <= 1)
leakrate = 1;
else if (leakrate >= 255)
leakrate = 255;
se0111_reg_wr(LeakRate_12H,LeakRate_12L,leakrate,slot);
if (pointer == 9)
pointer = 0;
else
pointer++;
}
*/
void reset_se0111(unsigned char slot){
switch(slot){
case 3 :
P1 = 0x40; break;
case 1 :
P1 = 0x20; break;
case 2 :
P1 = 0x60; break;
}
ADDRH = 0;
delay();
ADDRH = 0x80; //reset se0111
P1 = 0;
}
/*
void AIS_one_bitrate(unsigned char addrh1,unsigned char addrl1,unsigned char addrh2,unsigned char addrl2,unsigned char slot){
//写某一条2M支路的AIS速率函数,除了支路1
unsigned char test;
//unsigned char test1;
test = se0111_reg_rd(addrh1,addrl1,slot); //由于该寄存器能锁存数据,所以读两遍得出当前状态
test = se0111_reg_rd(addrh1,addrl1,slot);
// test1 = se0111_reg_rd(addrh2,addrl2,slot) & 0xF0;
if (((test & 0xC0) != 0) & lparray2m[slot - 1][0] == 0){ //2M支路产生AIS并且该支路无环回
// test1 |= 0x04;
se0111_reg_wr(addrh2,addrl2,0x44,slot);
}
else{
// test1 |= 0x06;
se0111_reg_wr(addrh2,addrl2,0x46,slot);
}
}
void AIS_one_bitrate1(unsigned char addrh1,unsigned char addrl1,unsigned char addrh2,unsigned char addrl2,unsigned char slot){
//专用写2M支路1的AIS速率函数
unsigned char test;
//unsigned char test1;
test = se0111_reg_rd(addrh1,addrl1,slot); //由于该寄存器能锁存数据,所以读两遍得出当前状态
test = se0111_reg_rd(addrh1,addrl1,slot);
// test1 = se0111_reg_rd(addrh2,addrl2,slot) & 0xF0;
if (((test & 0xC0) != 0) & lparray2m[slot - 1][0] == 0){ //2M支路产生AIS并且该支路无环回
// test1 |= 0x04;
se0111_reg_wr(addrh2,addrl2,0x84,slot);
}
else{
// test1 |= 0x06;
se0111_reg_wr(addrh2,addrl2,0x86,slot);
}
}
void AIS_bitrate(unsigned char slot){
//改写2M盘的AIS速率函数
AIS_one_bitrate1(Stat_Arx_0H,Stat_Arx_0L,Ctrl_tx2_0H,Ctrl_tx2_0L,slot); //支路1
//由于Se0111芯片的第一支路使用A路上下行会出现误码,所以第一支路的使用与其他支路不同
AIS_one_bitrate(Stat_Arx_1H,Stat_Arx_1L,Ctrl_tx2_1H,Ctrl_tx2_1L,slot);
AIS_one_bitrate(Stat_Arx_2H,Stat_Arx_2L,Ctrl_tx2_2H,Ctrl_tx2_2L,slot);
AIS_one_bitrate(Stat_Arx_3H,Stat_Arx_3L,Ctrl_tx2_3H,Ctrl_tx2_3L,slot);
AIS_one_bitrate(Stat_Arx_4H,Stat_Arx_4L,Ctrl_tx2_4H,Ctrl_tx2_4L,slot);
AIS_one_bitrate(Stat_Arx_5H,Stat_Arx_5L,Ctrl_tx2_5H,Ctrl_tx2_5L,slot);
AIS_one_bitrate(Stat_Arx_6H,Stat_Arx_6L,Ctrl_tx2_6H,Ctrl_tx2_6L,slot);
AIS_one_bitrate(Stat_Arx_7H,Stat_Arx_7L,Ctrl_tx2_7H,Ctrl_tx2_7L,slot);
AIS_one_bitrate(Stat_Arx_8H,Stat_Arx_8L,Ctrl_tx2_8H,Ctrl_tx2_8L,slot);
AIS_one_bitrate(Stat_Arx_9H,Stat_Arx_9L,Ctrl_tx2_9H,Ctrl_tx2_9L,slot);
AIS_one_bitrate(Stat_Arx_10H,Stat_Arx_10L,Ctrl_tx2_10H,Ctrl_tx2_10L,slot);
AIS_one_bitrate(Stat_Arx_11H,Stat_Arx_11L,Ctrl_tx2_11H,Ctrl_tx2_11L,slot);
AIS_one_bitrate(Stat_Arx_12H,Stat_Arx_12L,Ctrl_tx2_12H,Ctrl_tx2_12L,slot);
AIS_one_bitrate(Stat_Arx_13H,Stat_Arx_13L,Ctrl_tx2_13H,Ctrl_tx2_13L,slot);
AIS_one_bitrate(Stat_Arx_14H,Stat_Arx_14L,Ctrl_tx2_14H,Ctrl_tx2_14L,slot);
AIS_one_bitrate(Stat_Arx_15H,Stat_Arx_15L,Ctrl_tx2_15H,Ctrl_tx2_15L,slot);
AIS_one_bitrate(Stat_Arx_16H,Stat_Arx_16L,Ctrl_tx2_16H,Ctrl_tx2_16L,slot);
AIS_one_bitrate(Stat_Arx_17H,Stat_Arx_17L,Ctrl_tx2_17H,Ctrl_tx2_17L,slot);
AIS_one_bitrate(Stat_Arx_18H,Stat_Arx_18L,Ctrl_tx2_18H,Ctrl_tx2_18L,slot);
AIS_one_bitrate(Stat_Arx_19H,Stat_Arx_19L,Ctrl_tx2_19H,Ctrl_tx2_19L,slot);
AIS_one_bitrate(Stat_Arx_20H,Stat_Arx_20L,Ctrl_tx2_20H,Ctrl_tx2_20L,slot);
}
void write_ais_rate(void){
if (start_flg[1] == 0){
AIS_bitrate(1);
}
if (start_flg[2] == 0){
AIS_bitrate(2);
}
if (start_flg[3] == 0){
AIS_bitrate(3);
}
}
*/
void init_se0111(unsigned char slot){
unsigned char xdata i;
unsigned char xdata j;
reset_se0111(slot);
se0111_reg_wr(TEST_H,TEST_L,0x00,slot);
se0111_reg_wr(Genctrl_reg1_H,Genctrl_reg1_L,0x40,slot);
se0111_reg_wr(Genctrl_reg2_H,Genctrl_reg2_L,0x20,slot);
se0111_reg_wr(Genctrl_reg3_H,Genctrl_reg3_L,0x00,slot);
se0111_reg_wr(SE0111_RESET_H,SE0111_RESET_L,0x00,slot);
//对21路进行循环赋初始值
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4; j++)
{
se0111_reg_wr(Ctrl_tx1_0H + (i * 8),Ctrl_tx1_0L + (j * 0x30),0x24,slot);
se0111_reg_wr(LeakRate_0H + (i * 8),LeakRate_0L + (j * 0x30),0x04,slot);
se0111_reg_wr(Ctrl_tx2_0H + (i * 8),Ctrl_tx2_0L + (j * 0x30),0x46,slot);
se0111_reg_wr(Ctrl_tx3_0H + (i * 8),Ctrl_tx3_0L + (j * 0x30),0xA0,slot);
// se0111_reg_wr(Tu12sele_rx_0H + (i * 8),Tu12sele_rx_0L + (j * 0x30),0x01,slot);
// se0111_reg_wr(Tu12sele_tx_0H + (i * 8),Tu12sele_tx_0L + (j * 0x30),0x01,slot);
se0111_reg_wr(Ctrl_tx4_0H + (i * 8),Ctrl_tx4_0L + (j * 0x30),0x00,slot);
se0111_reg_wr(Ctrl_tx5_0H + (i * 8),Ctrl_tx5_0L + (j * 0x30),0x00,slot);
se0111_reg_wr(Ctrl_tx6_0H + (i * 8),Ctrl_tx6_0L + (j * 0x30),0x00,slot);
se0111_reg_wr(V5_tx_0H + (i * 8),V5_tx_0L + (j * 0x30),0x02,slot);
se0111_reg_wr(K4_tx_0H + (i * 8),K4_tx_0L + (j * 0x30),0x00,slot);
se0111_reg_wr(Obit_tx_0H + (i * 8),Obit_tx_0L + (j * 0x30),0x00,slot);
se0111_reg_wr(V4_tx_0H + (i * 8),V4_tx_0L + (j * 0x30),0x00,slot);
se0111_reg_wr(LeakRate_0H + (i * 8),LeakRate_0L + (j * 0x30),0x10,slot);
}
}
//init No.20 timeslot 第21路不便于循环,单另初始化
se0111_reg_wr(Ctrl_tx1_20H,Ctrl_tx1_20L,0x24,slot);
se0111_reg_wr(LeakRate_20H,LeakRate_20L,0x04,slot);
se0111_reg_wr(Ctrl_tx2_20H,Ctrl_tx2_20L,0x46,slot);
se0111_reg_wr(Ctrl_tx3_20H,Ctrl_tx3_20L,0xA0,slot);
// se0111_reg_wr(Tu12sele_rx_20H,Tu12sele_rx_20L,0x15,slot);
// se0111_reg_wr(Tu12sele_tx_20H,Tu12sele_tx_20L,0x15,slot);
se0111_reg_wr(Ctrl_tx4_20H,Ctrl_tx4_20L,0x00,slot);
se0111_reg_wr(Ctrl_tx5_20H,Ctrl_tx5_20L,0x00,slot);
se0111_reg_wr(Ctrl_tx6_20H,Ctrl_tx6_20L,0x00,slot);
se0111_reg_wr(V5_tx_20H,V5_tx_20L,0x02,slot);
se0111_reg_wr(K4_tx_20H,K4_tx_20L,0x00,slot);
se0111_reg_wr(Obit_tx_20H,Obit_tx_20L,0x00,slot);
se0111_reg_wr(V4_tx_20H,V4_tx_20L,0x00,slot);
se0111_reg_wr(LeakRate_20H,LeakRate_20L,0x10,slot);
/******************************************************************
//init No.0 timeslot
se0111_reg_wr(Ctrl_tx1_0H,Ctrl_tx1_0L,0x14,slot);
se0111_reg_wr(LeakRate_0H,LeakRate_0L,0x04,slot);
se0111_reg_wr(Ctrl_tx2_0H,Ctrl_tx2_0L,0x86,slot);
se0111_reg_wr(Ctrl_tx3_0H,Ctrl_tx3_0L,0xA0,slot);
// se0111_reg_wr(Tu12sele_rx_0H,Tu12sele_rx_0L,0x01,slot);
// se0111_reg_wr(Tu12sele_tx_0H,Tu12sele_tx_0L,0x01,slot);
se0111_reg_wr(Ctrl_tx4_0H,Ctrl_tx4_0L,0x00,slot);
se0111_reg_wr(Ctrl_tx5_0H,Ctrl_tx5_0L,0x00,slot);
se0111_reg_wr(Ctrl_tx6_0H,Ctrl_tx6_0L,0x00,slot);
se0111_reg_wr(V5_tx_0H,V5_tx_0L,0x02,slot);
se0111_reg_wr(K4_tx_0H,K4_tx_0L,0x00,slot);
se0111_reg_wr(Obit_tx_0H,Obit_tx_0L,0x00,slot);
se0111_reg_wr(V4_tx_0H,V4_tx_0L,0x00,slot);
se0111_reg_wr(LeakRate_0H,LeakRate_0L,0x10,slot);
// for(i=0x0540;i<=0x057F;i++)
// se0111_reg_wr(i,0x00,slot);
//init No.1 timeslot
se0111_reg_wr(Ctrl_tx1_1H,Ctrl_tx1_1L,0x24,slot);
se0111_reg_wr(LeakRate_1H,LeakRate_1L,0x04,slot);
se0111_reg_wr(Ctrl_tx2_1H,Ctrl_tx2_1L,0x46,slot);
se0111_reg_wr(Ctrl_tx3_1H,Ctrl_tx3_1L,0xA0,slot);
// se0111_reg_wr(Tu12sele_rx_1H,Tu12sele_rx_1L,0x02,slot);
// se0111_reg_wr(Tu12sele_tx_1H,Tu12sele_tx_1L,0x02,slot);
se0111_reg_wr(Ctrl_tx4_1H,Ctrl_tx4_1L,0x00,slot);
se0111_reg_wr(Ctrl_tx5_1H,Ctrl_tx5_1L,0x00,slot);
se0111_reg_wr(Ctrl_tx6_1H,Ctrl_tx6_1L,0x00,slot);
se0111_reg_wr(V5_tx_1H,V5_tx_1L,0x02,slot);
se0111_reg_wr(K4_tx_1H,K4_tx_1L,0x00,slot);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -