您好
我正在 F2800137上使用 CANBUS。
我需要使用相同的对象 ID 发送连续的 CANBUS 数据包帧数据包。 我没有使用中断。
我当前正在使用 CAN_O_TXRQ_21来检测是否可以发送另一个数据包、但看起来不会在忙时等待(下面的函数始终返回0)、并仍在尝试在第一个数据包之后立即传输另一个数据包。 在本例中、我丢失了一些数据包。 (请参阅下面的代码)
我的问题是、检测是否可以尽快传输另一帧的最有效方法是什么?
// 0:好,已准备好传输
// 1:忙,需要等待
int32_t IS_CAN_TX_BUSY (uint32_t Objid)
{
if ((HWREG_BP (CAN_MODULE + CAN_O_TXRQ_21)&(1U< {
CANBUS_NOT_BUSY++;
返回0;
}
否则
{
CANBUS_BUSY_BUSY++;
返回1;
}
}
int32_t FLEXCAN_WriteTxMb (uint32_t Objid、const can_FRAME_t * txFrame)
{
CAN_setupMessageObject (CAN_MODULE、Objid、txFrame->u32Id、CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、 0U, 0U, txFrame->lenight );
can_sendMessage (CAN_MODULE,Objid,txFrame -> lenight,txFrame -> data);
MSG_COUNT++;
}
主要()
{
while ()
{
if (IS_CAN_TX_BUSY (CAN_TX_MSG_OBJ_ID)== 0)//检查是否可以发送新的数据包
{
FLEXCAN_WriteTxMB (CAN_TX_MSG_OBJ_ID、&txXfer);
}
}
}