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.

[参考译文] MCU-PLUS-SDK AM263X:以更高的频率发送 CAN 消息

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1357529/mcu-plus-sdk-am263x-sending-can-messages-at-a-higher-frequency

器件型号:MCU-PLUS-SDK AM263X

CAN 消息之后立即发送多个 CAN 消息。 但仅当发送消息之间没有延迟时、代码才会发送第一条消息。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void TorqueCalculationTask(void *pvParameters) {
uint64_t throttlePosition = 10;
uint64_t steeringPosition = 0;
CANMessage rrMessage;
CANMessage rlMessage;
CANMessage frMessage;
CANMessage flMessage;
while (1) {
// if (xSemaphoreTake(torqueValuesMutex, portMAX_DELAY)) {
// readThrottle(); // Read the throttle value at each cycle
throttlePosition = throttle_post_transfer;
steeringPosition = steering_post_transfer;
if (currentState == STATE_READY_TO_DRIVE && !brakePressed) {
calculateTorque(throttlePosition, torqueValues, steeringPosition);
createAMKCanMessage(0x1234, 1500, torqueValues[frontLeftInv], torqueValues[frontLeftInv+1], flMessage.message);
flMessage.id = 0x105; // Set the appropriate CAN ID
flMessage.message_length = 8;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

除非我在每次传输后添加"vTaskDelay (pdms_to_ticks (1);"、否则仅发送 ID 为0x107 (第一个添加到队列中的消息)的消息。 是否有在一个 Tx 完成后发送消息而不是必须添加手动延时时间的方法?

预期消息频率约为1500Hz、因此1毫秒延迟对我来说是不可行的

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

    您好!

    是的、您应该检查传输完成情况、而不是添加延迟。  请  在重新传输之前浏览 MCAN_INTR_SRC_TX_FIFO_EMPTY。

     

    Fullscreen
    1
    2
    #define MCAN_INTR_SRC_TX_FIFO_EMPTY (MCAN_IR_TFE_MASK)
    /**< Tx FIFO Empty interrupt */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    此致、
    贡詹