n´t、我想将´sn´t 与 FIFO 缓冲区一起使用、但我不知道如何处理它。我从 Tiva 用户指南中获取了这个示例、并且我无法完全理解数据的读取方式、最后一行使用指向 MsgObjectRx 的 CANMessageGet、 它是否应该将缓冲区传递给 MsgObjectRx 的对象n´t´s 数据成员。我还可以使用其他示例吗?
tCANBitClkParms CANBitClk; tCANMsgObject sMsgObjectRx; tCANMsgObject sMsgObjectTx; uint8_t pui8BufferIn[8]; uint8_t pui8BufferOut[8]; // //启用 CAN0模块。 // SysCtlPeripheralEnable (SYSCTL_Periph_CAN0); // //等待 CAN0模块准备就绪。 // while (!SysCtlPeripheralReady (SYSCTL_Periph_CAN0)){} // //启用 CAN1模块。 // SysCtlPeripheralEnable (SYSCTL_Periph_CAN1); // //等待 CAN1模块准备就绪。 // while (!SysCtlPeripheralReady (SYSCTL_Periph_CAN1)){} // //将所有消息对象的状态和 CAN //模块的状态重置为已知状态。 // CANInit (CAN0_BASE); CANInit (CAN1_BASE); // 将控制器配置为1Mbit 运行。 // CANSetBitTiming (CAN1_base、&CANBitClk); // //使 CAN0器件退出初始化状态。 // CANEnable (CAN0_BASE); CANEnable (CAN1_BASE); // //配置接收对象。 // sMsgObjectRx.ulMsgID =(0x400); sMsgObjectRx.ulMsgIDMask = 0x7f8; sMsgObjectRx.ulFlags = MSG_OBJ_USE_ID_FILTER | MSG_OBJ_FIFO; // 前三个消息对象将 MSG_OBJ_FIFO 设置为指示 //它们是 FIFO 的一部分。 // CANMessageSet (CAN0_BASE、1、&sMsgObjectRx、MSG_OBJ_TYPE_RX); CANMessageSet (CAN0_BASE、 2、sMsgObjectRx、MSG_OBJ_TYPE_RX); CANMessageSet (CAN0_BASE、3、 sMsgObjectRx、MSG_obj_type_RX); // 最后一个消息对象没有设置 MSG_obj_FIFO 来指示 //这是最后一个消息。 // sMsgObjectRx.ulFlags = MSG_OBJ_USE_ID_FILTER; CANMessageSet (CAN0_BASE、4、&sMsgObjectRx、MSG_OBJ_TYPE_RX); // //配置并开始发送消息对象。 // sMsgObjectTx.ulMsgID = 0x400; sMsgObjectTx.ulFlags = 0; sMsgObjectTx.ulMsgLen = 8; sMsgObjectTx.pucMsgData = pui8BufferOut; CANMessageSet (CAN0_BASE、 2、&sMsgObjectTx、MSG_OBJ_TYPE_TX); // //等待新数据变为可用。 // while ((CANStatusGet (CAN1_base、CAN_STS_NEWDAT)& 1)=0){ // //从报文对象中读取报文。 // CANMessageGet (CAN1_base、1、&sMsgObjectRx、true); } //