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

📄 hdlc.lst

📁 在大型通信系统(机架插板式)中多块单板通过TDM总线
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE HDLC
OBJECT MODULE PLACED IN HDLC.OBJ
COMPILER INVOKED BY: E:\C51\BIN\C51.EXE HDLC.C

stmt level    source

   1          /********************************************************************************/
   2          /*                                                                              */
   3          /*  描述: 复用解复用板(V2.0)控制器程序                                          */
   4          /*  VER:  2.0                                                                   */
   5          /*  REV:  1.0                                                                   */
   6          /*  作者: 胡丙龙                                                                */
   7          /*  时间: 2002年02月21日                                                        */
   8          /*                                                                              */
   9          /********************************************************************************/
  10          #pragma  debug code small optimize(5) objectextend 
  11          
  12          #include "reg52.h"
  13          #include "mdb.h"
  14          #include "hpi.h"
  15          #include "hdlc.h"
  16          #include "constant.h"
  17          #include "sab82525.h"
  18          
  19          
  20          /* 结构变量定义 */
  21          L1Queue idata m_sL1Que;
  22          L2Queue idata m_sL2Que;
  23          L3Queue idata m_sL3Que;
  24          
  25          /* 缓冲区定义   */
  26          L1Pack xdata L1RxBuf[L1RXBUFNUM];       /* 定义全局变量,物理层接收缓冲区       */
  27          L1Pack xdata L1TxBuf[L1TXBUFNUM];       /* 定义全局变量,物理层发送缓冲区       */
  28          L2Pack xdata L2RxBuf[L2RXBUFNUM];       /* 定义全局变量,链路层接收缓冲区       */
  29          L2Pack xdata L2TxBuf[L2TXBUFNUM];       /* 定义全局变量,链路层发送缓冲区       */
  30          L3Pack xdata L3RxBuf[L3RXBUFNUM];       /* 定义全局变量,网络层接收缓冲区       */
  31          L3Pack xdata L3TxBuf[L3TXBUFNUM];       /* 定义全局变量,网络层发送缓冲区       */
  32          
  33          L3Pack xdata L3TxVar;                   /* 网络层发送暂存变量,用户接口          */
  34          L3Pack xdata L3RxVar;                   /* 网络层接收暂存变量,用户接口          */
  35          
  36          /* 辅助变量定义 */
  37          uchar data m_ucARSTAStatus;
  38          uchar data m_ucBRSTAStatus;
  39          uchar data m_ucASTARStatus;
  40          uchar data m_ucBSTARStatus;
  41          uchar data m_ucAISTAStatus;
  42          uchar data m_ucBISTAStatus;
  43          uchar data m_ucAEXIRStatus;
  44          uchar data m_ucBEXIRStatus;
  45          uchar data m_ucATxFrameLen;
  46          uchar data m_ucBTxFrameLen;
  47          uchar data m_ucARBCL;
  48          uchar data m_ucBRBCL;
  49          
  50          uchar bdata m_ucHDLCErrorFlag;      
  51          sbit m_bL1RxErrorFlag = m_ucHDLCErrorFlag^0;    /* 定义物理层L1接收队列溢出标志,收到后来不及处理    */
  52          sbit m_bL2TxErrorFlag = m_ucHDLCErrorFlag^1;    /* 定义链路层L2发送队列溢出标志,U/I/S帧来不及发送   */
  53          sbit m_bL3TxErrorFlag = m_ucHDLCErrorFlag^2;    /* 定义网络层L3发送队列溢出标志,I帧来不及发送       */
  54          sbit m_bL1RxCRCFlag   = m_ucHDLCErrorFlag^3;    /* 定义物理层L1接收CRC校验错标志                    */
  55          sbit m_bARxFrameFlag  = m_ucHDLCErrorFlag^4;    /* 定义A通道接收到HDLC消息标志                      */
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 2   

  56          sbit m_bBRxFrameFlag  = m_ucHDLCErrorFlag^5;    /* 定义B通道接收到HDLC消息标志                      */
  57          sbit m_bL1TxErrorFlag = m_ucHDLCErrorFlag^6;    /* 定义物理层L1发送错误标志     */
  58          
  59          /* 外部变量 */
  60          extern uchar xdata *SAB82525;           /* 定义SAB82525芯片译码地址             */
  61          
  62          extern uchar data m_ucTimeSlot;         /* 时隙号                               */
  63          extern uchar data m_ucTimer0Count;      /* 10ms定时计数器                       */
  64          
  65          extern bit m_bTimer0Flag;
  66          extern bit m_bTimer1Flag;
  67          extern bit m_bXint0Flag;
  68          extern bit m_bXint1Flag;
  69          
  70          /* 函数声明 */
  71          void  InitSAB82525(void);               /* 初始化HDLC函数                       */
  72          void  InitHDLC(void);                   /* 初始化HDLC缓冲区                     */
  73          void  CheckRxL3Layer(void);             /* 监测第三层接收情况函数               */    
  74          void  CheckTxL2Layer(void);             /* 监测第二层发送情况函数               */                   
  75          void  CheckRxL2Layer(void);             /* 监测第二层接收情况函数               */    
  76          void  CheckTxL1Layer(void);             /* 监测物理层发送情况函数               */                   
  77          void  CheckRxL1Layer(void);             /* 监测物理层接收情况函数               */    
  78          void  SendFrameB(void);                 /* A通道发送HDLC消息函数                */
  79          uchar CheckASTAR(void);                 /* 检查ASTAR状态函数                    */
  80          uchar CheckBSTAR(void);                 /* 检查BSTAR状态函数                    */
  81          uchar SendMSG(void);                    /* 发送消息L3,外部接口                  */
  82          
  83          /* 外部函数 */
  84          extern void  HandleCMD(void);           /* 处理收到的命令L3,外部接口            */
  85          
  86          /********************************************************************************/
  87          /*  函数名称:void InitHDLC(void)                                                */
  88          /*  简要描述:初始化HDLC缓冲区及参数                                             */
  89          /*                                                                              */
  90          /*  时    间:2002年02月25日                                                     */
  91          /********************************************************************************/
  92          void InitHDLC(void)                  
  93          {     
  94   1          uchar data i,j;
  95   1      
  96   1          WATCHDOG = ~WATCHDOG;               /* 看门狗   */
  97   1      
  98   1          /* 初始化缓冲区 */
  99   1          for(i=0;i<L3RXBUFNUM;i++)           /* 网络层L3 */
 100   1          {
 101   2              L3RxBuf[i].ucPID = 0;       
 102   2              L3RxBuf[i].ucLength = 0;        
 103   2              L3RxBuf[i].uiType = 0;      
 104   2              for(j=0;j<BUFSIZE-8;j++)
 105   2              {
 106   3                  L3RxBuf[i].ucData[j] = 0;
 107   3              }
 108   2          }
 109   1          for(i=0;i<L3TXBUFNUM;i++)
 110   1          {
 111   2              L3TxBuf[i].ucPID = 0;       
 112   2              L3TxBuf[i].ucLength = 0;        
 113   2              L3TxBuf[i].uiType = 0;      
 114   2              for(j=0;j<BUFSIZE-8;j++)
 115   2              {
 116   3                  L3TxBuf[i].ucData[j] = 0;
 117   3              }
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 3   

 118   2          }
 119   1          for(i=0;i<L2RXBUFNUM;i++)           /* 链路层L2 */
 120   1          {
 121   2              L2RxBuf[i].ucLength = 0;        
 122   2              L2RxBuf[i].ucRsv1[0] = 0;       
 123   2              L2RxBuf[i].ucRsv1[1] = 0;       
 124   2              L2RxBuf[i].ucCRID = 0;      
 125   2              L2RxBuf[i].ucRsv2 = 0;      
 126   2              for(j=0;j<BUFSIZE-4;j++)
 127   2              {
 128   3                  L2RxBuf[i].ucData[j] = 0;
 129   3              }
 130   2          }
 131   1          for(i=0;i<L2TXBUFNUM;i++)           
 132   1          {
 133   2              L2TxBuf[i].ucLength = 0;        
 134   2              L2TxBuf[i].ucRsv1[0] = 0;       
 135   2              L2TxBuf[i].ucRsv1[1] = 0;       
 136   2              L2TxBuf[i].ucCRID = 0;      
 137   2              L2TxBuf[i].ucRsv2 = 0;      
 138   2              for(j=0;j<BUFSIZE-4;j++)
 139   2              {
 140   3                  L2TxBuf[i].ucData[j] = 0;
 141   3              }
 142   2          }
 143   1          for(i=0;i<L1RXBUFNUM;i++)           /* 物理层L1 */
 144   1          {
 145   2              L1RxBuf[i].ucLength = 0;        
 146   2              for(j=0;j<BUFSIZE-8;j++)
 147   2              {
 148   3                  L1RxBuf[i].ucData[j] = 0;
 149   3              }
 150   2          }
 151   1          for(i=0;i<L1TXBUFNUM;i++)           
 152   1          {
 153   2              L1TxBuf[i].ucLength = 0;        
 154   2              for(j=0;j<BUFSIZE-8;j++)
 155   2              {
 156   3                  L1TxBuf[i].ucData[j] = 0;
 157   3              }
 158   2          }
 159   1      
 160   1          
 161   1          /* 初始化变量   */
 162   1          m_sL1Que.ucTxPendNum = 0;               /* 物理层 */
 163   1          m_sL1Que.ucRxPendNum = 0;
 164   1          m_sL1Que.ucTxDealIndex = 0;
 165   1          m_sL1Que.ucTxPlaceIndex = 0;
 166   1          m_sL1Que.ucRxDealIndex = 0;
 167   1          m_sL1Que.ucRxPlaceIndex = 0;
 168   1      
 169   1          m_sL2Que.ucLinkState = DL_RELEASE;      /* 链路层 */
 170   1          m_sL2Que.ucTxIFrameStatus = IDLE;       
 171   1          m_sL2Que.ucT201Control = OFF;
 172   1          m_sL2Que.ucT201 = 0;
 173   1          m_sL2Que.ucN200 = 0;
 174   1          m_sL2Que.ucRSendFlag = FALSE;
 175   1          m_sL2Que.ucTxPendNum = 0;
 176   1          m_sL2Que.ucRxPendNum = 0;
 177   1          m_sL2Que.ucTxDealIndex = 0;
 178   1          m_sL2Que.ucTxPlaceIndex = 0;
 179   1          m_sL2Que.ucRxDealIndex = 0;
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 4   

 180   1          m_sL2Que.ucRxPlaceIndex = 0;
 181   1      
 182   1          m_sL3Que.ucTxPendNum = 0;               /* 网络层 */
 183   1          m_sL3Que.ucRxPendNum = 0;
 184   1          m_sL3Que.ucTxDealIndex = 0;
 185   1          m_sL3Que.ucTxPlaceIndex = 0;
 186   1          m_sL3Que.ucRxDealIndex = 0;
 187   1          m_sL3Que.ucRxPlaceIndex = 0;
 188   1      
 189   1          m_bL1RxErrorFlag = RIGHT;
 190   1          m_bL2TxErrorFlag = RIGHT;
 191   1          m_bL3TxErrorFlag = RIGHT;
 192   1          m_bL1RxCRCFlag   = RIGHT;
 193   1          m_bL1TxErrorFlag = RIGHT;
 194   1          m_bARxFrameFlag  = FALSE;
 195   1          m_bBRxFrameFlag  = FALSE;
 196   1          
 197   1          return;
 198   1      }
 199          
 200          
 201          /********************************************************************************/
 202          /*  函数名称:void InitSAB82525(void)                                            */
 203          /*  简要描述:初始化SAB82525函数                                                 */
 204          /*                                                                              */
 205          /*  时    间:2002年02月21日                                                     */
 206          /********************************************************************************/
 207          void InitSAB82525(void)                  
 208          {     
 209   1          WATCHDOG = ~WATCHDOG;
 210   1          
 211   1          /* 初始化A通道,测试时用内部环回  */
 212   1          *(SAB82525+ACCR1) = 0x25;           /* 设为:待机+总线模式1+TXD开漏输出+空闲发1+时钟模式5    */ 
 213   1          *(SAB82525+ACCR2) = 0x38;           /* 设为:发送时钟由外部输入              */
 214   1          *(SAB82525+ATSAX) = (m_ucTimeSlot<<2)|0x03;  /* 设置时隙                    */
 215   1          *(SAB82525+ATSAR) = (m_ucTimeSlot<<2)|0x03;  /* 设置时隙                    */
 216   1          *(SAB82525+AXCCR) = 0x07;           /* 设为:每个时隙8位                     */
 217   1          *(SAB82525+ARCCR) = 0x07;           /* 设为:每个时隙8位                     */
 218   1          *(SAB82525+AMASK) = 0x3f;           /* 设为:开RME+RPF中断                   */
 219   1          *(SAB82525+AMODE) = 0x88;           /* 设为:透明模式+无地址识别+外部定时    */ 
 220   1          *(SAB82525+ARLCR) = 0x01;           /* 设为:接收数据帧长度检测(62字节)      */
 221   1          *(SAB82525+AXBCH) = 0x00;           /* 设为:全双工LAPB/LAPD                 */
 222   1              
 223   1          *(SAB82525+ACMDR) = 0xc1;           /* 设为:复位HDLC接收器+发送器           */  
 224   1          *(SAB82525+ACCR1) = 0xa5;           /* 设为:启动+                           */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -