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.
项目需求将MCAN配置为普通CAN进行收发,参考C2000WARE的例程mcan_ex5_mask_filter_receive工程进行收发,配置过程中遇到疑惑:
1、MCAN_DBTP寄存器和MCAN_NBTP寄存器有=作用是什么,有什么区别?
2、例程里面的结构体MCAN_BitTimingParams参数有MCAN_DBTP和MCAN_NBTP的,为什么MCAN_setBitTime只用到了其中的MCAN_NBTP部分?
3、实现我的工程配置是否只需要配置MCAN_NBTP寄存器,然后使用MCAN_setBitTime()函数进行配置即可?
有个新的问题,使用MCAN例程在LAUNCHXL板上做CAN收发,修改TX/RX引脚映射为GPIO4/5,同时将FD mode disable,将Bit rate switching disable,为什么修改后的例程只能接收一次CAN报文(非CANFD),第二次中断无法触发
回复的第五条他的理解不太对,是将MCAN模块配置成经典CAN后,收发到一个经典CAN报文后寄存器的表现方式
另外就是上面提到的例程,例程工程名叫mcan_ex5_mask_filter_receive;
我也使用过mcan_ex8_range_filter_receive工程测试过,同样只能触发第一次中断
配置CAN接收为RX_FIFO_1接收,中断line select line 2,
部分代码如下:
uint8_t intr_cnt = 0;
uint8_t new_msg_cnt = 0;
__interrupt void MCANIntr1ISR(void)
{
uint32_t intrStatus;
intr_cnt ++;
intrStatus = MCAN_getIntrStatus(MCAN_MSG_RAM_BASE);
//
// Clearing the interrupt lineNum
//
HW_WR_FIELD32(MCAN_MSG_RAM_BASE + MCAN_MCANSS_EOI, MCAN_MCANSS_EOI, 0x2);
//
// Clear the interrupt Status.
//
MCAN_clearIntrStatus(MCAN_MSG_RAM_BASE, intrStatus);
//
// Check to see if the interrupt is caused by a new message being
// received in RX FIFO 1
//
if((MCAN_INTR_SRC_RX_FIFO1_NEW_MSG & intrStatus) == MCAN_INTR_SRC_RX_FIFO1_NEW_MSG)
{
new_msg_cnt ++;
MCAN_readMsgRam(MCAN_MSG_RAM_BASE, MCAN_MEM_TYPE_FIFO, 0U,
MCAN_RX_FIFO_NUM_1, &rxMsg1);
rxMsg[0] = rxMsg1;
RxFS.num = MCAN_RX_FIFO_NUM_1;
MCAN_writeRxFIFOAck(MCAN_MSG_RAM_BASE, MCAN_RX_FIFO_NUM_1,
RxFS.getIdx);
}
else
{
//
// Interrupt handling for other interrupt sources goes here
//
}
//
// Acknowledge this interrupt located in group 9
//
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}
通过上位机发送一帧经典CAN数据帧,CCS的expressions窗口实时监测intr_cnt值和new_msg_cnt值,可以观察到每次发送一帧数据帧,new_msg_cnt 增加1,intr_cnt增加2,可见中断函数的进入两次,而NEW_MSG处理部分只进入一次,使用官方的例程ex5稍微修改后就能复现这个现象。
可以判断中断可以反复触发,但是如果使用CCS打断点进中断函数,每个断点只会停止一次,这个现象需要研究一下,我也没有头绪,但是通过new_msg_cnt 和intr_cnt的变化来看,实际中断都是会触发的