can.c

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

C
1,179
字号

    // USER CODE END



    // USER CODE BEGIN (SRN0,3)

    // USER CODE END


  }  // End of while()

  // USER CODE BEGIN (SRN0,7)

  // USER CODE END

} //  End of function CAN_viSRN0


//****************************************************************************
// @Function      void CAN_viSRN1(void) 
//
//----------------------------------------------------------------------------
// @Description   This is the interrupt service routine for the Service 
//                Request Node 1 of the TwinCAN module.
//
//----------------------------------------------------------------------------
// @Returnvalue   None
//
//----------------------------------------------------------------------------
// @Parameters    None
//
//----------------------------------------------------------------------------
// @Date          2006-12-9
//
//****************************************************************************

// USER CODE BEGIN (SRN1,1)

// USER CODE END

void CAN_viSRN1(void) interrupt CAN_SRN1INT
{

  // USER CODE BEGIN (SRN1,2)
   int i;
  // USER CODE END

  while((( ((ulong)CAN_RXIPNDH << 16) + CAN_RXIPNDL) & 0x00000001))
  {

    // message object 0 interrupt

    if((CAN_HWOBJ[0].uwMSGCTR & 0x0003) == 0x0002)         // if INTPND 
    {
      if(CAN_RXIPNDL & CAN_RXIPNDL_RXIPND0)   // message object 0 receive interrupt
      {

        if((CAN_HWOBJ[0].uwMSGCTR & 0x0300) == 0x0200)     // if NEWDAT is set
        {

          if ((CAN_HWOBJ[0].uwMSGCTR & 0x0c00) == 0x0800)  // if MSGLST is set
          {
            // Indicates that the CAN controller has stored a new 
            // message into this object, while NEWDAT was still set,
            // ie. the previously stored message is lost.

            CAN_HWOBJ[0].uwMSGCTR = 0xf7ff;  // reset MSGLST

            // USER CODE BEGIN (SRN1_OBJ0,1)

            // USER CODE END
          }
          else
          {
            // The CAN controller has stored a new message
            // into this object.

            // USER CODE BEGIN (SRN1_OBJ0,2)
			
			for(i=0;i<40000;i++)
			   {
                           
                            
			     P1L=0x7f;
                            
			   } 
			
			P1L=0xff;

            // USER CODE END
          }

          CAN_HWOBJ[0].uwMSGCTR = 0xfdff;    // reset NEWDAT
        }

      }  // End of RXIPND0


      CAN_HWOBJ[0].uwMSGCTR = 0xfffd;        // reset INTPND

      // USER CODE BEGIN (SRN1_OBJ0,6)

      // USER CODE END

    }


    // USER CODE BEGIN (SRN1,3)

    // USER CODE END


  }  // End of while()

  // USER CODE BEGIN (SRN1,7)

  // USER CODE END

} //  End of function CAN_viSRN1


//****************************************************************************
// @Function      void CAN_viSRN2(void) 
//
//----------------------------------------------------------------------------
// @Description   This is the interrupt service routine for the Service 
//                Request Node 2 of the TwinCAN module.
//
//----------------------------------------------------------------------------
// @Returnvalue   None
//
//----------------------------------------------------------------------------
// @Parameters    None
//
//----------------------------------------------------------------------------
// @Date          2006-12-9
//
//****************************************************************************

// USER CODE BEGIN (SRN2,1)

// USER CODE END

void CAN_viSRN2(void) interrupt CAN_SRN2INT
{

  // USER CODE BEGIN (SRN2,2)
   int j,k;
  // USER CODE END

  while((( ((ulong)CAN_TXIPNDH << 16) + CAN_TXIPNDL) & 0x00000002))
  {

    // message object 1 interrupt

    if((CAN_HWOBJ[1].uwMSGCTR & 0x0003) == 0x0002)         // if INTPND 
    {
      if(CAN_TXIPNDL & CAN_TXIPNDL_TXIPND1)   // message object 1 transmit interrupt
      {

        // The transmission of the last message object
        // was successful.

        // USER CODE BEGIN (SRN2_OBJ1,4)
		 for(j=0;j<40000;j++)
			   {
			    
                
			     P1L=0xfe;
                            
			   } 
	   for(k=0;k<40000;k++)
	   P1L=0xff;

        // USER CODE END

        CAN_HWOBJ[1].uwMSGCTR = 0xfdff;      // reset NEWDAT

      }  // End of TXIPND1

      CAN_HWOBJ[1].uwMSGCTR = 0xfffd;        // reset INTPND

      // USER CODE BEGIN (SRN2_OBJ1,6)
	  
	  
      // USER CODE END

    }


    // USER CODE BEGIN (SRN2,3)

    // USER CODE END


  }  // End of while()

  // USER CODE BEGIN (SRN2,7)

  // USER CODE END

} //  End of function CAN_viSRN2


