您好!
是否有办法检测 CAN 总线发送 FIFO 是否未满在这种情况下、如果未满、我可以立即发送新的数据包?
谢谢。
阿诺
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
是否有办法检测 CAN 总线发送 FIFO 是否未满在这种情况下、如果未满、我可以立即发送新的数据包?
谢谢。
阿诺
检查是否可以发送新的 TX 帧的最佳方法是什么?
通过将 CAN_IF1CMD 寄存器的 TXRQST 位置1、即可随时标记任意数量的要发送的报文对象。 将根据不同的条件传输消息:
TxOk 位是否是唯一的指示? [/报价]TxOK 位会告知您最后一次传输的帧是否在总线上正确传输(并已由网络上的至少一个其他节点确认)。 如果要轮询传输的完成情况、此位很有用。 应用程序通常使用中断(而不是轮询)。
他们是另一位还是其他方式吗?如果您的目标是检查是否存在任何待处理的传输(即是否已成功完成先前启动的传输)、您始终可以轮询 CAN_TXRQ_21寄存器。
如果我没有先发送任何帧,则不会设置 TxOk。 [/报价]正确、
如果有指示 CAN 外设已准备好发送帧的信息,我更愿意使用。如前所述、只要要使用的报文对象当前为空、就可以将报文排队等待传输。
[/quote][/quote]
您好、您说过"只要要使用的消息对象当前为空、您就可以将消息排队以进行传输。"
如何检查队列消息是否为空? 是否通过检查 CAN_TXRQ_21来实现?
如果是、我就是这么做的、但当我使用示波器检查总线时、即使我发送了它们、某些 TX 帧似乎丢失或被绕过。
请参阅下面的忙代码检测。
谢谢。
阿诺
// 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;
}
}
如何检查队列 msg 是否为空? 是否通过选中 CAN_TXRQ_21来实现?
您只能检查您打算用于传输的消息对象是否已准备好接受下一条消息。 是的、您可以通过检查 CAN_TXRQ_21寄存器来执行此操作。
当我使用示波器检查总线时,即使我发送了它们,某些 TX 帧也丢失或被绕过。
这是一个很难回答的问题。 假设您正在检查一个报文对象的 TxRqst 位、并在对应于该报文对象的位为0时(意味着没有挂起的来自该报文对象的发送)启动发送。 如果您仅仅依赖示波器、则有时如果示波器未设置为正确触发、很容易丢失帧。 如果您尚未使用总线分析仪、请使用总线分析仪监控总线。
可以使用中断来消除此问题。 当对象已完成传输时、中断将被置为有效。