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

📄 can.lst

📁 英飞凌C166之XC164CS双CAN通讯程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
  604         //                instead of the function CAN_vConfigMsgObj. The message 
  605         //                object should be accessed by calling the function 
  606         //                CAN_ubRequestMsgObj before calling this function. This 
  607         //                prevents the CAN controller from working with invalid data.
  608         //
  609         //----------------------------------------------------------------------------
  610         // @Returnvalue   None
  611         //
  612         //----------------------------------------------------------------------------
  613         // @Parameters    ubObjNr: 
C166 COMPILER V6.04, CAN                                                                   09/08/2007 14:27:20 PAGE 11  

  614         //                Number of the message object to be configured (0-31)
  615         // @Parameters    *pubData: 
  616         //                Pointer on a data buffer
  617         //
  618         //----------------------------------------------------------------------------
  619         // @Date          2007-5-25
  620         //
  621         //****************************************************************************
  622         
  623         // USER CODE BEGIN (LoadData,1)
  624         
  625         // USER CODE END
  626         
  627         void CAN_vLoadData(ubyte ubObjNr, ubyte *pubData)
  628         {
  629  1        ubyte i;
  630  1      
  631  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfaff;       // set CPUUPD and NEWDAT
  632  1      
  633  1        for(i = 0; i < (CAN_HWOBJ[ubObjNr].uwMSGCFG & 0xf0) >> 4; i++)
  634  1        {
  635  2          CAN_HWOBJ[ubObjNr].ubData[i] = *(pubData++);
  636  2        }
  637  1      
  638  1        CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xf7ff;       // reset CPUUPD
  639  1      
  640  1      } //  End of function CAN_vLoadData
  641         
  642         
  643         //****************************************************************************
  644         // @Function      void CAN_viSRN0(void) 
  645         //
  646         //----------------------------------------------------------------------------
  647         // @Description   This is the interrupt service routine for the Service 
  648         //                Request Node 0 of the TwinCAN module.
  649         //
  650         //----------------------------------------------------------------------------
  651         // @Returnvalue   None
  652         //
  653         //----------------------------------------------------------------------------
  654         // @Parameters    None
  655         //
  656         //----------------------------------------------------------------------------
  657         // @Date          2007-5-25
  658         //
  659         //****************************************************************************
  660         
  661         // USER CODE BEGIN (SRN0,1)
  662         
  663         // USER CODE END
  664         
  665         void CAN_viSRN0(void) interrupt CAN_SRN0INT
  666         {
  667  1        uword uwStatusA;
  668  1      
  669  1        // USER CODE BEGIN (SRN0,2)
  670  1      
  671  1        // USER CODE END
  672  1      
  673  1        while((( ((ulong)CAN_TXIPNDH << 16) + CAN_TXIPNDL) & 0x00000001) || (CAN_ASR & 0x0018))
  674  1        {
  675  2      
C166 COMPILER V6.04, CAN                                                                   09/08/2007 14:27:20 PAGE 12  

  676  2          // status change interrupt of node A
  677  2      
  678  2          uwStatusA = CAN_ASR;
  679  2          if (uwStatusA & 0x0008)  // if TXOK
  680  2          {
  681  3            // Indicates that a message has been transmitted successfully
  682  3            // (error free and acknowledged by at least one other node).
  683  3      
  684  3            uwStatusA &= 0xfff7;
  685  3            CAN_ASR    = uwStatusA;    // reset TXOK
  686  3      
  687  3            // USER CODE BEGIN (SRN0_NODEA,3)
  688  3      
  689  3            // USER CODE END
  690  3          }
  691  2      
  692  2          if (uwStatusA & 0x0010)  // if RXOK
  693  2          {
  694  3            // Indicates that a message has been received successfully.
  695  3      
  696  3            uwStatusA &= 0xffef;
  697  3            CAN_ASR    = uwStatusA;    // reset RXOK
  698  3      
  699  3            // USER CODE BEGIN (SRN0_NODEA,4)
  700  3      
  701  3            // USER CODE END
  702  3          }
  703  2      
  704  2      
  705  2          // USER CODE BEGIN (SRN0_NODEA,13)
  706  2      
  707  2          // USER CODE END
  708  2      
  709  2      
  710  2      
  711  2          // message object 0 interrupt
  712  2      
  713  2          if((CAN_HWOBJ[0].uwMSGCTR & 0x0003) == 0x0002)         // if INTPND 
  714  2          {
  715  3            if(CAN_TXIPNDL & CAN_TXIPNDL_TXIPND0)   // message object 0 transmit interrupt
  716  3            {
  717  4      
  718  4              // The transmission of the last message object
  719  4              // was successful.
  720  4      
  721  4              // USER CODE BEGIN (SRN0_OBJ0,4)
  722  4      
  723  4              // USER CODE END
  724  4      
  725  4              CAN_HWOBJ[0].uwMSGCTR = 0xfdff;      // reset NEWDAT
  726  4      
  727  4            }  // End of TXIPND0
  728  3      
  729  3            CAN_HWOBJ[0].uwMSGCTR = 0xfffd;        // reset INTPND
  730  3      
  731  3            // USER CODE BEGIN (SRN0_OBJ0,6)
  732  3      
  733  3            // USER CODE END
  734  3      
  735  3          }
  736  2      
  737  2      
C166 COMPILER V6.04, CAN                                                                   09/08/2007 14:27:20 PAGE 13  

  738  2          // USER CODE BEGIN (SRN0,3)
  739  2      
  740  2          // USER CODE END
  741  2      
  742  2      
  743  2        }  // End of while()
  744  1      
  745  1        // USER CODE BEGIN (SRN0,7)
  746  1      
  747  1        // USER CODE END
  748  1      
  749  1      } //  End of function CAN_viSRN0
  750         
  751         
  752         //****************************************************************************
  753         // @Function      void CAN_viSRN1(void) 
  754         //
  755         //----------------------------------------------------------------------------
  756         // @Description   This is the interrupt service routine for the Service 
  757         //                Request Node 1 of the TwinCAN module.
  758         //
  759         //----------------------------------------------------------------------------
  760         // @Returnvalue   None
  761         //
  762         //----------------------------------------------------------------------------
  763         // @Parameters    None
  764         //
  765         //----------------------------------------------------------------------------
  766         // @Date          2007-5-25
  767         //
  768         //****************************************************************************
  769         
  770         // USER CODE BEGIN (SRN1,1)
  771         
  772         // USER CODE END
  773         
  774         void CAN_viSRN1(void) interrupt CAN_SRN1INT
  775         {
  776  1        uword uwStatusB;
  777  1      
  778  1        // USER CODE BEGIN (SRN1,2)
  779  1      
  780  1        // USER CODE END
  781  1      
  782  1        while((( ((ulong)CAN_RXIPNDH << 16) + CAN_RXIPNDL) & 0x00000002) || (CAN_BSR & 0x0018))
  783  1        {
  784  2      
  785  2          // status change interrupt of node B
  786  2      
  787  2          uwStatusB = CAN_BSR;
  788  2          if (uwStatusB & 0x0008)  // if TXOK
  789  2          {
  790  3            // Indicates that a message has been transmitted successfully
  791  3            // (error free and acknowledged by at least one other node).
  792  3      
  793  3            uwStatusB &= 0xfff7;
  794  3            CAN_BSR    = uwStatusB;    // reset TXOK
  795  3      
  796  3            // USER CODE BEGIN (SRN1_NODEB,3)
  797  3      
  798  3            // USER CODE END
  799  3          }
C166 COMPILER V6.04, CAN                                                                   09/08/2007 14:27:20 PAGE 14  

  800  2      
  801  2          if (uwStatusB & 0x0010)  // if RXOK
  802  2          {
  803  3            // Indicates that a message has been received successfully.
  804  3      
  805  3            uwStatusB &= 0xffef;
  806  3            CAN_BSR    = uwStatusB;    // reset RXOK
  807  3      
  808  3            // USER CODE BEGIN (SRN1_NODEB,4)
  809  3      
  810  3            // USER CODE END
  811  3          }
  812  2      
  813  2      
  814  2          // USER CODE BEGIN (SRN1_NODEB,13)
  815  2      
  816  2          // USER CODE END
  817  2      
  818  2      
  819  2      
  820  2          // message object 1 interrupt
  821  2      
  822  2          if((CAN_HWOBJ[1].uwMSGCTR & 0x0003) == 0x0002)         // if INTPND 
  823  2          {
  824  3            if(CAN_RXIPNDL & CAN_RXIPNDL_RXIPND1)   // message object 1 receive interrupt
  825  3            {
  826  4      
  827  4              if((CAN_HWOBJ[1].uwMSGCTR & 0x0300) == 0x0200)     // if NEWDAT is set
  828  4              {
  829  5      
  830  5                if ((CAN_HWOBJ[1].uwMSGCTR & 0x0c00) == 0x0800)  // if MSGLST is set
  831  5                {
  832  6                  // Indicates that the CAN controller has stored a new 
  833  6                  // message into this object, while NEWDAT was still set,
  834  6                  // ie. the previously stored message is lost.
  835  6      
  836  6                  CAN_HWOBJ[1].uwMSGCTR = 0xf7ff;  // reset MSGLST
  837  6      
  838  6                  // USER CODE BEGIN (SRN1_OBJ1,1)
  839  6      
  840  6                  // USER CODE END
  841  6                }
  842  5                else
  843  5                {
  844  6                  // The CAN controller has stored a new message
  845  6                  // into this object.
  846  6      
  847  6                  // USER CODE BEGIN (SRN1_OBJ1,2)
  848  6      
  849  6                  // USER CODE END
  850  6                }
  851  5      
  852  5                CAN_HWOBJ[1].uwMSGCTR = 0xfdff;    // reset NEWDAT
  853  5              }
  854  4      
  855  4            }  // End of RXIPND1
  856  3      
  857  3      
  858  3            CAN_HWOBJ[1].uwMSGCTR = 0xfffd;        // reset INTPND
  859  3      
  860  3            // USER CODE BEGIN (SRN1_OBJ1,6)
  861  3      
C166 COMPILER V6.04, CAN                                                                   09/08/2007 14:27:20 PAGE 15  

  862  3            // USER CODE END
  863  3      
  864  3          }
  865  2      
  866  2      
  867  2          // USER CODE BEGIN (SRN1,3)
  868  2      
  869  2          // USER CODE END
  870  2      
  871  2      
  872  2        }  // End of while()
  873  1      
  874  1        // USER CODE BEGIN (SRN1,7)
  875  1      
  876  1        // USER CODE END
  877  1      
  878  1      } //  End of function CAN_viSRN1
  879         
  880         
  881         
  882         // USER CODE BEGIN (CAN_General,10)
  883         
  884         // USER CODE END
  885         


MODULE INFORMATION:   INITIALIZED  UNINITIALIZED
  CODE SIZE        =        1564     --------
  NEAR-CONST SIZE  =    --------     --------
  FAR-CONST SIZE   =    --------     --------
  HUGE-CONST SIZE  =    --------     --------
  XHUGE-CONST SIZE =    --------     --------
  NEAR-DATA SIZE   =    --------     --------
  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.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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