can.lst

来自「本程序是针对Infineon公司的XC167CI处理器而编写的CAN网络程序。C」· LST 代码 · 共 1,247 行 · 第 1/4 页

LST
1,247
字号
  296  1        ///  - identifier 11-bit:      0x124
  297  1      
  298  1        CAN_MSGAMRL2   =  0xFFFF;      // load acceptance mask register low
  299  1        CAN_MSGAMRH2   =  0xFFFF;      // load acceptance mask register high
  300  1        CAN_MSGARL2    =  0x0000;      // load arbitration register low
  301  1        CAN_MSGARH2    =  0x0490;      // load arbitration register high
  302  1        CAN_MSGDRL20   =  0x0000;      // load data register 0 low
  303  1        CAN_MSGDRH20   =  0x0000;      // load data register 0 high
C166 COMPILER V6.04, CAN                                                                   04/27/2008 18:41:45 PAGE 6   

  304  1        CAN_MSGDRL24   =  0x0000;      // load data register 4 low
  305  1        CAN_MSGDRH24   =  0x0000;      // load data register 4 high
  306  1      
  307  1        ///  - functionality of standard message object
  308  1      
  309  1        CAN_MSGFGCRL2  =  0x0000;      // load FIFO/gateway control register low
  310  1        CAN_MSGFGCRH2  =  0x0002;      // load FIFO/gateway control register high
  311  1      
  312  1        CAN_MSGCTRH2   =  0x0000;      // load message control register high
  313  1        CAN_MSGCTRL2   =  0x55A5;      // load message control register low
  314  1      
  315  1        ///  -----------------------------------------------------------------------
  316  1        ///  Configuration of Message Object 3:
  317  1        ///  -----------------------------------------------------------------------
  318  1        ///  - message object 3 is valid
  319  1        ///  - enable receive interrupt; bit INTPND is set after successfull 
  320  1        ///    reception of a frame
  321  1      
  322  1        ///  - message object is used as receive object
  323  1        ///  - standard 11-bit identifier
  324  1        ///  - 8 valid data bytes
  325  1        ///  - this message object works with CAN node B
  326  1        ///  - remote monitoring is disabled
  327  1        ///  - receive interrupt node pointer: TwinCAN SRN 4
  328  1      
  329  1        CAN_MSGCFGL3   =  0x0082;      // load message configuration register low
  330  1        CAN_MSGCFGH3   =  0x0004;      // load message configuration register high
  331  1      
  332  1        ///  - acceptance mask 11-bit: 0x700
  333  1        ///  - identifier 11-bit:      0x100
  334  1      
  335  1        CAN_MSGAMRL3   =  0x0000;      // load acceptance mask register low
  336  1        CAN_MSGAMRH3   =  0xFC00;      // load acceptance mask register high
  337  1        CAN_MSGARL3    =  0x0000;      // load arbitration register low
  338  1        CAN_MSGARH3    =  0x0400;      // load arbitration register high
  339  1        CAN_MSGDRL30   =  0x0000;      // load data register 0 low
  340  1        CAN_MSGDRH30   =  0x0000;      // load data register 0 high
  341  1        CAN_MSGDRL34   =  0x0000;      // load data register 4 low
  342  1        CAN_MSGDRH34   =  0x0000;      // load data register 4 high
  343  1      
  344  1        ///  - functionality of standard message object
  345  1      
  346  1        CAN_MSGFGCRL3  =  0x0000;      // load FIFO/gateway control register low
  347  1        CAN_MSGFGCRH3  =  0x0003;      // load FIFO/gateway control register high
  348  1      
  349  1        CAN_MSGCTRH3   =  0x0000;      // load message control register high
  350  1        CAN_MSGCTRL3   =  0x5599;      // load message control register low
  351  1      
  352  1      
  353  1        ///  -----------------------------------------------------------------------
  354  1        ///  Configuration of Service Request Nodes 0 - 7:
  355  1        ///  -----------------------------------------------------------------------
  356  1        ///  SRN0 service request node configuration:
  357  1        ///  - SRN0 interrupt priority level (ILVL) = 11
  358  1        ///  - SRN0 interrupt group level (GLVL) = 0
  359  1        ///  - SRN0 group priority extension (GPX) = 0
  360  1      
  361  1        CAN_0IC        =  0x006C;     
  362  1      
  363  1        ///  SRN1 service request node configuration:
  364  1        ///  - SRN1 interrupt priority level (ILVL) = 14
  365  1        ///  - SRN1 interrupt group level (GLVL) = 1
