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

📄 hpi.lst

📁 在大型通信系统(机架插板式)中多块单板通过TDM总线
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 1   


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

stmt level    source

   1          /********************************************************************************/
   2          /*                                                                              */
   3          /*  描述: 复用解复用板(V2.0)控制器程序                                          */
   4          /*  VER:  2.0                                                                   */
   5          /*  REV:  0.0                                                                   */
   6          /*  作者: 胡丙龙                                                                */
   7          /*  时间: 2002年02月21日                                                        */
   8          /*  说明: 本软件版本针对VER2.0的硬件                                            */
   9          /*                                                                              */
  10          /*                                                                              */
  11          /*                                                                              */
  12          /*                                                                              */
  13          /********************************************************************************/
  14          #pragma  debug code small optimize(5) objectextend 
  15          
  16          #include "reg52.h"
  17          #include "mdb.h"
  18          #include "hpi.h"
  19          #include "hdlc.h"
  20          #include "constant.h"
  21          #include "sab82525.h"
  22          
  23          /* 外部函数 */
  24          extern uchar SendMSG(void);             /* 发送消息L3,外部接口                  */
  25          
  26          /* 函数声明 */                                                                    
  27          void  InitHPI(void);                    /* 初始化HPI缓冲区及变量                */
  28          void  TestHPI(void);                    /* 测试HPI读写状况                      */
  29          void  CheckTxHPI(void);                 /* 监测各DSP接收命令情况                */                   
  30          void  CheckRxHPI(void);                 /* 监测各DSP上报消息情况                */                   
  31          void  SendFrameHPI(void);               /* 从HPI向各DSP发送数据                 */
  32          void  SetDSPINT(void);                  /* 从HPI向各DSP发中断通知               */
  33          void  ReadFrameHPI(void);               /* 从HPI读取DSP的上报消息               */
  34          void  CheckDSP(void);                   /* 监测各DSP运行状况                    */
  35          void  GetSWVer(void);                   /* 获取CPU、DSP软件版本信息并上报       */                
  36          
  37          /* 变量定义 */
  38          HPIQueue idata m_sHPIQue;
  39          uchar idata HPITxVar[BUFSIZE+1];        /* HPI接口发送(-->DSP)暂存变量          */
  40          uchar idata HPIRxVar[BUFSIZE+1];        /* HPI接口接收(<--DSP)暂存变量          */
  41          uchar idata HPIRxVarA[BUFSIZE+1];       /* HPI接口接收(<--DSP)暂存变量,中断中用 */
  42          L3Pack xdata HPIRxBuf[HPIRXBUFNUM];     /* HPI接口接收(<--DSP)缓冲区            */
  43          uchar xdata *m_pHPI;                    /* 定义HPI接口地址暂存变量(指针)        */
  44          uint  data m_uiHPIAREA;                 /* 定义HPI接口读写区变量                */
  45          uchar data m_ucHPILEN;                  /* 定义HPI接口读写长度变量              */
  46          
  47          uchar idata m_ucHPIWatchdogTC;          /* 定义HPI软件看门狗计数器              */
  48          
  49          uchar bdata m_ucHPIFlag;      
  50          sbit m_bHPITestFlag = m_ucHPIFlag^0;    /* 定义HPI测试结果标志                  */
  51          sbit m_bHPIWatchdogFlag = m_ucHPIFlag^1;/* 定义HPI软件看门狗标志                */
  52          
  53          /* 外部变量定义 */
  54          extern uchar xdata *RESET;              /* 定义DSP复位接口译码地址              */
  55          extern uchar xdata *HPI1;               /* 定义HPI-DSP1接口译码地址             */
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 2   

  56          extern uchar xdata *HPI2;               /* 定义HPI-DSP2接口译码地址             */
  57          extern uchar xdata *HPI3;               /* 定义HPI-DSP3接口译码地址             */
  58          extern uchar xdata *HPI4;               /* 定义HPI-DSP4接口译码地址             */
  59          extern L3Pack xdata L3TxVar;            /* 网络层发送暂存变量,用户接口          */
  60          extern L3Pack xdata L3RxVar;            /* 网络层接收暂存变量,用户接口          */
  61          extern uchar data m_ucVar1;             /* 通用变量1                            */
  62          extern uchar data m_ucTimer0Count;      /* 10ms定时计数器                       */
  63          
  64          /********************************************************************************/
  65          /*  函数名称:void GetSWVer(void)                                                */
  66          /*  简要描述:/* 获取CPU、DSP软件版本信息并上报                                  */
  67          /*                                                                              */
  68          /*  时    间:2002年02月21日                                                     */
  69          /********************************************************************************/
  70          void GetSWVer(void)                  
  71          {     
  72   1          uchar data i;
  73   1          
  74   1          /* 判断缓冲区是否溢出 */
  75   1          if(m_sHPIQue.ucRxPendNum <= HPIRXBUFNUM-5)
  76   1          {       
  77   2              /* 获取DSP软件版本信息 */
  78   2              for(i=0; i<4; i++)
  79   2              {
  80   3                  WATCHDOG = ~WATCHDOG;
  81   3              
  82   3                  /* 基地址确定   */
  83   3                  if(i == 0)
  84   3                  {
  85   4                      m_pHPI = HPI1;
  86   4                  }
  87   3                  else if(i == 1)
  88   3                  {
  89   4                      m_pHPI = HPI2;
  90   4                  }
  91   3                  else if(i == 2)
  92   3                  {
  93   4                      m_pHPI = HPI3;
  94   4                  }
  95   3                  else if(i == 3)
  96   3                  {
  97   4                      m_pHPI = HPI4;
  98   4                  }
  99   3                  
 100   3                  /* 设置HPI读区间和长度 */
 101   3                  m_uiHPIAREA = DSPSOFTVER;
 102   3                  m_ucHPILEN = 5;
 103   3      
 104   3                  /* 读DSPSTATUS状态字   */
 105   3                  ReadFrameHPI();
 106   3                  
 107   3                  /* 指针获取及调整 */
 108   3                  EX1 = 0;    /* 关中断防止指针调整出错 */
 109   3                  m_ucVar1 = m_sHPIQue.ucRxPlaceIndex;
 110   3                  m_sHPIQue.ucRxPlaceIndex++;
 111   3                  m_sHPIQue.ucRxPlaceIndex = m_sHPIQue.ucRxPlaceIndex%HPIRXBUFNUM;
 112   3                  m_sHPIQue.ucRxPendNum++;
 113   3                  EX1 = 1;    /* 重开中断 */
 114   3                      
 115   3                  HPIRxBuf[m_ucVar1].ucPID     = 0x55; 
 116   3                  HPIRxBuf[m_ucVar1].ucLength  = 0x0a; 
 117   3                  HPIRxBuf[m_ucVar1].uiType    = PM_BOARDVER_IND; 
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 3   

 118   3                  HPIRxBuf[m_ucVar1].ucData[0] = i+1;              /* 数据处理单元号   */
 119   3                  HPIRxBuf[m_ucVar1].ucData[1] = HPIRxVar[0];      /* 版本号——年     */
 120   3                  HPIRxBuf[m_ucVar1].ucData[2] = HPIRxVar[1];      /* 月               */
 121   3                  HPIRxBuf[m_ucVar1].ucData[3] = HPIRxVar[2];      /* 日               */
 122   3                  HPIRxBuf[m_ucVar1].ucData[4] = HPIRxVar[3];      /* 版本号           */
 123   3                  HPIRxBuf[m_ucVar1].ucData[5] = HPIRxVar[4];      /* 修正号           */
 124   3              }
 125   2      
 126   2              /* 指针获取及调整 */
 127   2              EX1 = 0;    /* 关中断防止指针调整出错 */
 128   2              m_ucVar1 = m_sHPIQue.ucRxPlaceIndex;
 129   2              m_sHPIQue.ucRxPlaceIndex++;
 130   2              m_sHPIQue.ucRxPlaceIndex = m_sHPIQue.ucRxPlaceIndex%HPIRXBUFNUM;
 131   2              m_sHPIQue.ucRxPendNum++;
 132   2              EX1 = 1;    /* 重开中断 */
 133   2                      
 134   2              /* 获取CPU软件版本信息 */
 135   2              HPIRxBuf[m_ucVar1].ucPID     = 0x55; 
 136   2              HPIRxBuf[m_ucVar1].ucLength  = 0x0a; 
 137   2              HPIRxBuf[m_ucVar1].uiType    = PM_BOARDVER_IND; 
 138   2              HPIRxBuf[m_ucVar1].ucData[0] = 0;        /* 数据处理单元号   */
 139   2              HPIRxBuf[m_ucVar1].ucData[1] = YEAR;     /* 版本号——年     */
 140   2              HPIRxBuf[m_ucVar1].ucData[2] = MONTH;    /* 月               */
 141   2              HPIRxBuf[m_ucVar1].ucData[3] = DATE;     /* 日               */
 142   2              HPIRxBuf[m_ucVar1].ucData[4] = VERSION;  /* 版本号           */
 143   2              HPIRxBuf[m_ucVar1].ucData[5] = REVISION; /* 修正号           */
 144   2          }
 145   1      
 146   1          return;
 147   1      }       
 148          
 149          
 150          /********************************************************************************/
 151          /*  函数名称:void CheckTxHPI(void)                                              */
 152          /*  简要描述:转发通过HPI发到各DSP的命令                                         */
 153          /*                                                                              */
 154          /*  时    间:2002年02月21日                                                     */
 155          /********************************************************************************/
 156          void CheckTxHPI(void)                  
 157          {     
 158   1          uchar data temp1,i;
 159   1          
 160   1          /* 转发命令 */
 161   1          HPITxVar[0] = SOI;
 162   1          HPITxVar[1] = L3RxVar.ucPID;
 163   1          HPITxVar[2] = L3RxVar.ucLength;
 164   1          HPITxVar[3] = (L3RxVar.uiType>>8)&0xff;
 165   1          HPITxVar[4] = L3RxVar.uiType&0xff;
 166   1          HPITxVar[5] = L3RxVar.ucData[0]%2;  /* 单元号 */
 167   1          /* 剩余有效字节   */  
 168   1          for(i=6; i<=HPITxVar[2]; i++)
 169   1          {
 170   2              HPITxVar[i] = L3RxVar.ucData[i-5];
 171   2          }
 172   1      
 173   1          
 174   1          /* 计算HPI基地址 */
 175   1          temp1 = L3RxVar.ucData[0]/2;
 176   1          if(temp1 == 0)
 177   1          {
 178   2              m_pHPI = HPI1;
 179   2          }
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 4   

 180   1          else if(temp1 == 1)
 181   1          {
 182   2              m_pHPI = HPI2;
 183   2          }                
 184   1          else if(temp1 == 2)
 185   1          {
 186   2              m_pHPI = HPI3;
 187   2          }                
 188   1          else
 189   1          {
 190   2              m_pHPI = HPI4;
 191   2          }                
 192   1      
 193   1          /* 设置HPI读写区间和长度 */
 194   1          m_uiHPIAREA = AREAWRITE;
 195   1          m_ucHPILEN = HPITxVar[2];
 196   1          
 197   1          /* 写数据给C549   */
 198   1          SendFrameHPI();
 199   1          /* 发中断通知C549   */
 200   1          SetDSPINT();
 201   1          
 202   1          return;
 203   1      }       
 204          
 205          
 206          /********************************************************************************/
 207          /*  函数名称:void CheckRxHPI(void)                                              */
 208          /*  简要描述:转发通过HPI收到各DSP的上报消息                                     */
 209          /*                                                                              */
 210          /*  时    间:2002年02月21日                                                     */
 211          /********************************************************************************/
 212          void CheckRxHPI(void)                  
 213          {     
 214   1          uchar data temp1;
 215   1          
 216   1          /* 转发上报消息 */
 217   1          if(m_sHPIQue.ucRxPendNum > 0) 
 218   1          {       
 219   2              L3TxVar = HPIRxBuf[m_sHPIQue.ucRxDealIndex];
 220   2                  
 221   2              temp1 = SendMSG();     
 222   2                          
 223   2              if(temp1 == TRUE)      
 224   2              {
 225   3                  /* 发送成功,则调整指针,否则不调整指针 */
 226   3                  m_sHPIQue.ucRxDealIndex++;
 227   3                  m_sHPIQue.ucRxDealIndex = m_sHPIQue.ucRxDealIndex%HPIRXBUFNUM; 
 228   3                  m_sHPIQue.ucRxPendNum--;
 229   3              }             
 230   2          }
 231   1          
 232   1          return;
 233   1      }       
 234          
 235          /********************************************************************************/
 236          /*  函数名称:void InitHPI(void)                                                 */
 237          /*  简要描述:初始化HPI接口变量                                                  */
 238          /*                                                                              */
 239          /*  时    间:2002年02月21日                                                     */
 240          /********************************************************************************/
 241          void InitHPI(void)
C51 COMPILER V3.20,  SN-0  HPI                                                             05/14/03  11:30:42  PAGE 5   

 242          {
 243   1          uchar data i,j;
 244   1          uchar xdata *pHPI;
 245   1          
 246   1          /* 初始化HPI接口缓冲区    */
 247   1          for(i=0;i<BUFSIZE+1;i++)           
 248   1          {
 249   2              HPIRxVar[i] = 0;
 250   2              HPIRxVarA[i] = 0;
 251   2              HPITxVar[i] = 0;
 252   2          }    
 253   1          
 254   1          for(i=0;i<HPIRXBUFNUM;i++)           
 255   1          {
 256   2              HPIRxBuf[i].ucPID = 0;       
 257   2              HPIRxBuf[i].ucLength = 0;        
 258   2              HPIRxBuf[i].uiType = 0;      
 259   2              for(j=0;j<BUFSIZE-8;j++)
 260   2              {
 261   3                  HPIRxBuf[i].ucData[j] = 0;
 262   3              }
 263   2          }
 264   1      

⌨️ 快捷键说明

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