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.

[参考译文] TM4C1294NCPDT:在 CAN 上持续发送。

Guru**** 2482225 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/727173/tm4c1294ncpdt-continuously-transmitting-on-can

器件型号:TM4C1294NCPDT

您好!

      我尝试在 CAN 上持续传输相同的消息5次、如下所示。

   CANMessageSet (hwAttrs->baseAddr、2、&sCANMessage、MSG_OBJ_TYPE_TX);

   CANMessageSet (hwAttrs->baseAddr、2、&sCANMessage、MSG_OBJ_TYPE_TX);

   CANMessageSet (hwAttrs->baseAddr、2、&sCANMessage、MSG_OBJ_TYPE_TX);

   CANMessageSet (hwAttrs->baseAddr、2、&sCANMessage、MSG_OBJ_TYPE_TX);

   CANMessageSet (hwAttrs->baseAddr、2、&sCANMessage、MSG_OBJ_TYPE_TX);

但我只收到一条消息。 那么、我如何在 CAN 上连续传输消息呢?

我如何知道 CAN 已经传输了当前消息并准备好接下来进行传输?

此致、

Digvijay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    传输 CAN 消息需要一些时间。 如果您看一下 CAN 消息格式、它有11位仲裁字段、6位控制字段、高达64位的数据字段、15位 CRC 字段等 您可以获得的最快比特率为1Mbps。 以最快的比特率、MS 将发送一条消息。 它比 CPU 写入5个不同的 CANMessageSet()慢得多。 您需要在它们之间插入延迟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     感谢您的快速回复。 实际上、现在我仅使用延迟。 但我不想使用延迟。 我想使用标志检查或中断等一些智能。 他们在 multiftx 示例中给出了中断示例。 但这对我来说是不可行的。 我正在为 RTOS 开发库、这与其他现有库类似。

    此致、

    Digvijay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    我计划在 CAN_WRITE 函数中的 CANMessageSet()之后挂起信标、并将其发布到 CAN 传输完成中断中。 该逻辑是否起作用? 我已经有几天没有电路板了、因此无法在硬件上进行测试。


    // CAN_WRITE 的部分代码
    sCANMessage.ui32MsgID = object->writenode;
    sCANMessage.ui32MsgIDMask = 0;
    sCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    sCANMessage.ui32MsgLen = 8;
    sCANMessage.pui8MsgData = pui8MsgData;
    object->g_BErrFlag = 0;
    CANMessageSet (hwAttrs->baseAddr、
    2、 //the object number to configure (1-32). object->writemailbox (要配置的对象号(1-32). object->writemailbox)
    sCANMessage (&S)、 //指向包含消息对象设置的结构的指针。
    MSG_OBJ_TYPE_TX);
    Semaphore_pend (Semaphore_handle (&(object->writeSem))、BIOS_wait_forever);


    //中断处理程序的部分代码
    否则 if (ui32Status = 2) //object->writemailbox

    // GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_0、1);
    CANIntClear (hwAttrs->baseAddr、2);
    object->g_BErrFlag = 0;
    object->g_bTXFlag = 0;
    Semaphore_post (semaphore_handle (&(object->writeSem)));


    此致、
    Digvijay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    从理论上讲、它应该起作用。 请尝试一下并告知我们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我对它进行了测试。 并且工作正常、不会增加任何延迟。
    此致、
    Digvijay