由于CANopen的源码和ZYNQ的可以数据结构不同,转换一下
can_data.c
#include“can_data.h”
// volatile u32 FramePtr [4];
// volatile u32 TxFramePtr [4];
// volatile u32 RxFramePtr [4];
s32 XCanPs_Send_Self(XCanPs * InstancePtr,CanRxMsg * TxMessage)
{
s32状态;
u32 FramePtr [4] = {0,0,0,0};
Xil_AssertNonvoid(InstancePtr!= NULL);
Xil_AssertNonvoid(TxMessage!= NULL);
Xil_AssertNonvoid(InstancePtr-> IsReady == XIL_COMPONENT_IS_READY);
if(XCanPs_IsTxFifoFull(InstancePtr)== TRUE){
状态= XST_FIFO_NO_ROOM;
} else {
FramePtr [0] | = TxMessage-> IDE << 16;
如果(TxMessage-> IDE == CAN_Id_Standard)
{
FramePtr [0] | = XCANPS_IDR_ID1_MASK&TxMessage-> StdId << 21;
}
其他
{
FramePtr [0] | = XCANPS_IDR_ID2_MASK&(TxMessage-> ExtId << 1);
FramePtr [0] | = XCANPS_IDR_ID1_MASK&(TxMessage-> ExtId << 3);
}
FramePtr [0] | =(uint32_t)TxMessage-> RTR;
/ *获得DLC * /
FramePtr [1] =(uint32_t)TxMessage-> DLC << 28;
FramePtr [2] | =(XCANPS_DW1R_DB0_MASK&(((uint32_t)TxMessage-> Data [3])<< 24));
FramePtr [2] | =(XCANPS_DW1R_DB1_MASK&(((uint32_t)TxMessage-> Data [2])<< 16));
FramePtr [2] | =(XCANPS_DW1R_DB2_MASK&(((uint32_t)TxMessage-> Data [1])<< 8));
FramePtr [2] | =(XCANPS_DW1R_DB3_MASK&(uint32_t)TxMessage-> Data [0]);
FramePtr [3] | =(XCANPS_DW2R_DB4_MASK&(((uint32_t)TxMessage-> Data [7])<< 24));
FramePtr [3] | =(XCANPS_DW2R_DB5_MASK&(((uint32_t)TxMessage-> Data [6])<< 16));
FramePtr [3] | =(XCANPS_DW2R_DB6_MASK&(((uint32_t)TxMessage-> Data [5])<< 8));
FramePtr [3] | =(XCANPS_DW2R_DB7_MASK&(uint32_t)TxMessage-> Data [4]);