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

📄 can.lst

📁 利用xc167单片机上的双口can
💻 LST
📖 第 1 页 / 共 2 页
字号:
  251  1        return(ubReturn);
  252  1      
  253  1      } 
  254         
  255         void CAN_vTransmit(ubyte ubObjNr)
  256         {
  257  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xe7ff;  // set TXRQ, reset CPUUPD
  258  1      
  259  1      } 
  260         
  261         void CAN_vConfigMsgObj(ubyte ubObjNr, TCAN_SWObj *pstObj)
  262         {
  263  1        ubyte i;
  264  1      
  265  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfb7f;     // set CPUUPD, reset MSGVAL
  266  1      
  267  1        if(pstObj->uwMsgCfg & 0x0004)             // extended identifier
  268  1        {
  269  2          CAN_HWOBJ[ubObjNr].uwMSGCFG |= 0x0004;
  270  2          CAN_HWOBJ[ubObjNr].ulCANAR   = pstObj->ulID ;
  271  2          CAN_HWOBJ[ubObjNr].ulCANAMR  = pstObj->ulMask ;
  272  2        }
  273  1        else                                      // standard identifier
  274  1        {
  275  2          CAN_HWOBJ[ubObjNr].uwMSGCFG &= ~(uword)0x0004;
  276  2          CAN_HWOBJ[ubObjNr].ulCANAR   = pstObj->ulID << 18;
  277  2          CAN_HWOBJ[ubObjNr].ulCANAMR  = pstObj->ulMask << 18;
  278  2        }
  279  1      
  280  1        CAN_HWOBJ[ubObjNr].uwCounter = pstObj->uwCounter;
  281  1      
  282  1        CAN_HWOBJ[ubObjNr].uwMSGCFG  = (CAN_HWOBJ[ubObjNr].uwMSGCFG & 0x000f) | (pstObj->uwMsgCfg & 0x00f0);
  283  1      
  284  1        if(CAN_HWOBJ[ubObjNr].uwMSGCFG & 0x0008)  // if transmit direction
  285  1        {
  286  2          for(i = 0; i < (pstObj->uwMsgCfg & 0x00f0) >> 4; i++)
  287  2          {
  288  3            CAN_HWOBJ[ubObjNr].ubData[i] = pstObj->ubData[i];
  289  3          }
  290  2          CAN_HWOBJ[ubObjNr].uwMSGCTR  = 0xf6bf;  // set NEWDAT, reset CPUUPD, 
  291  2        }                                         // set MSGVAL
  292  1        else                                      // if receive direction
  293  1        {
  294  2          CAN_HWOBJ[ubObjNr].uwMSGCTR  = 0xf7bf;  // reset CPUUPD, set MSGVAL
  295  2        }
  296  1      
  297  1      } 
  298         
  299         
  300         void CAN_vLoadData(ubyte ubObjNr, ubyte *pubData)
  301         {
C166 COMPILER V6.04, CAN                                                                   09/02/2008 15:32:01 PAGE 6   

  302  1        ubyte i;
  303  1      
  304  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfaff;       // set CPUUPD and NEWDAT
  305  1      
  306  1        for(i = 0; i < (CAN_HWOBJ[ubObjNr].uwMSGCFG & 0xf0) >> 4; i++)
  307  1        {
  308  2          CAN_HWOBJ[ubObjNr].ubData[i] = *(pubData++);
  309  2        }
  310  1      
  311  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xf7ff;       // reset CPUUPD
  312  1      
  313  1      } 
  314         
  315         ubyte CAN_ubMsgLost(ubyte ubObjNr)
  316         {
  317  1        ubyte ubReturn;
  318  1      
  319  1        ubReturn = 0;
  320  1        if((CAN_HWOBJ[ubObjNr].uwMSGCTR & 0x0c00) == 0x0800)  // if set MSGLST 
  321  1        {
  322  2          CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xf7ff;               // reset MSGLST 
  323  2          ubReturn = 1;
  324  2        }
  325  1        return(ubReturn);
  326  1      
  327  1      } 
  328         
  329         
  330         ubyte CAN_ubDelMsgObj(ubyte ubObjNr)
  331         {
  332  1        ubyte ubReturn;
  333  1      
  334  1        ubReturn = 0;
  335  1        if(!(CAN_HWOBJ[ubObjNr].uwMSGCTR & 0xa200)) // if set RMTPND, TXRQ or NEWDAT
  336  1        {
  337  2          CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xff7f;     // reset MSGVAL
  338  2          ubReturn = 1;
  339  2        }
  340  1        return(ubReturn);
  341  1      
  342  1      } 
  343         
  344         void CAN_vReleaseObj(ubyte ubObjNr)
  345         {
  346  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfdff;       // reset NEWDAT
  347  1      
  348  1      } 
  349         
  350         void CAN_vSetMSGVAL(ubyte ubObjNr)
  351         {
  352  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xffbf;  // set MSGVAL
  353  1      
  354  1      } //  End of function CAN_vSetMSGVAL
  355         
  356         
  357         ubyte CAN_ubWriteFIFO(ubyte ubObjNr, TCAN_SWObj *pstObj)
  358         {
  359  1        ubyte i,j;
  360  1        ubyte ubReturn;
  361  1      
  362  1        ubReturn = 2;
  363  1      
C166 COMPILER V6.04, CAN                                                                   09/02/2008 15:32:01 PAGE 7   

  364  1        if((CAN_HWOBJ[ubObjNr].uwCANPTR & 0x0700) == 0x0200)  // if FIFO base object 
  365  1        {
  366  2          j = aubFIFOWritePtr[ubObjNr / 2];
  367  2      
  368  2          ubReturn = 0;
  369  2          if((CAN_HWOBJ[j].uwMSGCTR & 0x3000) == 0x1000)      // if reset TXRQ 
  370  2          {
  371  3            // CANPTRn(new) = CANPTR(old) & ~(uword)FSIZEn | (CANPTRn(old) + 1) & FZIZEn
  372  3            aubFIFOWritePtr[ubObjNr / 2] = ((aubFIFOWritePtr[ubObjNr / 2] & ~(uword)(CAN_HWOBJ[ubObjNr].uwCANFCR
             - & 0x001f)) |
  373  3                                           ((aubFIFOWritePtr[ubObjNr / 2] + 1) & (CAN_HWOBJ[ubObjNr].uwCANFCR & 
             -0x001f)));
*** WARNING C192 IN LINE 373 OF CAN.C: '=': value truncated
  374  3      
  375  3            CAN_HWOBJ[j].uwMSGCTR = 0xf9ff;         // set CPUUPD, reset NEWDAT 
  376  3      
  377  3            if(CAN_HWOBJ[j].uwMSGCFG & 0x0004)      // if extended identifier
  378  3            {
  379  4              CAN_HWOBJ[j].ulCANAR   = pstObj->ulID ;
  380  4            }
  381  3            else                                    // if standard identifier
  382  3            {
  383  4              CAN_HWOBJ[j].ulCANAR   = pstObj->ulID << 18;
  384  4            }
  385  3      
  386  3            CAN_HWOBJ[j].uwMSGCFG  = (CAN_HWOBJ[j].uwMSGCFG & 0x000f) | 
  387  3                                     (pstObj->uwMsgCfg & 0x00f0); // set DLC
  388  3      
  389  3            for(i = 0; i < (pstObj->uwMsgCfg & 0x00f0) >> 4; i++)
  390  3            {
  391  4              CAN_HWOBJ[j].ubData[i] = pstObj->ubData[i];
  392  4            }
  393  3            CAN_HWOBJ[j].uwMSGCTR  = 0x66bf;        // set TXRQ, NEWDAT, MSGVAL 
  394  3                                                    // reset CPUUPD, RMTPND
  395  3            ubReturn = 1;
  396  3          }
  397  2        }
  398  1        return(ubReturn);
  399  1      
  400  1      } 
  401         
  402         ubyte CAN_ubReadFIFO(ubyte ubObjNr, TCAN_SWObj *pstObj)
  403         {
  404  1        ubyte i,j;
  405  1        ubyte ubReturn;
  406  1      
  407  1        ubReturn = 2;
  408  1      
  409  1        if((CAN_HWOBJ[ubObjNr].uwCANPTR & 0x0700) == 0x0200)  // if FIFO base object 
  410  1        {
  411  2          j = aubFIFOReadPtr[ubObjNr / 2];
  412  2      
  413  2          ubReturn = 0;
  414  2          if((CAN_HWOBJ[j].uwMSGCTR & 0x0300) == 0x0200)    // if NEWDAT 
  415  2          {
  416  3            CAN_HWOBJ[j].uwMSGCTR = 0xfdff;                 // clear NEWDAT
  417  3      
  418  3            // CANPTRn(new) = CANPTR(old) & ~(uword)FSIZEn | (CANPTRn(old) + 1) & FZIZEn
  419  3            aubFIFOReadPtr[ubObjNr / 2] = ((aubFIFOReadPtr[ubObjNr / 2] & ~(uword)(CAN_HWOBJ[ubObjNr].uwCANFCR &
             - 0x001f)) |
  420  3                                          ((aubFIFOReadPtr[ubObjNr / 2] + 1) & (CAN_HWOBJ[ubObjNr].uwCANFCR & 0x
             -001f)));
C166 COMPILER V6.04, CAN                                                                   09/02/2008 15:32:01 PAGE 8   

*** WARNING C192 IN LINE 420 OF CAN.C: '=': value truncated
  421  3      
  422  3            // check if the previous message was lost 
  423  3            if((CAN_HWOBJ[j].uwMSGCTR & 0x0c00) == 0x0800)  // if set MSGLST 
  424  3            {
  425  4              CAN_HWOBJ[j].uwMSGCTR = 0xf7ff;               // reset MSGLST 
  426  4              return(3);
  427  4            }
  428  3      
  429  3            for(i = 0; i < (CAN_HWOBJ[j].uwMSGCFG & 0x00f0) >> 4; i++)
  430  3            {
  431  4              pstObj->ubData[i] = CAN_HWOBJ[j].ubData[i];
  432  4            }
  433  3      
  434  3            if(CAN_HWOBJ[j].uwMSGCFG & 0x04)        // if extended identifier
  435  3            {
  436  4              pstObj->ulID   = CAN_HWOBJ[j].ulCANAR;
  437  4            }
  438  3            else                                    // if standard identifier 
  439  3            {
  440  4              pstObj->ulID   = CAN_HWOBJ[j].ulCANAR >> 18;
  441  4            }
  442  3      
  443  3            pstObj->uwMsgCfg  = CAN_HWOBJ[j].uwMSGCFG;
  444  3      
  445  3            // check if the message was corrupted 
  446  3            if((CAN_HWOBJ[j].uwMSGCTR & 0x0300) == 0x0200)  // if NEWDAT 
  447  3            {
  448  4              CAN_HWOBJ[j].uwMSGCTR = 0xfdff;               // clear NEWDAT
  449  4              return(4);
  450  4            }
  451  3            ubReturn = 1;
  452  3          }
  453  2        }
  454  1        return(ubReturn);
  455  1      
  456  1      } 
  457         
  458         ubyte CAN_ubFlushReadFIFO(ubyte ubObjNr)
  459         {
  460  1        ubyte j;
  461  1        ubyte ubReturn;
  462  1      
  463  1        ubReturn = 0;
  464  1      
  465  1        if((CAN_HWOBJ[ubObjNr].uwCANPTR & 0x0700) == 0x0200)  // if FIFO base object 
  466  1        {
  467  2          aubFIFOReadPtr[ubObjNr / 2] = ubObjNr;
  468  2          CAN_HWOBJ[ubObjNr].uwCANPTR = (CAN_HWOBJ[ubObjNr].uwCANPTR & ~(uword)0x001F) | ubObjNr;
  469  2      
  470  2          for(j = ubObjNr; j < ubObjNr + (CAN_HWOBJ[ubObjNr].uwCANFCR & 0x001f); j++)
  471  2          {
  472  3            CAN_HWOBJ[j].uwMSGCTR = 0xf5ff;                   // reset MSGLST, NEWDAT 
  473  3          }
  474  2          // make sure that no new frame was received
  475  2          CAN_HWOBJ[ubObjNr].uwCANPTR = (CAN_HWOBJ[ubObjNr].uwCANPTR & ~(uword)0x001F) | ubObjNr;
  476  2          CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xf5ff;               // reset MSGLST, NEWDAT 
  477  2      
  478  2          ubReturn = 1;
  479  2        }
  480  1        return(ubReturn);
  481  1      
C166 COMPILER V6.04, CAN                                                                   09/02/2008 15:32:01 PAGE 9   

  482  1      } 


MODULE INFORMATION:   INITIALIZED  UNINITIALIZED
  CODE SIZE        =        2022     --------
  NEAR-CONST SIZE  =    --------     --------
  FAR-CONST SIZE   =    --------     --------
  HUGE-CONST SIZE  =    --------     --------
  XHUGE-CONST SIZE =    --------     --------
  NEAR-DATA SIZE   =          32     --------
  FAR-DATA SIZE    =    --------     --------
  XHUGE-DATA SIZE  =    --------     --------
  IDATA-DATA SIZE  =    --------     --------
  SDATA-DATA SIZE  =    --------     --------
  BDATA-DATA SIZE  =    --------     --------
  HUGE-DATA SIZE   =    --------     --------
  BIT SIZE         =    --------     --------
  INIT'L SIZE      =    --------     --------
END OF MODULE INFORMATION.


C166 COMPILATION COMPLETE.  4 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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