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.

[参考译文] AM263X-MCAL SDK:Rx 缓冲器

Guru**** 2988540 points

Other Parts Discussed in Thread: AM2634

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1664543/am263x-mcal-sdk-rx-buffers

器件型号: AM263X-MCAL SDK
主题中讨论的其他器件: AM2634

尊敬的 AJ Favela:
 

我尝试使用专用的 RX 缓冲区、而不是 AM2634 MCAN 上的 RX FIFO。 但是、 MCAN_MsgRAMConfigParams 仅公开 rxFIFO0Cnt 和 rxFIFO1Cnt、我看不到用于 RX 缓冲区分配的任何参数。 您能否解释一下如何在 MCU+ SDK 中配置 RX 缓冲区、以及如何使用标准 ID 滤波器将接受的消息路由给它们?

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

    尊敬的 Harika:

    与 TX 缓冲器(具有显式参数)不同 txBufCnt 、 专用 RX 缓冲器 在 MCU+ SDK 中隐式分配。 该 MCAN_MsgRAMConfigParams 结构仅公开两个与 RX 缓冲器相关的字段 1:

    • rxBufStartAddr —消息 RAM 中 RX 缓冲区部分的起始地址
    • rxBufElemSize —RX 缓冲区条目的元素大小

    不指定计数。 相反、您可以直接在滤波器配置中引用缓冲区索引 (0–63)、并且硬件支持多达 64 个专用 RX 缓冲区 2.

    如何通过标准 ID 过滤器将消息路由到 RX 缓冲区

    按如下所示配置每个标准 ID 过滤器元素 1:

    /* sfid1 defines the exact standard ID to match */
    stdFiltElem->sfid1 = APP_MCAN_STD_ID;
    
    /* sfid2 specifies the target RX Buffer number (0–63) */
    stdFiltElem->sfid2 = bufNum;
    
    /* Route matching messages to dedicated RX Buffer */
    stdFiltElem->sfec = MCAN_STD_FILT_ELEM_BUFFER;
    
    /* sft is IGNORED when sfec = MCAN_STD_FILT_ELEM_BUFFER */
    stdFiltElem->sft = MCAN_STD_FILT_TYPE_RANGE;


    从 RX 缓冲区读取数据

    接收后、检查新数据状态并读取:

    MCAN_getNewDataStatus(gMcanBaseAddr, &newDataStatus);
    MCAN_clearNewDataStatus(gMcanBaseAddr, &newDataStatus);
    
    bitPos = (1U << bufNum);
    if (bitPos == (newDataStatus.statusLow & bitPos))
    {
        MCAN_readMsgRam(gMcanBaseAddr, MCAN_MEM_TYPE_BUF, bufNum, fifoNum, &rxMsg);
    }

    使用中断源 MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG 检测消息何时到达任何专用 RX 缓冲区 1.

    关键限制:RX 缓冲区没有范围/掩码滤波

    根据 TRM、 当 SFEC 设置为“存储在 Rx 缓冲器中“(7h) 时、将忽略过滤器类型 (SFT) 字段 2.这意味着:

    • 范围过滤器MCAN_STD_FILT_TYPE_RANGE() 不 能与 RX 缓冲器一起使用
    • 传统位掩码滤波器 不 能与 RX 缓冲器搭配使用
    • 仅  支持精确的 ID 匹配—每个缓冲区每个 ID 一个过滤器元素

    如果您需要接受一系列 ID、则必须改用 RX FIFO 0 或 FIFO 1 3.

    消息 RAM 设置总结

     MCAN_calcMsgRamParamsStartAddr() 配置参数后调用—它将 rxBufStartAddr 根据其他部分的大小自动计算 1:

    MCAN_initMsgRamConfigParams(msgRAMConfigParams);
    msgRAMConfigParams->lss = APP_MCAN_STD_ID_FILTER_CNT;
    msgRAMConfigParams->txBufCnt = APP_MCAN_TX_BUFF_CNT;
    /* rxBufStartAddr and rxBufElemSize are set; no count needed */
    MCAN_calcMsgRamParamsStartAddr(msgRAMConfigParams);

    后续: 您需要将多少个不同的标准 ID 接收到专用 RX 缓冲区中—您是为每个缓冲区映射一个 ID、还是需要接受更广泛的 ID(这需要切换到 RX FIFO 模式)?


    1. MCU+ SDK MCAN LLD API 指南和 MsgRAMConfigParams
    2. AM263x 技术参考手册—MCAN 专用的 Rx 缓冲器和滤波器元件
    3. E2E:AM263x MCAN—如何配置以在消息 RAM 缓冲区中接收任何标准 ID

    此致、

    Zackary Fleenor