//****************************************************************************
// @Function      void CAN_viSRN3(void) 
//
//----------------------------------------------------------------------------
// @Description   This is the interrupt service routine for the Service 
//                Request Node 3 of the TwinCAN module.
//
//----------------------------------------------------------------------------
// @Returnvalue   None
//
//----------------------------------------------------------------------------
// @Parameters    None
//
//----------------------------------------------------------------------------
// @Date          2006-12-9
//
//****************************************************************************

// USER CODE BEGIN (SRN3,1)

// USER CODE END

void CAN_viSRN3(void) interrupt CAN_SRN3INT
{

  // USER CODE BEGIN (SRN3,2)
  int s;
  // USER CODE END

  while((( ((ulong)CAN_TXIPNDH << 16) + CAN_TXIPNDL) & 0x00000004))
  {

    // message object 2 interrupt

    if((CAN_HWOBJ[2].uwMSGCTR & 0x0003) == 0x0002)         // if INTPND 
    {
      if(CAN_TXIPNDL & CAN_TXIPNDL_TXIPND2)   // message object 2 transmit interrupt
      {

        // The transmission of the last message object
        // was successful.

        // USER CODE BEGIN (SRN3_OBJ2,4)
		  for(s=0;s<40000;s++)
			   {
			    
                
			     P1L=0xfd;
                            
			   } 
	   for(s=0;s<40000;s++)
	   P1L=0xff;
        // USER CODE END

        CAN_HWOBJ[2].uwMSGCTR = 0xfdff;      // reset NEWDAT

      }  // End of TXIPND2

      CAN_HWOBJ[2].uwMSGCTR = 0xfffd;        // reset INTPND

      // USER CODE BEGIN (SRN3_OBJ2,6)

      // USER CODE END

    }


    // USER CODE BEGIN (SRN3,3)

    // USER CODE END


  }  // End of while()

  // USER CODE BEGIN (SRN3,7)

  // USER CODE END

} //  End of function CAN_viSRN3


//****************************************************************************
// @Function      void CAN_viSRN4(void) 
//
//----------------------------------------------------------------------------
// @Description   This is the interrupt service routine for the Service 
//                Request Node 4 of the TwinCAN module.
//
//----------------------------------------------------------------------------
// @Returnvalue   None
//
//----------------------------------------------------------------------------
// @Parameters    None
//
//----------------------------------------------------------------------------
// @Date          2006-12-9
//
//****************************************************************************

// USER CODE BEGIN (SRN4,1)

// USER CODE END

void CAN_viSRN4(void) interrupt CAN_SRN4INT
{

  // USER CODE BEGIN (SRN4,2)
  int t;
  // USER CODE END

  while((( ((ulong)CAN_RXIPNDH << 16) + CAN_RXIPNDL) & 0x00000008))
  {

    // message object 3 interrupt

    if((CAN_HWOBJ[3].uwMSGCTR & 0x0003) == 0x0002)         // if INTPND 
    {
      if(CAN_RXIPNDL & CAN_RXIPNDL_RXIPND3)   // message object 3 receive interrupt
      {

        if((CAN_HWOBJ[3].uwMSGCTR & 0x0300) == 0x0200)     // if NEWDAT is set
        {

          if ((CAN_HWOBJ[3].uwMSGCTR & 0x0c00) == 0x0800)  // if MSGLST is set
          {
            // Indicates that the CAN controller has stored a new 
            // message into this object, while NEWDAT was still set,
            // ie. the previously stored message is lost.

            CAN_HWOBJ[3].uwMSGCTR = 0xf7ff;  // reset MSGLST

            // USER CODE BEGIN (SRN4_OBJ3,1)

            // USER CODE END
          }
          else
          {
            // The CAN controller has stored a new message
            // into this object.

            // USER CODE BEGIN (SRN4_OBJ3,2)
				for(t=0;t<40000;t++)
			   {
                           
                            
			     P1L=0xbf;
                            
			   } 
			
			P1L=0xff;
            // USER CODE END
          }

          CAN_HWOBJ[3].uwMSGCTR = 0xfdff;    // reset NEWDAT
        }

      }  // End of RXIPND3


      CAN_HWOBJ[3].uwMSGCTR = 0xfffd;        // reset INTPND

      // USER CODE BEGIN (SRN4_OBJ3,6)

      // USER CODE END

    }


    // USER CODE BEGIN (SRN4,3)

    // USER CODE END


  }  // End of while()

  // USER CODE BEGIN (SRN4,7)

  // USER CODE END

} //  End of function CAN_viSRN4



// USER CODE BEGIN (CAN_General,10)

// USER CODE END

⌨️ 快捷键说明

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