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 + -
显示快捷键?