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

📄 can.c

📁 本程序是针对Infineon公司的XC167CI处理器而编写的CAN网络程序。CAN(控制局域网)协议是一种广泛的应用于汽车电子的网络协议。本程序建立了三个CAN节点
💻 C
📖 第 1 页 / 共 3 页
字号:

      // USER CODE END
    }

    if (uwStatusB & 0x0010)  // if RXOK
    {
      // Indicates that a message has been received successfully.

      uwStatusB &= 0xffef;
      CAN_BSR    = uwStatusB;    // reset RXOK

      // USER CODE BEGIN (SRN0_NODEB,4)

      // USER CODE END
    }


    // USER CODE BEGIN (SRN0_NODEB,13)

    // 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-10
//
//****************************************************************************

// USER CODE BEGIN (SRN1,1)

// USER CODE END

void CAN_viSRN1(void) interrupt CAN_SRN1INT
{

  // USER CODE BEGIN (SRN1,2)

  // 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)
			P1L=0xfe;
			delayms(1);
			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-10
//
//****************************************************************************

// USER CODE BEGIN (SRN2,1)

// USER CODE END

void CAN_viSRN2(void) interrupt CAN_SRN2INT
{

  // USER CODE BEGIN (SRN2,2)

  // 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)
		P1L=0x7f;
		delayms(1);
		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-10
//
//****************************************************************************

// USER CODE BEGIN (SRN3,1)

// USER CODE END

void CAN_viSRN3(void) interrupt CAN_SRN3INT
{

  // USER CODE BEGIN (SRN3,2)

  // 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)
		P1L=0xbf;
		delayms(1);
		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-10
//
//****************************************************************************

// USER CODE BEGIN (SRN4,1)

// USER CODE END

void CAN_viSRN4(void) interrupt CAN_SRN4INT
{

  // USER CODE BEGIN (SRN4,2)

  // 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)
			 P1L=0xfd;
	    	delayms(1);
	    	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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -