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

📄 hdlc.lst

📁 在大型通信系统(机架插板式)中多块单板通过TDM总线
💻 LST
📖 第 1 页 / 共 5 页
字号:
 225   1          m_ucASTARStatus = CheckASTAR();
 226   1      
 227   1      
 228   1          /* 初始化B通道,测试时设定外部环回  */
 229   1          *(SAB82525+BCCR1) = 0x25;           /* 设为:待机+总线模式1+TXD开漏输出+空闲发1+时钟模式5    */ 
 230   1          *(SAB82525+BCCR2) = 0x38;           /* 设为:发送时钟由外部输入              */
 231   1          *(SAB82525+BTSAX) = (m_ucTimeSlot<<2)|0x03; /* 设置时隙                     */
 232   1          *(SAB82525+BTSAR) = (m_ucTimeSlot<<2)|0x03; /* 设置时隙                     */
 233   1          *(SAB82525+BXCCR) = 0x07;           /* 设为:每个时隙8位                     */
 234   1          *(SAB82525+BRCCR) = 0x07;           /* 设为:每个时隙8位                     */
 235   1          *(SAB82525+BMASK) = 0x3e;           /* 设为:开RME+RPF+EXB中断           	*/
 236   1          *(SAB82525+BMODE) = 0x88;           /* 设为:透明模式+无地址识别+外部定时    */ 
 237   1          *(SAB82525+BRLCR) = 0x01;           /* 设为:接收数据帧长度检测(62字节)      */
 238   1          *(SAB82525+BXBCH) = 0x00;           /* 设为:全双工LAPB/LAPD                 */
 239   1              
 240   1          *(SAB82525+BCMDR) = 0xc1;           /* 设为:复位HDLC接收器+发送器           */  
 241   1          *(SAB82525+BCCR1) = 0xa5;           /* 设为:启动+                           */
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 5   

 242   1          m_ucBSTARStatus = CheckBSTAR();
 243   1      
 244   1          return;
 245   1      }
 246          
 247          
 248          /********************************************************************************/
 249          /*  函数名称:void CheckRxL3Layer(void)                                          */
 250          /*  简要描述:监测网络层L3接收通讯函数                                           */
 251          /*                                                                              */
 252          /*  时    间:2002年02月21日                                                     */
 253          /********************************************************************************/
 254          void CheckRxL3Layer(void)                   
 255          {     
 256   1          uchar data i;
 257   1          
 258   1          /* 看门狗 */   
 259   1          WATCHDOG = ~WATCHDOG;
 260   1      
 261   1          /* 接收部分L3 */
 262   1          if(m_sL3Que.ucRxPendNum>0)      /* 尚有接收帧需处理 */  
 263   1          {
 264   2              /* 数据包从L3缓冲区移至临时变量中 */
 265   2              L3RxVar = L3RxBuf[m_sL3Que.ucRxDealIndex];
 266   2                          
 267   2              /* 调整接收部分L3指针 */
 268   2              m_sL3Que.ucRxDealIndex++;
 269   2              m_sL3Que.ucRxDealIndex = m_sL3Que.ucRxDealIndex%L3RXBUFNUM;
 270   2              m_sL3Que.ucRxPendNum--;
 271   2      
 272   2              /* 调用处理函数 */
 273   2              HandleCMD();
 274   2          }
 275   1           
 276   1          return;
 277   1      } 
 278          
 279          
 280          /********************************************************************************/
 281          /*  函数名称:uchar SendMSG(void)                                                */
 282          /*  简要描述:网络层发送函数外部接口                                             */
 283          /*                                                                              */
 284          /*  时    间:2002年02月21日                                                     */
 285          /********************************************************************************/
 286          uchar SendMSG(void)
 287          {     
 288   1          uchar data i;
 289   1          
 290   1          /* 看门狗     */
 291   1          WATCHDOG = ~WATCHDOG;
 292   1      
 293   1          /* 发送部分L3 */
 294   1      	if(m_sL2Que.ucLinkState == DL_ESTABLISH)
 295   1      	{
 296   2      	    if(m_sL3Que.ucTxPendNum <= L3TXBUFNUM)       /* 尚有空间      */
 297   2      	    {
 298   3      	        /* 数据包从临时变量移至L3缓冲区中 */
 299   3      	        L3TxBuf[m_sL3Que.ucTxPlaceIndex] = L3TxVar;
 300   3      	                    
 301   3      	        /* 调整接收部分L3指针 */
 302   3      	        m_sL3Que.ucTxPlaceIndex++;
 303   3      	        m_sL3Que.ucTxPlaceIndex = m_sL3Que.ucTxPlaceIndex%L3TXBUFNUM;
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 6   

 304   3      	        m_sL3Que.ucTxPendNum++;
 305   3      	
 306   3      	        m_bL3TxErrorFlag = RIGHT;
 307   3      	    }
 308   2      	    else
 309   2      	    {
 310   3      	        /* 网络层发送队列满,来不及处理,置错误标志   */  
 311   3              	m_bL3TxErrorFlag = WRONG;
 312   3      	        return FALSE;
 313   3      	    }
 314   2      	}
 315   1      
 316   1      	return TRUE;
 317   1      } 
 318          
 319          
 320          /********************************************************************************/
 321          /*  函数名称:void CheckRxL2Layer(void)                                          */
 322          /*  简要描述:监测链路层L2接收通讯函数                                           */
 323          /*                                                                              */
 324          /*  时    间:2002年02月21日                                                     */
 325          /********************************************************************************/
 326          void CheckRxL2Layer(void)                   
 327          {     
 328   1          uchar data i;
 329   1          
 330   1          /* 看门狗 */   
 331   1          WATCHDOG = ~WATCHDOG;
 332   1      
 333   1          /* 接收部分L2及L2-->L3 */
 334   1          if(m_sL2Que.ucRxPendNum>0)      /* 尚有接收帧需处理 */  
 335   1          {
 336   2              /* 判断帧类型 */
 337   2              switch (L2RxBuf[m_sL2Que.ucRxDealIndex].ucCRID)
 338   2              {
 339   3                  case    SABME_CONTROL:      
 340   3      
 341   3                          /* 链路层发送队列未满   */  
 342   3                          if(m_sL2Que.ucTxPendNum <= L2TXBUFNUM)
 343   3                          {
 344   4                              /* 发送UA帧 */
 345   4                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength  = 4;
 346   4                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[0] = 0;                                   
             -                                                                  
 347   4                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[1] = 0;                                   
             -                                                                  
 348   4                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucCRID    = UA_CONTROL;                          
             -                                                                              
 349   4                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv2    = 0;                                   
             -                                                                  
 350   4                  
 351   4                              /* 调整L2发送指针 */
 352   4                              m_sL2Que.ucTxPlaceIndex++;
 353   4                              m_sL2Que.ucTxPlaceIndex = m_sL2Que.ucTxPlaceIndex%L2TXBUFNUM;
 354   4                              m_sL2Que.ucTxPendNum++;
 355   4                          }
 356   3                          else
 357   3                          {
 358   4                              /* 链路层发送队列满,来不及处理,置错误标志   */  
 359   4                              m_bL2TxErrorFlag = WRONG;
 360   4                          }
 361   3                                              
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 7   

 362   3                          /* 标识链路状态 */
 363   3                          m_sL2Que.ucLinkState = DL_ESTABLISH;
 364   3      
 365   3                          m_sL2Que.ucTxIFrameStatus = IDLE;   /* 可以发送I帧了 */
 366   3                          m_sL2Que.ucRSendFlag = FALSE;       
 367   3                          m_sL2Que.ucT201Control = OFF;
 368   3      
 369   3                          break;
 370   3      
 371   3                  case    IFRAME_CONTROL:     
 372   3      
 373   3                          if(m_sL2Que.ucLinkState == DL_ESTABLISH)    /* 链路建立时才将数据从L2-->l3  */
 374   3                          {
 375   4                              /* 数据包从L2缓冲区移至L3缓冲区 */
 376   4                              L3RxBuf[m_sL3Que.ucRxPlaceIndex].ucPID    = L2RxBuf[m_sL2Que.ucRxDealIndex].ucData
             -[0];
 377   4                              L3RxBuf[m_sL3Que.ucRxPlaceIndex].ucLength = L2RxBuf[m_sL2Que.ucRxDealIndex].ucData
             -[1];
 378   4                              L3RxBuf[m_sL3Que.ucRxPlaceIndex].uiType   = L2RxBuf[m_sL2Que.ucRxDealIndex].ucData
             -[2];
 379   4                              L3RxBuf[m_sL3Que.ucRxPlaceIndex].uiType   = (L3RxBuf[m_sL3Que.ucRxPlaceIndex].uiTy
             -pe<<8)|
 380   4                                                                          L2RxBuf[m_sL2Que.ucRxDealIndex].ucData
             -[3];
 381   4                          
 382   4                              for(i=0;i<L3RxBuf[m_sL3Que.ucRxPlaceIndex].ucLength-4;i++)   
 383   4                              {
 384   5                                  L3RxBuf[m_sL3Que.ucRxPlaceIndex].ucData[i] = L2RxBuf[m_sL2Que.ucRxDealIndex].u
             -cData[4+i];
 385   5                              }
 386   4                                  
 387   4                              /* 剩余部分填充0 */
 388   4                              for(i=L3RxBuf[m_sL3Que.ucRxPlaceIndex].ucLength-4;i<BUFSIZE-8;i++)   
 389   4                              {
 390   5                                  L3RxBuf[m_sL2Que.ucRxPlaceIndex].ucData[i] = 0;
 391   5                              }
 392   4                              
 393   4                              /* 调整接收部分L3<-->L2指针 */
 394   4                              m_sL3Que.ucRxPlaceIndex++;
 395   4                              m_sL3Que.ucRxPlaceIndex = m_sL3Que.ucRxPlaceIndex%L3RXBUFNUM;
 396   4                              m_sL3Que.ucRxPendNum++;
 397   4         
 398   4                              /* 链路层发送队列未满   */  
 399   4                              if(m_sL2Que.ucTxPendNum <= L2TXBUFNUM)
 400   4                              {
 401   5                                  /* 发送RR帧 */
 402   5                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength  = 4;
 403   5                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[0] = 0;                               
             -                                                                      
 404   5                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[1] = 0;                               
             -                                                                      
 405   5                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucCRID    = RR_CONTROL;                      
             -                                                                                  
 406   5                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv2    = 0;                               
             -                                                                      
 407   5                      
 408   5                                  /* 调整L2发送指针 */
 409   5                                  m_sL2Que.ucTxPlaceIndex++;
 410   5                                  m_sL2Que.ucTxPlaceIndex = m_sL2Que.ucTxPlaceIndex%L2TXBUFNUM;
 411   5                                  m_sL2Que.ucTxPendNum++;
 412   5                              }
 413   4                              else
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 8   

 414   4                              {
 415   5                                  /* 链路层发送队列满 */  
 416   5                                  m_bL2TxErrorFlag = WRONG;
 417   5                              }
 418   4                          }
 419   3                              
 420   3                          break;
 421   3      
 422   3                  case    UA_CONTROL:     
 423   3      
 424   3                          /* 标识链路状态 */
 425   3                          m_sL2Que.ucLinkState = DL_ESTABLISH;
 426   3      
 427   3                          /* 停止SABME重发 */
 428   3                          m_sL2Que.ucTxIFrameStatus = IDLE;   /* 可以发送I帧了 */
 429   3                          m_sL2Que.ucRSendFlag = FALSE;       
 430   3                          m_sL2Que.ucT201Control = OFF;
 431   3      
 432   3                          break;
 433   3      
 434   3                  case    RR_CONTROL:     
 435   3      
 436   3                          /* 停止I帧重发 */
 437   3                          m_sL2Que.ucRSendFlag = FALSE;       
 438   3                          m_sL2Que.ucT201Control = OFF;
 439   3      
 440   3                          break;
 441   3      

⌨️ 快捷键说明

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