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.

LAUNCHXL-F280039C: MCAN轮询接收

Part Number: LAUNCHXL-F280039C

使用280039C将CAN配置为DCAN进行轮询接收后(不用中断),500ms任务扫描CAN数据,使用的任务函数如下:

void 500msTask(void)

{

    rxFIFO1st.num = MCAN_RX_FIFO_NUM_1;

    MCAN_getRxFIFOStatus(MCAN_MSG_RAM_BASE, &rxFIFO1st);

    if(rxFIFO1st.fillLvl != 0)
    {

        MCAN_readMsgRam(MCAN_MSG_RAM_BASE, MCAN_MEM_TYPE_FIFO, 0, MCAN_RX_FIFO_NUM_1, &rxMsg1);

    }

}

断点测试后,发现rxFIFO1st.fillLvl一直非0;

问题一:请问如何清零,我自己还在调试使用MCAN_writeRxFIFOAck函数进行清理

问题二:MCAN_RXF1C寄存器内每个段的含义是什么,通过MCAN_readMsgRam函数读取后会相应的段数据会出现什么变化,麻烦帮我解释一下

后续调试进度会在评论区更新,谢谢

  • BUF_NUM = 4;

    一次性发送4个CAN数据,rxFIFO1st.fillLvl = 4,使用MCAN_readMsgRam读取4次数据后,rxFIFO1st.fillLvl = 0,但是为什么再发送一次CAN数据,rxFIFO1st.fillLvl数值没有更新?

    500ms任务修改如下:

    void 500msTask(void)

    {

        rxFIFO1st.num = MCAN_RX_FIFO_NUM_1;

        MCAN_getRxFIFOStatus(MCAN_MSG_RAM_BASE, &rxFIFO1st);

        if(rxFIFO1st.fillLvl != 0)
        {
            MCAN_readMsgRam(MCAN_MSG_RAM_BASE, MCAN_MEM_TYPE_FIFO, 0, MCAN_RX_FIFO_NUM_1, &rxMsg1);
            MCAN_writeRxFIFOAck(MCAN_MSG_RAM_BASE, MCAN_RX_FIFO_NUM_1, 0);
    }

  • Hi,

    您的问题我们需要升级到英文论坛寻求帮助,如有答复将尽快回复您。

    Thanks

  • Thank you and look forward to the reply from the experts