⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdb.c

📁 在大型通信系统(机架插板式)中多块单板通过TDM总线
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************/
/*                                                                              */
/*  描述: 复用解复用板(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 + -