主题中讨论的其他器件:C2000WARE
我想在 MCAN 模块中使用经典 CAN 模式。 因此、我使用了 mCAN_ex2_external_loopback 示例并将该值(initParams.fdMode)修改为0而不是1来禁用 CAN FD 操作、但在该示例之后、当我调用函数(MCAN_isFDOpEnable (MCAN0_BASE));)时、它返回 true、这意味着启用 CAN FD 操作。 您可以找到以下配置:
静态空 MCANConfig (void)
{
uint32_t fdoe;
MCAN_RevisionId revId;
MCAN_InitParams initParams;
MCAN_ConfigParams configParams;
MCAN_MsgRAMConfigParams msgRAMConfigParams;
MCAN_StdMsgIDFilterElement StdFiltelem;
MCAN_ExtMsgIDFilterElement extFileselem;
MCAN_BitTimingParams 位时间;
//
//初始化 MCAN Init 参数。
//
initParams.fdMode = 0x0U;// FD 运行被禁用。
initParams.brsEnable = 0x1U;//位速率切换
//传输已启用。
initParams.txpEnable = 0x1U;//发送暂停被启用。
initParams.efbi = 0x0U;//边缘过滤被禁用。
initParams.pxhddisable = 0x0U;//协议异常处理被启用。
initParams.darEnable = 0x1U;//自动重传消息
//传输未成功启用。
initParams.wkupReqEnable = 0x1U;//唤醒请求被启用。
initParams.autoWkupEnable = 0x1U;//启用自动唤醒。
initParams.emulationEnable = 0x1U;//启用仿真/调试挂起。
initParams.tdcEnable = 0x1U;//发送器延迟补偿为
//已启用。
initParams.wdcPreload = 0xFFU;//消息 RAM 的起始值
//看门狗计数器预加载。
//
//发送器延迟补偿参数。
//
initParams.tdcConfig.tdcf = 0xAU;
initParams.tdcConfig.tdco = 0x6U;
//
//初始化 MCAN 配置参数。
//
configParams.monEnable = 0x0U;//总线监控模式被禁用。
configParams.asmEnable = 0x0U;//正常 CAN 操作。
configParams.tsPrescalar = 0x2U;//预分频器值。
configParams.tsSelect = 0x2U;//时间戳计数器值。
configParams.timeoutSelect = MCAN_TIMEOUT_SELECT_CONT;
//超时计数器源选择。
configParams.timeoutPreload = 0xFFFFFF;//超时的开始值
//计数器。
configParams.timeoutCntEnable = 0x0U;//超时计数器被禁用。
configParams.filterConfig.rfs = 0x1U;//拒绝所有远程帧
// 29位扩展 ID。
configParams.filterConfig.rfe = 0x1U;//拒绝所有远程帧
// 11位标准 ID。
configParams.filterConfig.anfe = 0x1U;//接受 Rx FIFO 1.
configParams.filterConfig.anfs = 0x1U;//接受 Rx FIFO 1.
//
//初始化消息 RAM 段配置参数
//
msgRAMConfigParams.flssa. = MCAN_STD_ID_FILT_START_ADDR;
//标准 ID 过滤器列表起始地址。
msgRAMConfigParams.LSS = MCAN_STD_ID_FILTER_NUM;
//列表大小:标准标识。
msgRAMConfigParams.flesa = MCAN_EXT_ID_FILT_START_ADDR;
//扩展 ID 过滤器列表起始地址。
msgRAMConfigParams.LSE = MCAN_EXT_ID_FILTER_NUM;
//列表大小:扩展 ID。
msgRAMConfigParams.txStartAddr = MCAN_TX_缓冲 区启动 ADDR;
// Tx 缓冲区起始地址。
msgRAMConfigParams.txBufNum = MCAN_TX_缓冲 区大小;
//专用发送缓冲器的数量。
msgRAMConfigParams.txFIFOSize = MCAN_TX_FIFO_SIZE;
// Tx FIFO/队列。
msgRAMConfigParams.txBufMode = 0U;
msgRAMConfigParams.txBufElemSize = MCAN_Elem_Size_64BYTES;
// Tx 缓冲器元素大小。
msgRAMConfigParams.txEventFIFOStartAddr = MCAN_TX_EVENT_START_ADDR;
// Tx 事件 FIFO 起始地址。
msgRAMConfigParams.txEventFIFOSize = MCAN_TX_缓冲 区大小;
//事件 FIFO 大小。
msgRAMConfigParams.txEventFIFOWaterMark = MCAN_TX_EVENT_T水线;
Tx 事件 FIFO 水线中断的//级别。
msgRAMConfigParams.rxFIFO0startAddr = MCAN_FIFO_0_START_ADDR;
// Rx FIFO0起始地址。
msgRAMConfigParams.rxFIFO0size = MCAN_FIFO_0_NUM;
// Rx FIFO 元素的数量。
msgRAMConfigParams.rxFIFO0WaterMark = MCAN_FIFO_0_T水线;
msgRAMConfigParams.rxFIFO0OpMode = 0U;
msgRAMConfigParams.rxFIFO1startAddr = MCAN_FIFO_1_START_ADDR;
// Rx FIFO1起始地址。
msgRAMConfigParams.rxFIFO1size = MCAN_FIFO_1_NUM;
// Rx FIFO 元素的数量。
msgRAMConfigParams.rxFIFO1waterMark = MCAN_FIFO_1_T水线;
// Rx FIFO 1水印中断的级别。
msgRAMConfigParams.rxFIFO1OpMode = 0U;// FIFO 阻塞模式。
msgRAMConfigParams.rxBufStartAddr = MCAN_RX_缓冲 器_START_ADDR;
// Rx 缓冲器起始地址。
msgRAMConfigParams.rxBufElemSize = MCAN_Elem_Size_64BYTES;
// Rx 缓冲区元素大小。
msgRAMConfigParams.rxFIFO0ElemSize = MCAN_Elem_Size_64BYTES;
// Rx FIFO0元素大小。
msgRAMConfigParams.rxFIFO1ElemSize = MCAN_Elem_Size_64BYTES;
// Rx FIFO1元素大小。
//
//初始化 Tx 缓冲器配置参数。
//
stdFiltelem.sfid2. = 0x3U;//标准滤波器 ID 2.
stdFiltelem.sfid1. = 0x3U;//标准滤波器 ID 1.
stdFiltelem.sfec = 0x2U;//存储到 Rx 缓冲区或 As 中
//调试消息,SFT[1:0]的配置被忽略。
stdFiltelem.SFT = 0x0U;//范围滤波器从 SFID1到 SFID2。
//
//初始化 Tx 缓冲器配置参数。
//
extFiltelem.efid2 =(0x9U << 16U);
extFiltelem.efid2 |= 0xFFU;
extFiltelem.efid1 =(0x0U <<16U);
extFiltelem.efid1 |= 0xFFU;
extFiltelem.EFEC = 0x6U;
extFiltelem.eft = 0x0U;
//
//初始化位时序。
//
// bitTimes.nomRatePrescalar = 0x1FU;//标称波特率预分频器。
// bitTimes.nomTimeSeg1 = 0x1U;//采样点前的标称时间段。
// bitTimes.nomTimeSeg2 = 0x1U;//采样点后的标称时间段。
// bitTimes.nomSynchJumpWidth = 0x0U;//标称(重新)同步跳转宽度范围。
// bitTimes.dataRatePrescalar = 0x3U;//数据波特率预分频器。
// bitTimes.dataTimeSeg1 = 0x1U;//采样点前的数据时间段。
// bitTimes.dataTimeSeg2 = 0x1U;//采样点后的数据时间段。
// bitTimes.dataSynchJumpWidth = 0x0U;//数据(重新)同步跳转宽度。
//
//获取 MCANSS 版本 ID
//
MCAN_getRevisionId (MCAN0_BASE、&revId);
//
//等待内存初始化发生。
//
while (false =MCAN_isMemInitDone (MCAN0_BASE))
{
}
//
//将 MCAN 置于软件初始化模式。
//
MCAN_setOpMode (MCAN0_BASE、MCAN_OPERAING_MODE_SW_INIT);
//
//等待 MCAN 未初始化。
//
while (MCAN_OPERAT_MODE_SW_INIT!= MCAN_getOpMode (MCAN0_BASE))
{}
//
//初始化 MCAN 模块。
//
MCAN_init (MCAN0_BASE、initParams);
//
//配置 MCAN 模块。
//
MCAN_CONFIG (MCAN0_BASE、&CONFIGPARAMS);
//
//禁用外部时间戳溢出中断。
//
MCAN_extTSEnableIntr (MCAN0_BASE、1);
//
//配置时间戳计数器。
//
MCAN_extTSCounterConfig (MCAN0_BASE、MCAN_TS_PRESCAAR);
//
//配置位时序。
//
MCAN_setBitTime (MCAN0_BASE、bitTimes);
//
//设置扩展 ID 掩码。
//
MCAN_setExtIDAndMask (MCAN0_BASE、MCAN_EXT_ID_AND_MASK);
//
//配置消息 RAM 段
//
MCAN_msgRAMConfig (MCAN0_BASE、&msgRAMConfigParams);
//
//配置标准 ID 过滤器元素
//
MCAN_addStdMsgIDFilter (MCAN0_BASE、0U、&stdFiltelem);
//
//配置扩展 ID 过滤器元素
//
MCAN_addExtMsgIDFilter (MCAN0_BASE、0U、extFiltelem);
//
//启用外部计数器。
//
MCAN_extTSCounterEnable (MCAN0_BASE、1U);
//
//将 MCAN 从软件初始化模式中取出
//
MCAN_setOpMode (MCAN0_BASE、MCAN_OPERAING_MODE_NORMAL);
while (MCAN_operation_mode_normal!= MCAN_getOpMode (MCAN0_BASE))
{
}
fdoe = MCAN_isFDOpEnable (MCAN0_BASE);
if (true =fdoe)
{
//
// CAN-FD 运行被启用。
//
}
其他
{
//
// CAN-FD 运行被禁用。
//
}
}
