ZYNQ移植CANOPEN

本文档详细介绍了如何在ZYNQ FPGA平台上移植和配置CANOPEN协议栈。主要内容包括在can_data.c和main.c中设置节点ID,初始化CANOPEN节点,以及通过中间变量psCAN实现在CAN_init()中发送CAN消息。此外,还提到使用SDO查询对象字典中的1800 01数据来验证节点ID是否正确添加。
摘要由CSDN通过智能技术生成


由于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]);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值