📄 mdb.c
字号:
/********************************************************************************/
/* */
/* 描述: 复用解复用板(V2.0)控制器程序 */
/* VER: 2.0 */
/* REV: 0.0 */
/* 作者: 胡丙龙 */
/* 时间: 2002年02月21日 */
/* 说明: 本软件版本针对VER2.0的硬件 */
/* */
/* */
/* */
/* */
/********************************************************************************/
#pragma debug code small optimize(5) objectextend
#include "reg52.h"
#include "mdb.h"
#include "hpi.h"
#include "hdlc.h"
#include "constant.h"
#include "sab82525.h"
/* 外部函数 */
extern void TestSRAM(void); /* 测试内存 */
extern void TestHPI(void); /* 测试HPI */
extern void TestSAB82525(void); /* 测试SAB82525读写 */
extern void InitSAB82525(void); /* 初始化HDLC函数 */
extern void InitHDLC(void); /* 初始化HDLC缓冲区 */
extern void CheckRxL3Layer(void); /* 监测第三层接收情况函数 */
extern void CheckTxL2Layer(void); /* 监测第二层发送情况函数 */
extern void CheckRxL2Layer(void); /* 监测第二层接收情况函数 */
extern void CheckTxL1Layer(void); /* 监测物理层发送情况函数 */
extern void CheckRxL1Layer(void); /* 监测物理层接收情况函数 */
extern uchar SendMSG(void); /* 发送消息L3,外部接口 */
extern void InitHPI(void); /* 初始化HPI缓冲区及变量 */
extern void CheckTxHPI(void); /* 监测各DSP接收命令情况 */
extern void CheckRxHPI(void); /* 监测各DSP上报消息情况 */
extern void CheckDSP(void); /* 监测各DSP运行状况 */
extern void GetSWVer(void); /* 获取CPU、DSP软件版本信息并上报 */
/* 函数声明 */
void HandleCMD(void); /* 处理收到的命令L3,外部接口 */
void InitMT8985(void); /* 配置MT8985 */
void SetTimeSlot(uchar,uchar,uchar,uchar); /* 配置MT8985交换时隙 */
/* 变量定义 */
uchar xdata *SRAM = 0x0; /* 定义外部数据RAM芯片译码地址 */
uchar xdata *SAB82525 = 0x2000; /* 定义SAB82525芯片译码地址 */
uchar xdata *MT8985 = 0x4000; /* 定义MT8985芯片译码地址 */
uchar xdata *HPI1 = 0x6000; /* 定义HPI-DSP1接口译码地址 */
uchar xdata *HPI2 = 0x8000; /* 定义HPI-DSP2接口译码地址 */
uchar xdata *HPI3 = 0xa000; /* 定义HPI-DSP3接口译码地址 */
uchar xdata *HPI4 = 0xc000; /* 定义HPI-DSP4接口译码地址 */
uchar xdata *RESET = 0xe000; /* 定义C549复位操作地址 */
uchar data m_ucTimeSlot; /* 时隙号 */
uchar data m_ucTimer0Count; /* 10ms定时计数器 */
uchar data m_ucVar1; /* 通用变量1 */
uchar data m_ucVar2; /* 通用变量2 */
uchar bdata m_ucCommonFlag;
sbit m_bSendMsgFlag = m_ucCommonFlag^0; /* 需要发送消息标志 */
uchar bdata m_ucIntrFlag;
sbit m_bTimer0Flag = m_ucIntrFlag^0; /* 定义定时器0计时到标志 */
sbit m_bTimer1Flag = m_ucIntrFlag^1; /* 定义计数器1计数满标志 */
sbit m_bXint0Flag = m_ucIntrFlag^2; /* 定义外部中断0标志 */
sbit m_bXint1Flag = m_ucIntrFlag^3; /* 定义外部中断1标志 */
/* 外部变量 */
extern bit m_bSRAMTestFlag; /* 定义RAM测试结果标志 */
extern bit m_bSAB82525TestFlag; /* 定义SAB825255测试结果标志 */
extern bit m_bHPITestFlag; /* 定义HPI测试结果标志 */
extern bit m_bL1RxCRCFlag; /* 定义物理层L1接收队列CRC错误标志 */
extern bit m_bL1RxErrorFlag; /* 定义物理层L1接收队列溢出标志,收到后来不及处理 */
extern bit m_bL2TxErrorFlag; /* 定义链路层L2发送队列溢出标志,U/I/S帧来不及发送 */
extern bit m_bL3TxErrorFlag; /* 定义网络层L3发送队列溢出标志,I帧来不及发送 */
extern bit m_bL1TxErrorFlag; /* 定义物理层L1发送错误标志,不能发送 */
extern L3Pack xdata L3TxVar; /* 网络层发送暂存变量,用户接口 */
extern L3Pack xdata L3RxVar; /* 网络层接收暂存变量,用户接口 */
/********************************************************************************/
/* 函数名称:void main(void) */
/* 简要描述:主程序 */
/* */
/* 时 间:2002年02月21日 */
/********************************************************************************/
void main(void)
{
uchar data i;
uchar data temp;
/* 中断控制 */
EA = 0;
ET0 = 1;
ET1 = 0;
EX0 = 1;
EX1 = 1;
ES = 0;
/* 定时器设置 */
TMOD=0x01; /* 定时器0为定时模式1 */
TH0=0xd8; /* 设定定时器0初值,定时10ms */
TL0=0xf0;
/* 指示灯预置 */
ALARM_LED = OFF;
COMM_LED = OFF;
RUN_LED = OFF;
/* 确定时隙 */
if( BADD2==0 )
{
if( BADD1==0 )
{
m_ucTimeSlot = SLOT7;
}
else
{
m_ucTimeSlot = SLOT8;
}
}
else
{
m_ucTimeSlot = SLOT9;
}
/* 清DSP复位 */
*(RESET+0) = 0x1; /* b0写入1 */
*(RESET+1) = 0x1; /* b0写入1 */
*(RESET+2) = 0x1; /* b0写入1 */
*(RESET+3) = 0x1; /* b0写入1 */
/* 测试 */
TestSRAM();
TestSAB82525();
TestHPI();
/* 定时器0计数清零 */
m_ucTimer0Count = 0;
/* 有消息需要发送标志清零 */
m_bSendMsgFlag = FALSE;
/* 初始化HPI缓冲区及变量 */
InitHPI();
/* 初始化HDLC缓冲区及变量 */
InitHDLC();
/* 初始化HDLC芯片 */
InitSAB82525();
/* 初始化交换网芯片 */
InitMT8985();
/* 开中断 */
EA=1;
/* 启动定时器T0 */
TR0 = 1;
/* 主循环 */
for(;;)
{
/* 指示灯控制 */
if(m_ucTimer0Count > 50)
{
RUN_LED = OFF;
if(m_ucTimer0Count > 100)
{
WATCHDOG = ~WATCHDOG;
m_ucTimer0Count = 0;
/* DSP运行状况监测 */
temp = REVISION&0x01;
if(temp == 0x1)
{
CheckDSP();
}
}
}
else
{
RUN_LED = ON;
}
/* 故障指示 */
if( (m_bSRAMTestFlag == WRONG) ||
(m_bHPITestFlag == WRONG) ||
(m_bSAB82525TestFlag == WRONG) ||
(m_bL1RxErrorFlag == WRONG) ||
(m_bL1RxCRCFlag == WRONG) ||
(m_bL3TxErrorFlag == WRONG) )
{
ALARM_LED = ON;
}
else
{
ALARM_LED = OFF;
}
/* HPI上报消息监测 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -