主题:C2000WARE 中讨论的其他器件
工具/软件:
大家好、我是使用 F280039C C2000 微控制器的。 我 已将 MCAN Tx 和 Rx 的波特率配置为以下值。
数据比特率为 2Mbps。
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.
工具/软件:
大家好、我是使用 F280039C C2000 微控制器的。 我 已将 MCAN Tx 和 Rx 的波特率配置为以下值。
数据比特率为 2Mbps。
尊敬的 Narsimha:
请尝试针对 2Mbps 数据速率进行这些设置。 我假定标称速率(仲裁和控制)将为 500kbps、如 C2000Ware 的 MCAN 示例中所示、因此请恢复到以下标称速率设置:
您好 Joseph、
我插入了代码。 谢谢你。
时钟设置正确 120MHz /3(使用相应的 SYSCTL_MCANCLK_DIV_4 = 3U)。
Aurix 侧 2Mbps 的波特率已正常运行。F280039C 也设置 2Mbps。
由于 IAM 未接收到 CAN Rx 中断、我怀疑第 188 行是否导致任何问题、因为 使用了 MCAN_INTR_MASK_ALL。
我附上了 ACK 组中断在发送中断后被清除的屏幕截图。


如果代码中发生中断、则意味着为什么未将数据作为 IAM 接收到 CANRx 错误。
提前感谢
Narasimhaj
尊敬的 Narsimha:
mcan_ex4_receive 示例使用标准 ID(11 位长度)、需要消息 ID 为 4。 检查这是否是由发送节点设置的消息 ID 配置。 似乎代码正在进入 ISR 例程、但它没有接收到正确的 ID、因此无法读取消息帧。
这是消息 ID 配置的那一部分:
//
// Initialize Message RAM Sections Configuration Parameters
//
msgRAMConfigParams.flssa = MCAN_STD_ID_FILT_START_ADDR;
// Standard ID Filter List Start Address.
msgRAMConfigParams.lss = MCAN_STD_ID_FILTER_NUM;
// List Size: Standard ID.
msgRAMConfigParams.rxBufStartAddr = MCAN_RX_BUFF_START_ADDR;
// Rx Buffer Start Address.
msgRAMConfigParams.rxBufElemSize = MCAN_RX_BUFF_ELEM_SIZE;
// Rx Buffer Element Size.
//
// Initialize Rx Buffer Configuration parameters.
//
stdFiltelem.sfid2 = 0x0U; // Standard Filter ID 2.
// Configuring received frame to be stored in buffer element 0
stdFiltelem.sfid1 = 0x4U; // Standard Filter ID 1.
// Confifuring frames with msg ID = 0x4U to be accepted by filter element
stdFiltelem.sfec = 0x7U; // Store into Rx Buffer
// configuration of SFT[1:0] ignored
在 ISR 中、如果收到正确的消息 ID、代码将执行的分支应该是:
//
// Check to see if the interrupt is caused by a message being
// received in dedicated RX Buffers
//
if((MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG & intrStatus) == MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG)
{
//
// Read the NewData registers
//
MCAN_getNewDataStatus(MCANA_DRIVER_BASE, &newData);
// If message is received in buffer element 0
if((newData.statusLow & (1UL << 0U)) != 0)
{
MCAN_readMsgRam(MCANA_DRIVER_BASE, MCAN_MEM_TYPE_BUF, 0U,
0, &rxMsg1);
rxMsg[loopCnt] = rxMsg1;
}
//
// Clearing the NewData registers
//
MCAN_clearNewDataStatus(MCANA_DRIVER_BASE, &newData);
}
else
此致、
Joseph