ZHCAF96 April   2025 MSPM0G3506 , MSPM0G3507 , MSPM0G3518 , MSPM0G3519

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 MCAN 特性
  5. 2MCAN 模块的 Sysconfig 配置
    1. 2.1 MCAN 时钟频率
    2. 2.2 MCAN 基本配置
      1. 2.2.1 发送器延迟补偿 (TDC)
      2. 2.2.2 位时序参数
      3. 2.2.3 消息 RAM 配置
        1. 2.2.3.1 标准和扩展 ID 滤波器配置
          1. 2.2.3.1.1 如何添加更多滤波器
        2. 2.2.3.2 TX MSG RAM
        3. 2.2.3.3 RX MSG RAM
    3. 2.3 高级配置
    4. 2.4 保留配置
    5. 2.5 中断
    6. 2.6 引脚配置和 PinMux
  6. 3演示项目说明
    1. 3.1 TX 缓冲模式
    2. 3.2 TX FIFO 模式
    3. 3.3 RX 缓冲模式
    4. 3.4 RX FIFO 模式
  7. 4解决/避免 CAN 通信问题的调试和设计提示
    1. 4.1 所需的最少节点数
    2. 4.2 为何需要收发器
    3. 4.3 总线关闭状态
    4. 4.4 在低功耗模式下使用 MCAN
    5. 4.5 调试检查清单
      1. 4.5.1 编程问题
      2. 4.5.2 物理层问题
      3. 4.5.3 硬件调试提示
  8. 5总结
  9. 6参考资料

RX FIFO 模式

在 SDK 中的当前演示项目中,将 RX 配置为 FIFO 模式。下节介绍了 DL_MCAN_RxFIFOStatus 的结构,该结构通常用于 RX FIFO 模式。TI 建议用户在从 RX FIFO 提取消息时检查此结构。

/**
 *  @brief  Structure for MCAN Rx FIFO Status.
 */
typedef struct {
    /*! Rx FIFO number
     *   One of @ref DL_MCAN_RX_FIFO_NUM
     */
    uint32_t num;
    /*! Rx FIFO Fill Level */
    uint32_t fillLvl;
    /*! Rx FIFO Get Index */
    uint32_t getIdx;
    /*! Rx FIFO Put Index */
    uint32_t putIdx;
    /*! Rx FIFO Full
     *   0 = Rx FIFO not full
     *   1 = Rx FIFO full
     */
    uint32_t fifoFull;
    /*! Rx FIFO Message Lost */
    uint32_t msgLost;
} DL_MCAN_RxFIFOStatus;
  • num 指示当前操作的 Rx FIFO 实例编号。MCAN 可以支持多个 Rx FIFO(如 Rx FIFO 0和 Rx FIFO 1),必须指定具体实例。例如,DL_MCAN_RX_FIFO_NUM 枚举包含 DL_MCAN_RX_FIFO_0 和 DL_MCAN_RX_FIFO_1。
  • fillLvl 指示当前存储在 Rx FIFO 中的有效消息数量。例如,当 fillLvl 为 5 时,这意味着 FIFO 中有 5 条未读消息。当 fillLvl 达到 Rx FIFO 的深度(例如 6 条消息)时,fifoFull 字段设置为 1,表示 FIFO 已满。
  • getIdx 指向下一条要读取的消息。CPU 通过递增 getIdx,按顺序读取 FIFO 中的消息。当 Rx FIFO 已满且处于覆盖模式时,新消息会覆盖最早的消息。此时,用户开始从 getIdx + 1 读取,以避免读取正在被覆盖的旧数据。
  • putIdx 指向下一个可写消息的位置。接收到新消息时,该消息会写入 putIdx 指向的位置,然后 putIdx 递增。
  • fifoFull 表示 Rx FIFO 是否已满。当 Rx FIFO 已满时,请尝试以下选项:
    • 阻塞模式:将丢弃新消息并触发 msgLost 计数。
    • 覆盖模式:新消息会覆盖最早的消息,putIdx 和 getIdx 同时递增。
  • msgLost 统计由于 Rx FIFO 已满而丢弃的消息数量。在下列情况下会触发此举:
    • 阻塞模式:当 Rx FIFO 已满时,将接收到一条新的消息,而该消息将被拒绝和丢弃。
    • 覆盖模式:覆盖旧消息时,被覆盖的消息将计为丢失。