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.

[参考译文] TMS320F28388D:在 F28388D 上实现 DCAN FIFO

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/908579/tms320f28388d-implementing-dcan-fifo-on-f28388d

器件型号:TMS320F28388D
Thread 中讨论的其他器件:SYSBIOSC2000WARE

您好专家、

我在我的一侧实施了 DCAN 接收 FIFO 演示(F28388D 的 CM 内核,基于 SysBIOS),并使其正常工作。 但我可能需要您提供有关在 F28388D 的 CM 内核上使用 FIFO 的进一步建议。

1.我甚至没有看到 DCAN 发送 FIFO 演示,这种 FIFO 是否存在?

通常、我们使用 FIFO 来缩短 CPU 响应中断的时间。 如果我们已经使用 Tx 或 Rx 中断对 DCAN 进行编程、那么使用 FIFO 是否仍然有益? 我要求这样做是因为我没有找到专门针对 FIFO 模式设计的中断配置,如 SCI 或 SPI。

3.根据我的代码,如果我们使用 driverlib API,应该如何重置 FIFO 以获得更多数据? 您能否演示此器件?

4.欢迎就该准则提出任何建议。

谢谢

谢尔登

e2e.ti.com/.../Main_5F00_CAN.zip

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

    [引述]1. 我甚至没有看到 DCAN 发送 FIFO 演示,这种 FIFO 是否存在?[/QUERP]

    不,到目前为止,我们在 C2000Ware 中没有此示例。  

    [引述]2. 通常、我们使用 FIFO 来缩短 CPU 响应中断的时间。 如果我们已经使用 Tx 或 Rx 中断对 DCAN 进行编程、那么使用 FIFO 是否仍然有益? 我要求这样做是因为我没有找到专门为 SCI 或 SPI 等 FIFO 模式设计的中断配置。

    当 FIFO 被填满时、您会怎么做?

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

    您好、Haresh、

    目前、我不知道在填充 CAN 接收 FIFO 时可以触发什么事件。 因此、我只需阅读第一个邮箱并移动接收缓冲区、如下所示。

    否则、如果(status == RX_MSG_OBJ_ID)
    {
    //
    //获取收到的消息
    //
    // CAN_readMessage (CANA_base、RX_MSG_obj_ID、rxMsgData);
    
    
    CAN_readMessage (CANA_base、RX_MSG_obj_ID、rxbuffer_pointer);
    if (i ==3){
    _asm (" bkpt #0");
    }否则{
    rxbuffer_pointer = rxbuffer_pointer + 4;
    }
    I ++;
    
    //
    //到达这一点意味着 RX 中断发生在上
    //报文对象2、报文 RX 完成。 清除
    //消息目标中断。
    //
    CAN_clearInterruptStatus (CANA_base、RX_MSG_OBJ_ID);
    
    //
    //递增计数器以跟踪已有多少消息
    //已收到。 在实际应用中、这可用于将标志设置为
    //指示何时接收到消息。
    //
    rxMsgCount++;
    
    //
    //由于接收到消息,请清除所有错误标志。
    //
    errorFlag = 0;
    
    } 

    我按如下方式初始化 FIFO:

    //
    //初始化用于接收 CAN 消息的接收消息对象。
    //消息对象参数:
    // 消息对象 ID 号:2.
    // 消息标识符:0x1
    // 消息帧:标准
    // 消息类型:接收
    // 消息 ID 掩码:0x0
    // 报文对象标志:接收中断
    // 消息数据长度:4字节
    //
    CAN_setupMessageObject (CANA_base、RX_MSG_OBJ_ID、0x1、CAN_MSG_FRAME_STD、
    CAN_MSG_OBJ_TYPE_RX、0、CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_FIFO、
    MSG_DATA_LENGTH);
    
    //
    //初始化用于接收 CAN 消息的接收消息对象。
    //消息对象参数:
    // 消息对象 ID 号:3.
    // 消息标识符:0x1 (相同)
    // 消息帧:标准
    // 消息类型:接收
    // 消息 ID 掩码:0x0 (相同)
    // 报文对象标志:接收中断
    // 消息数据长度:4字节
    //
    CAN_setupMessageObject (CANA_base、RX_MSG_OBJ_ID_0、0x1、CAN_MSG_FRAME_STD、
    CAN_MSG_OBJ_TYPE_RX、0、CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_FIFO、
    MSG_DATA_LENGTH);
    
    //
    //此 ID 编号较高的接收报文对象是接收 FIFO 的最后一个成员
    //
    //初始化用于接收 CAN 消息的接收消息对象。
    //消息对象参数:
    // 消息对象 ID 号:4.
    // 消息标识符:0x1 (相同)
    // 消息帧:标准
    // 消息类型:接收
    // 消息 ID 掩码:0x0 (相同)
    // 报文对象标志:接收中断
    // 消息数据长度:4字节
    //
    CAN_setupMessageObject (CANA_base、RX_MSG_OBJ_ID_1、0x1、CAN_MSG_FRAME_STD、
    CAN_MSG_OBJ_TYPE_RX、0、CAN_MSG_OBJ_RX_INT_ENABLE、
    MSG_DATA_LENGTH); 

    您是否有任何关于 FIFO 被填满时应执行什么操作的建议? 我们是否有任何事件发出 FIFO 已填充的信号?

    谢谢

    谢尔登

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

    您好、Haresh、

    我在这里的问题是否有任何更新? 我想在接收一个 FIFO 中的全部三个报文对象时生成一个中断。 我该怎么做?

    谢谢

    谢尔登

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

    Sheldon、

    由于这是脱机处理的、如果问题得到解决、请关闭此主题。