C166 COMPILER V6.04, CAN                                                                   04/27/2008 18:41:45 PAGE 7   

  366  1        ///  - SRN1 group priority extension (GPX) = 0
  367  1      
  368  1        CAN_1IC        =  0x0079;     
  369  1      
  370  1        ///  Use PEC channel 1 for CAN INT 1:
  371  1        ///  - normal interrupt
  372  1        ///  - pointers are not modified
  373  1        ///  - transfer a word
  374  1        ///  - service End of PEC interrrupt by a EOP interrupt node is disabled
  375  1      
  376  1        PECC1          =  0x0000;      // load PECC1 control register
  377  1      
  378  1      
  379  1        ///  SRN2 service request node configuration:
  380  1        ///  - SRN2 interrupt priority level (ILVL) = 15
  381  1        ///  - SRN2 interrupt group level (GLVL) = 2
  382  1        ///  - SRN2 group priority extension (GPX) = 0
  383  1      
  384  1        CAN_2IC        =  0x007E;     
  385  1      
  386  1        ///  Use PEC channel 6 for CAN INT 2:
  387  1        ///  - normal interrupt
  388  1        ///  - pointers are not modified
  389  1        ///  - transfer a word
  390  1        ///  - service End of PEC interrrupt by a EOP interrupt node is disabled
  391  1      
  392  1        PECC6          =  0x0000;      // load PECC6 control register
  393  1      
  394  1      
  395  1        ///  SRN3 service request node configuration:
  396  1        ///  - SRN3 interrupt priority level (ILVL) = 13
  397  1        ///  - SRN3 interrupt group level (GLVL) = 0
  398  1        ///  - SRN3 group priority extension (GPX) = 0
  399  1      
  400  1        CAN_3IC        =  0x0074;     
  401  1      
  402  1        ///  SRN4 service request node configuration:
  403  1        ///  - SRN4 interrupt priority level (ILVL) = 12
  404  1        ///  - SRN4 interrupt group level (GLVL) = 3
  405  1        ///  - SRN4 group priority extension (GPX) = 0
  406  1      
  407  1        CAN_4IC        =  0x0073;     
  408  1      
  409  1      
  410  1      
  411  1        // USER CODE BEGIN (Init,3)
  412  1      
  413  1        // USER CODE END
  414  1      
  415  1      
  416  1        CAN_PISEL      =  0x0008;      // load port input select register
  417  1      
  418  1        //   -----------------------------------------------------------------------
  419  1        //   Start the CAN Nodes:
  420  1        //   -----------------------------------------------------------------------
  421  1      
  422  1        CAN_BCR       &= ~(uword)0x0041; // reset INIT and CCE
  423  1      
  424  1      
  425  1        // USER CODE BEGIN (Init,4)
  426  1      
  427  1        // USER CODE END
C166 COMPILER V6.04, CAN                                                                   04/27/2008 18:41:45 PAGE 8   

  428  1      
  429  1      } //  End of function CAN_vInit
  430         
  431         
  432         //****************************************************************************
  433         // @Function      void CAN_vGetMsgObj(ubyte ubObjNr, TCAN_SWObj *pstObj) 
  434         //
  435         //----------------------------------------------------------------------------
  436         // @Description   This function fills the forwarded SW message object with 
  437         //                the content of the chosen HW message object.
  438         //                
  439         //                The structure of the SW message object is defined in the 
  440         //                header file CAN.H (see TCAN_SWObj).
  441         //
  442         //----------------------------------------------------------------------------
  443         // @Returnvalue   None
  444         //
  445         //----------------------------------------------------------------------------
  446         // @Parameters    ubObjNr: 
  447         //                Number of the message object to be read (0-31)
  448         // @Parameters    *pstObj: 
  449         //                Pointer on a message object to be filled by this function
  450         //
  451         //----------------------------------------------------------------------------
  452         // @Date          2006-12-9
  453         //
  454         //****************************************************************************
  455         
  456         // USER CODE BEGIN (GetMsgObj,1)
  457         
  458         // USER CODE END
  459         
  460         void CAN_vGetMsgObj(ubyte ubObjNr, TCAN_SWObj *pstObj)
  461         {
  462  1        ubyte i;
  463  1      
  464  1        for(i = 0; i < (CAN_HWOBJ[ubObjNr].uwMSGCFG & 0x00f0) >> 4; i++)
  465  1        {
  466  2          pstObj->ubData[i] = CAN_HWOBJ[ubObjNr].ubData[i];
  467  2        }
  468  1      
  469  1        if(CAN_HWOBJ[ubObjNr].uwMSGCFG & 0x04)  // extended identifier
  470  1        {
  471  2          pstObj->ulID   = CAN_HWOBJ[ubObjNr].ulCANAR;
  472  2          pstObj->ulMask = CAN_HWOBJ[ubObjNr].ulCANAMR;
  473  2        }
  474  1        else                                    // standard identifier 
  475  1        {
  476  2          pstObj->ulID   = CAN_HWOBJ[ubObjNr].ulCANAR >> 18;
  477  2          pstObj->ulMask = CAN_HWOBJ[ubObjNr].ulCANAMR >> 18;
  478  2        }
  479  1      
  480  1        pstObj->uwCounter = CAN_HWOBJ[ubObjNr].uwCounter;
  481  1        pstObj->uwMsgCfg  = CAN_HWOBJ[ubObjNr].uwMSGCFG;
  482  1      
  483  1      } //  End of function CAN_vGetMsgObj
  484         
  485         
  486         //****************************************************************************
  487         // @Function      ubyte CAN_ubRequestMsgObj(ubyte ubObjNr) 
  488         //
  489         //----------------------------------------------------------------------------
