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.
使用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);
}