Other Parts Discussed in Thread: MSPM0G3107, SYSCONFIG
器件型号: MSPM0G3107
主题: SysConfig 中讨论的其他器件
您好:
我尝试在 MSPM0G3107 上使用 MCAN 外设、遇到了上电复位(通过施加电源或通过 nRST)后存储器初始化过程无法完成的问题。
在此状态下、对所有 MCAN 寄存器(即通过 DL_MCAN_getRevisionId 和其他方式进行读取)始终通过 CPU 或通过调试器返回零。
使用调试器复位器件(我认为这是 SYSRST?) 检查似乎通过得更可靠。
int main(void)
{
DL_GPIO_enablePower(GPIOA);
delay_cycles(POWER_STARTUP_DELAY);
DL_GPIO_initPeripheralInputFunction(GPIO_HFCLKIN_IOMUX, GPIO_HFCLKIN_IOMUX_FUNC);
DL_SYSCTL_setHFCLKSourceHFCLKIN();
DL_MCAN_reset(MCAN0_INST);
DL_MCAN_enablePower(MCAN0_INST)
delay_cycles(POWER_STARTUP_DELAY);
static const DL_MCAN_ClockConfig gMCAN0ClockConf = {
.clockSel = DL_MCAN_FCLK_HFCLK,
.divider = DL_MCAN_FCLK_DIV_1,
};
DL_MCAN_enableModuleClock(MCAN0_INST);
DL_MCAN_setClockConfig(MCAN0_INST, (DL_MCAN_ClockConfig *) &gMCAN0ClockConf);
while(false == DL_MCAN_isMemInitDone(MCAN0_INST));
while (1) {
delay_cycles(10000);
}
}
我可以从一个完全为空的工程(不使用 SysConfig)开始重现此内容。
通过将“delay_cycles"调用“调用从 power_startup_delay (16) 更改为 1000000、这个问题似乎会消失、初始化是可靠的。
因此、由于初始化顺序、使用 SysConfig 的项目不太可能遇到此问题 — 外设电源使能和第一次寄存器读取和写入之间存在更多的时钟周期。
是否有有关 MCAN 外设启动的已发布文档在启用时钟请求和访问寄存器之前需要额外的时钟周期?
我在技术参考手册中没有看到提到此行为的部分 — 第“2.2.6 外设启用“一节包含一条说明在访问外设之前等待 4 个 ULPCLK 周期的注释。