?? sysswitch.c
字號:
#include "mpc860p.h"
#include "DS2154.h"
#include "MT908x0.h"
#include "ExtDeclare.h"
#include "config.h"
#include "arch/ppc/ivPpc.h"
void vSendMphToL1(unsigned short Signal,unsigned char PhLinkNo)
{;}
void DS2154Int(UINT8 irq_no)
{
UINT32 base;
UINT8 link, i, chipno;
UINT16 Signal;
UINT8 temp;
link = 0xff;
Signal = 0xff;
for(i=0 ; i<4 ; i++)/**??????????**/
{
chipno = (irq_no - 1) * 4 + i;
base = DS2154_ADRS(chipno);
/* 內部故障*/
/* 內部故障恢復*/
/* 信號丟失或幀定位丟失*/
*DS2154_SR1(base) = 0xf3; /* LOS */
temp = *DS2154_SR1(base);
*DS2154_SR1(base) = (temp&0xf3);
if((temp&0xf3) != 0x00)
{
Signal = Loss_signal_or_loss_frame_align;
link = chipno;
break;
}
/* RAI */
*DS2154_SR1(base) = 0x04;
temp = *DS2154_SR1(base);
*DS2154_SR1(base) = (temp&0x04);
if((temp&0x04) == 0x04)
{
Signal = RAI;
link = chipno;
break;
}
/* AIS */
*DS2154_SR1(base) = 0x08;
temp = *DS2154_SR1(base);
*DS2154_SR1(base) = (temp&0x08);
if((temp&0x08) == 0x08)
{
Signal = AIS;
link = chipno;
break;
}
/* 正常幀Sa7 = 1/0 */
*DS2154_SR2(base) = 0x02;
temp = *DS2154_SR2(base);
*DS2154_SR2(base) = (temp&0x02);
if((temp&0x02) ==0x02)
{
if(*DS2154_RSa7(base) == 0x00)
{
Signal = Normal_frames_Sa7_ZERO;
link = chipno;
*DS2154_RSa7(base) = 0xaa;
break;
}
else if(*DS2154_RSa7(base) == 0xff)
{
Signal = Normal_frames_Sa7_ONE;
link = chipno;
*DS2154_RSa7(base) = 0xaa;
break;
}
}
}
if((link!=0xff)&&(Signal!=0xff))
vSendMphToL1(Signal, link);
}
void DS2154_RegClear(void)
{
UINT32 base;
UINT8 temp;
int i, j;
for(i=0 ; i<4 ; i++)
{
base = DS2154_ADRS(i);
*DS2154_SR1(base) = 0xff;
temp = *DS2154_SR1(base);
*DS2154_SR1(base) = 0xff;
*DS2154_SR2(base) = 0xff;
temp = *DS2154_SR2(base);
*DS2154_SR2(base) = 0xff;
*DS2154_RIR(base) = 0xff;
temp = *DS2154_RIR(base);
*DS2154_RIR(base) = 0xff;
*DS2154_RCR1(base) = 0x00;
*DS2154_RCR2(base) = 0x00;
*DS2154_TCR1(base) = 0x00;
*DS2154_TCR2(base) = 0x00;
*DS2154_CCR1(base) = 0x00;
*DS2154_TEST1(base) = 0x00;
*DS2154_IMR1(base) = 0x00;
*DS2154_IMR2(base) = 0x00;
*DS2154_LICR(base) = 0x00;
*DS2154_TEST2(base) = 0x00;
*DS2154_CCR2(base) = 0x00;
*DS2154_CCR3(base) = 0x00;
*DS2154_TSaCR(base) = 0x00;
*DS2154_TAF(base) = 0x00;
*DS2154_TNAF(base) = 0x00;
*DS2154_TCBR1(base) = 0x00;
*DS2154_TCBR2(base) = 0x00;
*DS2154_TCBR3(base) = 0x00;
*DS2154_TCBR4(base) = 0x00;
*DS2154_TIR1(base) = 0x00;
*DS2154_TIR2(base) = 0x00;
*DS2154_TIR3(base) = 0x00;
*DS2154_TIR4(base) = 0x00;
*DS2154_TIDR(base) = 0x00;
*DS2154_RCBR1(base) = 0x00;
*DS2154_RCBR2(base) = 0x00;
*DS2154_RCBR3(base) = 0x00;
*DS2154_RCBR4(base) = 0x00;
for( j= 0 ; j<=16 ; j++ )
{
*DS2154_TS(j,base) = 0x00;
}
*DS2154_TSiAF(base) = 0x00;
*DS2154_TSiNAF(base) = 0x00;
*DS2154_TRA(base) = 0x00;
*DS2154_TSa4(base) = 0x00;
*DS2154_TSa5(base) = 0x00;
*DS2154_TSa6(base) = 0x00;
*DS2154_TSa7(base) = 0x00;
*DS2154_TSa8(base) = 0x00;
for( j=1 ; j<=32 ; j++ )
{
*DS2154_TC(j,base) = 0x00;
*DS2154_RC(j,base) = 0x00;
}
*DS2154_TCC1(base) = 0x00;
*DS2154_TCC2(base) = 0x00;
*DS2154_TCC3(base) = 0x00;
*DS2154_TCC4(base) = 0x00;
*DS2154_RCC1(base) = 0x00;
*DS2154_RCC2(base) = 0x00;
*DS2154_RCC3(base) = 0x00;
*DS2154_RCC4(base) = 0x00;
*DS2154_CCR4(base) = 0x00;
*DS2154_CCR5(base) = 0x00;
*DS2154_TEST3(base) = 0x00;
/* *DS2154_TEST4(base) = 0x00;*//* FOR 21554 */
}
}
void DS2154_Init(void)
{
UINT32 base;
int i;
UINT8 temp;
DS2154_RegClear();
for(i=0 ; i<4 ; i++)
{
base = DS2154_ADRS(i);
*DS2154_TAF(base) = 0x1b;
*DS2154_TNAF(base) = 0x5f;
*DS2154_TSa7(base) = 0x00;
*DS2154_TRA(base) = 0x00;
*DS2154_TSaCR(base) = 0x22;
if(i==0){
*DS2154_IMR1(base) = 0x1;/* SR1的所有變化均產生中斷 */
*DS2154_IMR2(base) = 0x0;/* SR2在接收CRC4復幀時產生中斷 */
}
else{
*DS2154_IMR1(base) = 0x0;/* SR1的所有變化均產生中斷 */
*DS2154_IMR2(base) = 0x0;/* SR2在接收CRC4復幀時產生中斷 */
}
/* 公共控制寄存器1 */
*DS2154_CCR1(base) = 0x4c;/*0x5d;*/
/* COMMON CONTROL REGISTER 2 */
*DS2154_CCR2(base) = 0x10; /*0x54;0xd0;*/
/* COMMON CONTROL REGISTER 3 */
*DS2154_CCR3(base) = 0x82;
myTimer(1);
*DS2154_CCR3(base) = 0x92;
myTimer(1);
*DS2154_CCR3(base) = 0x82;
/* COMMON CONTROL REGISTER 4 */
*DS2154_CCR4(base) = 0x00;/*0x80*/
/* 接收控制寄存器1 */
*DS2154_RCR1(base) = 0x20;/*0xc4;*/
myTimer(1);
*DS2154_RCR1(base) = 0x21;/*new*/
/* 接收控制寄存器2 */
*DS2154_RCR2(base) = 0x06;/*0x46;*/
/* 發送控制寄存器 */
*DS2154_TCR1(base) = 0x08;
/* 發送控制寄存器 */
*DS2154_TCR2(base) = 0x02;
/* LINE INTERFACE CONTROL REGISTER */
*DS2154_LICR(base) = 0x80;
/* COMMON CONTROL REGISTER 5 */
*DS2154_CCR5(base) = 0x00;/*0x82*/
myTimer(1);
*DS2154_CCR5(base) = 0x80;/*n*/
myTimer(2);
*DS2154_SR1(base) = 0xff;
temp = *DS2154_SR1(base);
*DS2154_SR1(base) = (0xff&temp);
*DS2154_SR2(base) = 0xff;
temp = *DS2154_SR2(base);
*DS2154_SR2(base) = (0xff&temp);
*DS2154_RIR(base) = 0xff;
temp = *DS2154_RIR(base);
*DS2154_RIR(base) = (0xff&temp);
}
*SIMASK(vxImmrGet()) |= 0x20000000;
intConnect(IV_IRQ1, (VOIDFUNCPTR)DS2154Int, 1);
/* intConnect(IV_IRQ2, (VOIDFUNCPTR)DS2154Int, 2);
intConnect(IV_IRQ3, (VOIDFUNCPTR)DS2154Int, 3);
intConnect(IV_IRQ4, (VOIDFUNCPTR)DS2154Int, 4);*/
}
void vSendL1Signal(UINT16 Signal, UINT8 PhLinkNo)
{
UINT32 base;
base = DS2154_ADRS(PhLinkNo);
switch (Signal)
{
/* 正常幀Sa7 = 1 */
case Normal_frames_Sa7_ONE:
*DS2154_TSa7(base) = 0xff;
break;
/* 正常幀Sa7 = 0 */
case Normal_frames_Sa7_ZERO:
*DS2154_TSa7(base) = 0x00;
break;
/* RAI */
case RAI:
*DS2154_TRA(base) = 0xff;
break;
/* AIS */
case AIS:
break;
default: break;
}
}
void MT90840_Init(void)
{
UINT32 base;
base = MT90840_ADRS;
*MT90840_IMSR(base) = 0x78;/* 00 MT90840 工作模式設置 */
*MT90840_TIMR(base) = 0x00;/* 02 時間方式選擇 */
*MT90840_ALSR(base) = 0xb0;/* 04 告警狀態設置 */
*MT90840_GPMR(base) = 0x04;/* 03 S/P 端口極性 */
/* TPCM High 初始化*/
*MT90840_CR(base) = 0xe0; /* 01 */
*MT90840_GPMR(base) |= 0x05;
myTimer(1);
if((*MT90840_GPMR(base))&0x01 == 0x01)*MT90840_GPMR(base) &= 0xfe;
/* RPCM High 初始化*/
*MT90840_CR(base) = 0x60;
*MT90840_GPMR(base) |= 0x25;
myTimer(1);
if((*MT90840_GPMR(base))&0x01 == 0x01)*MT90840_GPMR(base) &= 0xfe;
}
void vConnectSlot(UINT8 ConnectType, UINT8 LELinkNo, UINT8 LESlotNo,
UINT8 USERLinkNo, UINT8 USERSlotNo)
{
UINT8 STioNo, STioSlot;
UINT16 STioChannel, PDioChannel;
UINT32 base;
base = MT90840_ADRS;
/* 選擇串行流1-8 */
STioNo = LELinkNo / 2;
/* LE時隙對應的串行流上的物理時隙 */
STioSlot = LESlotNo * (LELinkNo % 2 + 1);
/* 計算RPCM地址 */
STioChannel = (UINT16)STioNo * 64 + (UINT16)STioSlot;
/* 計算TPCM地址 */
PDioChannel = (UINT16)USERLinkNo + (UINT16)USERSlotNo * 64;
switch (ConnectType)
{
case CONNECT_LE_TO_USER:
*MT90840_CR(base) = (UINT8) ((PDioChannel & 0xff80)>>7)
| CR_SEL2 | CR_SEL0 & (~(CR_SEL1|CR_HA11));
*TPCMH(PDioChannel) = (UINT8)((STioChannel & 0xff00)>>8)
| TPCM_OE_CTo0 & (~(TPCM_PPBY|TPCM_MC|TPCM_CTO|TPCM_AB9));
*MT90840_CR(base) = (UINT8)((PDioChannel & 0xff80)>>7)
| CR_SEL2 & (~(CR_SEL1|CR_SEL0|CR_HA11));
*TPCML(PDioChannel) = (UINT8) (STioChannel & 0xff);
break;
case CONNECT_USER_TO_LE:
*MT90840_CR(base) = (UINT8)((STioChannel & 0xff80)>>7)
| CR_SEL0 & (~(CR_SEL2|CR_SEL1|CR_HA11));
*RPCMH(STioChannel) = (UINT8)((PDioChannel & 0xff00)>>8)
| RPCM_OE | RPCM_DC & (~RPCM_MC);
*MT90840_CR(base) = (UINT8)((PDioChannel & 0xff80)>>7)
& (~(CR_SEL2|CR_SEL1|CR_SEL0|CR_HA11|CR_HA10|CR_HA9));
*RPCML(STioChannel) = (UINT8) (PDioChannel & 0xff);
break;
case CONNECT_BOTH_DIR:
*MT90840_CR(base) = (UINT8)((PDioChannel & 0xff80)>>7)
| CR_SEL2 | CR_SEL0 & (~(CR_SEL1|CR_HA11));
*TPCMH(PDioChannel) = (UINT8)((STioChannel & 0xff00)>>8)
| TPCM_OE_CTo0 & (~(TPCM_PPBY|TPCM_MC|TPCM_CTO|TPCM_AB9));
*MT90840_CR(base) = (UINT8) ((PDioChannel & 0xff80)>>7)
| CR_SEL2 & (~(CR_SEL1|CR_SEL0|CR_HA11));
*TPCML(PDioChannel) = (UINT8) (STioChannel & 0xff);
*MT90840_CR(base) = (UINT8)((STioChannel & 0xff80)>>7)
| CR_SEL0 & (~(CR_SEL2|CR_SEL1|CR_HA11));
*RPCMH(STioChannel) = (UINT8)((PDioChannel & 0xff00)>>8)
| RPCM_OE | RPCM_DC & (~RPCM_MC);
*MT90840_CR(base) = (UINT8) ((PDioChannel & 0xff80)>>7)
& (~(CR_SEL2|CR_SEL1|CR_SEL0|CR_HA11|CR_HA10|CR_HA9));
*RPCML(STioChannel) = (UINT8) (PDioChannel & 0xff);
break;
default: break;
}
}
void vDisConnectSlot(UINT8 DisConnectType, UINT8 LELinkNo, UINT8 LESlotNo,
UINT8 USERLinkNo, UINT8 USERSlotNo)
{
UINT8 STioNo, STioSlot;
UINT16 STioChannel, PDioChannel;
UINT32 base;
base = MT90840_ADRS;
STioNo = LELinkNo / 2;
STioSlot = LESlotNo * (LELinkNo % 2 + 1);
STioChannel = (UINT16)STioNo * 64 + (UINT16)STioSlot;
PDioChannel = (UINT16)USERLinkNo + (UINT16)USERSlotNo * 64;
switch (DisConnectType)
{
case DISCONNECT_LE_TO_USER:
*MT90840_CR(base) = (UINT8)((PDioChannel & 0xff80)>>7)
| CR_SEL2 | CR_SEL0 & (~(CR_SEL1|CR_HA11));
*TPCMH(PDioChannel) &= ~(TPCM_OE_CTo0);
/*(UINT8 (STioChannel & 0xff00)>>8)
& (~(TPCM_OE_CTo0|TPCM_PPBY|TPCM_MC|TPCM_CTO|TPCM_AB9));
*MT98840_CR(base) = (UINT8 (PDioChannel & 0xff80)>>7)
| CR_SEL2 & (~(CR_SEL1|CR_SEL0|CR_HA11));
*TPCML(PDioChannel) = UINT8 (STioChannel & 0xff);*/
break;
case DISCONNECT_USER_TO_LE:
*MT90840_CR(base) = (UINT8)((STioChannel & 0xff80)>>7)
| CR_SEL0 & (~(CR_SEL2|CR_SEL1|CR_HA11));
*RPCMH(STioChannel) &= ~(RPCM_OE);
/*(UINT8 (PDioChannel & 0xff00)>>8)
| RPCM_DC & (~(RPCM_OE|RPCM_MC));
*MT90840_CR(base) = (UINT8 (PDioChannel & 0xff80)>>7)
& (~(CR_SEL2|CR_SEL1|CR_SEL0|CR_HA11|CR_HA10|CR_HA9));
*RPCML(STioChannel) = UINT8 (PDioChannel & 0xff);*/
break;
case DISCONNECT_BOTH_DIR:
*MT90840_CR(base) = (UINT8)((PDioChannel & 0xff80)>>7)
| CR_SEL2 | CR_SEL0 & (~(CR_SEL1|CR_HA11));
*TPCMH(PDioChannel) &= ~(TPCM_OE_CTo0);
/*(UINT8 (STioChannel & 0xff00)>>8)
& (~(TPCM_OE_CTo0|TPCM_PPBY|TPCM_MC|TPCM_CTO|TPCM_AB9));
*MT98840_CR(base) = (UINT8 (PDioChannel & 0xff80)>>7)
| CR_SEL2 & (~(CR_SEL1|CR_SEL0|CR_HA11));
*TPCML(PDioChannel) = UINT8 (STioChannel & 0xff);*/
*MT90840_CR(base) = (UINT8)((STioChannel & 0xff80)>>7)
| CR_SEL0 & (~(CR_SEL2|CR_SEL1|CR_HA11));
*RPCMH(STioChannel) &= ~(RPCM_OE);
/*(UINT8 (PDioChannel & 0xff00)>>8)
| RPCM_DC & (~(RPCM_OE|RPCM_MC));
*MT90840_CR(base) = (UINT8 (PDioChannel & 0xff80)>>7)
& (~(CR_SEL2|CR_SEL1|CR_SEL0|CR_HA11|CR_HA10|CR_HA9));
*RPCML(STioChannel) = UINT8 (PDioChannel & 0xff);*/
break;
default: break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -