在CAN0复位后,在访问CAN0外设之前,应该添加至少20个NOP的复位延迟,而不是9个NOP复位延迟。否则无法访问CAN0寄存器。9个NOP复位延迟是在将108MHz的Fcclk除以12MHz的FIRC内部时钟之后获得的,如下LPC43xxUM文档第15.4.1节备注所示。
/* Chip_SetupCoreClock(CLKIN_CRYSTAL, MAX_CLOCK_FREQ, true); */
// Chip_SetupCoreClock(CLKIN_CRYSTAL, 108000000, true);
// CCLK 12MHz
Chip_SetupCoreClock(CLKIN_CRYSTAL, 12000000, true);
已通过轮询复位标志成功等待CAN0退出复位。
Chip_RGU_TriggerReset( RGU_CAN0_RST );
//NOP_operation();
while(Chip_RGU_InReset(RGU_CAN0_RST))
为什么 9 或者10 个NOP复位延迟时间不满足要求,而20个NOP确可以呢?使用108Mhz时钟作为内核时钟,如用户手册所说,在复位CAN后,需要等待108Mhz/12Mhz = 9个周期。但是实际测试需要20个周期数。当内核时钟是12Mhz的时候,0或者1个等待周期数都是可以的。
-> 使用"NOP"来实现 NOP_operation()是有风险的,由于Cortex-M用户手册提示如下:
NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage.
可以使用MOV r0,r0或硬件定时器来实现等待周期,以避免编译器和优化级别配置的影响。
审核编辑:汤梓红
-
内核
+关注
关注
3文章
1372浏览量
40275 -
CAN
+关注
关注
57文章
2744浏览量
463606 -
时钟
+关注
关注
10文章
1733浏览量
131445 -
Cortex-M
+关注
关注
2文章
229浏览量
29752 -
nop
+关注
关注
0文章
9浏览量
1924
原文标题:LPC4357FET256 CAN0复位后,需要插入NOP延迟一段时间
文章出处:【微信号:嵌入式 MCU,微信公众号:嵌入式 MCU】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论