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

📄 hpi.lst

📁 在大型通信系统(机架插板式)中多块单板通过TDM总线
💻 LST
📖 第 1 页 / 共 5 页
字号:
 265   1          /* 初始化变量   */
 266   1          m_sHPIQue.ucTxPendNum = 0;      /* HPI接口 */
 267   1          m_sHPIQue.ucRxPendNum = 0;
 268   1          m_sHPIQue.ucTxDealIndex = 0;
 269   1          m_sHPIQue.ucTxPlaceIndex = 0;
 270   1          m_sHPIQue.ucRxDealIndex = 0;
 271   1          m_sHPIQue.ucRxPlaceIndex = 0;
 272   1      
 273   1          m_ucHPIWatchdogTC = 0;
 274   1          m_bHPIWatchdogFlag = TRUE;
 275   1      
 276   1          return;
 277   1      }
 278          
 279          
 280          /********************************************************************************/
 281          /*  函数名称:void TestHPI(void)                                                 */
 282          /*  简要描述:/* 测试HPI口读写状况                                               */
 283          /*                                                                              */
 284          /*  时    间:2002年02月21日                                                     */
 285          /********************************************************************************/
 286          void TestHPI(void)                  
 287          {     
 288   1          uchar data i,j,k,a;
 289   1          
 290   1          a = 0;
 291   1          
 292   1          for(i=0; i<4; i++)
 293   1          {
 294   2              WATCHDOG = ~WATCHDOG;
 295   2              
 296   2              /* 基地址确定   */
 297   2              if(i == 0)
 298   2              {
 299   3                  m_pHPI = HPI1;
 300   3              }
 301   2              else if(i == 1)
 302   2              {
 303   3                  m_pHPI = HPI2;
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 6   

 304   3              }
 305   2              else if(i == 2)
 306   2              {
 307   3                  m_pHPI = HPI3;
 308   3              }
 309   2              else if(i == 3)
 310   2              {
 311   3                  m_pHPI = HPI4;
 312   3              }
 313   2                  
 314   2              /* 设置HPI写区间和长度  */
 315   2              m_uiHPIAREA = HPITEST;
 316   2              m_ucHPILEN = BUFSIZE;
 317   2              
 318   2              for(j=0;j<BUFSIZE;j++)
 319   2              {
 320   3                  HPITxVar[j] = j+0x70;
 321   3                  HPIRxVar[j] = 0;
 322   3              }
 323   2      
 324   2              /* 写数据               */
 325   2              SendFrameHPI();
 326   2      
 327   2              /* 延时 */
 328   2              for(j=0;j<0xf0;j++)
 329   2                      for(k=0;k<0xf0;k++);
 330   2                      
 331   2      
 332   2              /* 读数据  */
 333   2              m_uiHPIAREA = HPITEST+1;
 334   2              ReadFrameHPI();
 335   2                  
 336   2              /* 比较 */
 337   2              for(j=0;j<BUFSIZE;j++)
 338   2              {
 339   3                  if( HPIRxVar[j]!=(j+0x70) )
 340   3                  {
 341   4                      a = 1;
 342   4                  }
 343   3              }
 344   2      
 345   2              /* 根据结果置标志 */
 346   2              if(a==1)
 347   2              {
 348   3                  m_bHPITestFlag = WRONG;
 349   3              }
 350   2              else
 351   2              {
 352   3                  m_bHPITestFlag = RIGHT;
 353   3              }
 354   2          }
 355   1      
 356   1          return;
 357   1      }       
 358          
 359          
 360          /********************************************************************************/
 361          /*  函数名称:void CheckDSP(void)                                                */
 362          /*  简要描述:查询DSP是否死机                                                    */
 363          /*                                                                              */
 364          /*  时    间:2000年11月04日                                                     */
 365          /********************************************************************************/
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 7   

 366          void CheckDSP(void)                  
 367          {     
 368   1          uchar data i;
 369   1      
 370   1          /* 依次检查4片DSP运行状态 */
 371   1      
 372   1          for(i=0; i<4; i++)
 373   1          {
 374   2              WATCHDOG = ~WATCHDOG;
 375   2          
 376   2              /* 基地址确定   */
 377   2              if(i == 0)
 378   2              {
 379   3                  m_pHPI = HPI1;
 380   3              }
 381   2              else if(i == 1)
 382   2              {
 383   3                  m_pHPI = HPI2;
 384   3              }
 385   2              else if(i == 2)
 386   2              {
 387   3                  m_pHPI = HPI3;
 388   3              }
 389   2              else if(i == 3)
 390   2              {
 391   3                  m_pHPI = HPI4;
 392   3              }
 393   2              
 394   2      
 395   2              /* 设置HPI读写区间和长度 */
 396   2              m_uiHPIAREA = DSPSTATUS;
 397   2              m_ucHPILEN = 1;
 398   2              
 399   2              /* 读DSPSTATUS状态字   */
 400   2              ReadFrameHPI();
 401   2      
 402   2              /* 判断DSP是否死机       */  
 403   2              if(HPIRxVar[0] != 0x55)
 404   2              {
 405   3                  m_bHPIWatchdogFlag = FALSE;
 406   3                  /* 复位 */
 407   3                  *(RESET+i) = 0x0; /* b0写入0 */     
 408   3              }
 409   2      
 410   2              /* 设置HPI读写区间和长度 */
 411   2              HPITxVar[0] = 0;
 412   2              m_uiHPIAREA = DSPSTATUS;
 413   2              m_ucHPILEN = 1;
 414   2      
 415   2              /* 复位DSPSTATUS状态字   */
 416   2              SendFrameHPI();
 417   2          }
 418   1          
 419   1          if(m_bHPIWatchdogFlag == FALSE)
 420   1          {           
 421   2              m_ucHPIWatchdogTC++;
 422   2      
 423   2              if(m_ucHPIWatchdogTC>2)
 424   2              {
 425   3                  m_ucHPIWatchdogTC = 0;
 426   3                  m_bHPIWatchdogFlag = TRUE;
 427   3                  
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 8   

 428   3                  /* 清复位   */
 429   3                  *(RESET+0) = 0x01; /* b0写入1 */     
 430   3                  *(RESET+1) = 0x01; /* b0写入1 */     
 431   3                  *(RESET+2) = 0x01; /* b0写入1 */     
 432   3                  *(RESET+3) = 0x01; /* b0写入1 */     
 433   3              }
 434   2          }
 435   1          else
 436   1          {
 437   2              m_ucHPIWatchdogTC = 0;
 438   2          }
 439   1      
 440   1          return;     
 441   1      }
 442          
 443          
 444          /********************************************************************************/
 445          /*  函数名称:void SendFrameHPI(void)                                            */
 446          /*  简要描述:通过HPI向各DSP转发命令                                             */
 447          /*                                                                              */
 448          /*  时    间:2002年02月21日                                                     */
 449          /********************************************************************************/
 450          void SendFrameHPI(void)                 
 451          {     
 452   1          uchar data i;
 453   1      
 454   1          /* 关中断 */
 455   1          EX1 = 0;
 456   1          
 457   1          *(m_pHPI+WRITE+HPIC+BYTE1) = 0x00;      /* 写HPIC第1字节为0,BOB=0   */
 458   1          *(m_pHPI+WRITE+HPIC+BYTE2) = 0x00;      /* 写HPIC第2字节为0,BOB=0   */
 459   1          *(m_pHPI+WRITE+HPIA+BYTE1) = (m_uiHPIAREA>>8)&0xff;  /* 写HPIA第1字节为写区首地址*/  /* 高字节   */
 460   1          *(m_pHPI+WRITE+HPIA+BYTE2) = m_uiHPIAREA&0xff;;         /* 写HPIA第2字节为写区首地址*/  /* 低字节   */
 461   1              
 462   1          /* 写有效字节   */
 463   1          for(i=0; i<=m_ucHPILEN; i++)
 464   1          {
 465   2              *(m_pHPI+WRITE+HPIDAI+BYTE1) = 0x0;
 466   2              *(m_pHPI+WRITE+HPIDAI+BYTE2) = HPITxVar[i];
 467   2          }    
 468   1      
 469   1          /* 开中断 */
 470   1          EX1 = 1;
 471   1      
 472   1          return;
 473   1      }       
 474          
 475          
 476          /********************************************************************************/
 477          /*  函数名称:void SetDSPINT(void)                                               */
 478          /*  简要描述:通过HPI向各DSP发中断通知                                           */
 479          /*                                                                              */
 480          /*  时    间:2002年02月21日                                                     */
 481          /********************************************************************************/
 482          void SetDSPINT(void)                 
 483          {     
 484   1          /* 关中断 */
 485   1          EX1 = 0;
 486   1          
 487   1          /* 发中断通知C549   */
 488   1          *(m_pHPI+WRITE+HPIC+BYTE1) = 0x04;    /* 写HPIC第1字节为0,DSPINT=1    */
 489   1          *(m_pHPI+WRITE+HPIC+BYTE2) = 0x04;    /* 写HPIC第2字节为0,DSPINT=1    */
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 9   

 490   1      
 491   1          /* 开中断 */
 492   1          EX1 = 1;
 493   1      
 494   1          return;
 495   1      }       
 496          
 497          /********************************************************************************/
 498          /*  函数名称:void ReadFrameHPI(void)                                            */
 499          /*  简要描述:通过HPI读取DSP消息帧                                               */
 500          /*                                                                              */
 501          /*  时    间:2002年02月21日                                                     */
 502          /********************************************************************************/
 503          void ReadFrameHPI(void)                  
 504          {     
 505   1          uchar data temp1,i;
 506   1      
 507   1          EX1 = 0;    /* 关中断防止读出错 */
 508   1      
 509   1          *(m_pHPI+WRITE+HPIC+BYTE1) = 0x00;      /* 写HPIC第1字节为0,BOB=0   */
 510   1          *(m_pHPI+WRITE+HPIC+BYTE2) = 0x00;      /* 写HPIC第2字节为0,BOB=0   */
 511   1          *(m_pHPI+WRITE+HPIA+BYTE1) = (m_uiHPIAREA>>8)&0xff;     /* 写HPIA第1字节为写区首地址 */  /* 高字节   *
             -/
 512   1          *(m_pHPI+WRITE+HPIA+BYTE2) = m_uiHPIAREA&0xff;;       /* 写HPIA第2字节为写区首地址 */  /* 低字节   */
 513   1              
 514   1          /* 读有效字节   */
 515   1          for(i=0; i<=m_ucHPILEN; i++)
 516   1          {
 517   2              temp1 = *(m_pHPI+READ+HPIDAI+BYTE1);                
 518   2              HPIRxVar[i] = *(m_pHPI+READ+HPIDAI+BYTE2);   
 519   2          }    
 520   1          
 521   1          EX1 = 1;    /* 重开中断 */
 522   1      
 523   1          return;
 524   1      }       
 525          
 526          
 527          /********************************************************************************/
 528          /*  函数名称:void xint1(void)                                                   */
 529          /*  简要描述:HPI接口外部中断1服务程序                                           */
 530          /*                                                                              */
 531          /*  时    间:2000年11月04日                                                     */
 532          /********************************************************************************/
 533          void xint1(void) interrupt 2 using 3    /* use registerbank 3 for interrupt     */
 534          {
 535   1          uchar data temp1,temp2,temp3,temp4;
 536   1          uchar data i,j;           

⌨️ 快捷键说明

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