C166 COMPILER V6.04, CAN                                                                   04/27/2008 18:41:45 PAGE 9   

  490         // @Description   If a TRANSMIT OBJECT is to be reconfigured it must first be 
  491         //                accessed. The access to the transmit object is exclusive. 
  492         //                This function checks whether the choosen message object is 
  493         //                still executing a transmit request, or if the object can be 
  494         //                accessed exclusively.
  495         //                After the message object is reserved, it can be 
  496         //                reconfigured by using the function CAN_vConfigMsgObj or 
  497         //                CAN_vLoadData.
  498         //                Both functions enable access to the object for the CAN 
  499         //                controller. 
  500         //                By calling the function CAN_vTransmit transfering of data 
  501         //                is started.
  502         //
  503         //----------------------------------------------------------------------------
  504         // @Returnvalue   0 message object is busy (a transfer is active), else 1
  505         //
  506         //----------------------------------------------------------------------------
  507         // @Parameters    ubObjNr: 
  508         //                Number of the message object (0-31)
  509         //
  510         //----------------------------------------------------------------------------
  511         // @Date          2006-12-9
  512         //
  513         //****************************************************************************
  514         
  515         // USER CODE BEGIN (RequestMsgObj,1)
  516         
  517         // USER CODE END
  518         
  519         ubyte CAN_ubRequestMsgObj(ubyte ubObjNr)
  520         {
  521  1        ubyte ubReturn;
  522  1      
  523  1        ubReturn = 0;
  524  1        if((CAN_HWOBJ[ubObjNr].uwMSGCTR & 0x3000) == 0x1000)  // if reset TXRQ 
  525  1        {
  526  2          CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfbff;               // set CPUUPD 
  527  2          ubReturn = 1;
  528  2        }
  529  1        return(ubReturn);
  530  1      
  531  1      } //  End of function CAN_ubRequestMsgObj
  532         
  533         
  534         //****************************************************************************
  535         // @Function      ubyte CAN_ubNewData(ubyte ubObjNr) 
  536         //
  537         //----------------------------------------------------------------------------
  538         // @Description   This function checks whether the selected RECEIVE OBJECT 
  539         //                has received a new message. If so the function returns the 
  540         //                value '1'.
  541         //
  542         //----------------------------------------------------------------------------
  543         // @Returnvalue   1 the message object has received a new message, else 0
  544         //
  545         //----------------------------------------------------------------------------
  546         // @Parameters    ubObjNr: 
  547         //                Number of the message object (0-31)
  548         //
  549         //----------------------------------------------------------------------------
  550         // @Date          2006-12-9
  551         //
C166 COMPILER V6.04, CAN                                                                   04/27/2008 18:41:45 PAGE 10  

  552         //****************************************************************************
  553         
  554         // USER CODE BEGIN (NewData,1)
  555         
  556         // USER CODE END
  557         
  558         ubyte CAN_ubNewData(ubyte ubObjNr)
  559         {
  560  1        ubyte ubReturn;
  561  1      
  562  1        ubReturn = 0;
  563  1        if((CAN_HWOBJ[ubObjNr].uwMSGCTR & 0x0300) == 0x0200)  // if NEWDAT
  564  1        {
  565  2          ubReturn = 1;
  566  2        }
  567  1        return(ubReturn);
  568  1      
  569  1      } //  End of function CAN_ubNewData
  570         
  571         
  572         //****************************************************************************
  573         // @Function      void CAN_vTransmit(ubyte ubObjNr) 
  574         //
  575         //----------------------------------------------------------------------------
  576         // @Description   This function triggers the CAN controller to send the 
  577         //                selected message.
  578         //                If the selected message object is a TRANSMIT OBJECT then 
  579         //                this function triggers the sending of a data frame. If 
  580         //                however the selected message object is a RECEIVE OBJECT 
  581         //                this function triggers the sending of a remote frame.
  582         //
  583         //----------------------------------------------------------------------------
  584         // @Returnvalue   None
  585         //
  586         //----------------------------------------------------------------------------
  587         // @Parameters    ubObjNr: 
  588         //                Number of the message object (0-31)
  589         //
  590         //----------------------------------------------------------------------------
  591         // @Date          2006-12-9
  592         //
  593         //****************************************************************************
  594         
  595         // USER CODE BEGIN (Transmit,1)
  596         
  597         // USER CODE END

⌨️ 快捷键说明

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