在线时间390 小时
UID3007495
注册时间2015-12-22
NXP金币129
TA的每日心情 | 擦汗 2021-7-5 15:45 |
---|
签到天数: 664 天 连续签到: 1 天 [LV.9]以坛为家II
金牌会员
 
- 积分
- 5618
- 最后登录
- 2021-12-22
|
发表于 2020-1-1 11:51:40
|
显示全部楼层
本帖最后由 okwh 于 2020-1-1 16:33 编辑
不用这费用了吧, 就一句代码的事情, 不值得费用的。 只所以这样 ,只是因为我是外行自学过来的,无数坎坷都经历过,只是现在已经老了,会有记忆力退化差错。
正题:
双核的启动有点特殊,在于NXP要考虑核间关系, 以保证启动过程为一个独立过程,完成后各核处于稳定状态才开始正常工作,所以NXP设计各核有主次关系, LPC43xx是M4为主。上电启动过程是主核先启动,主核软件再启动次核。(核对:主核软启动可能和上电启动效果一样,不是完全软。 子核可完全软启动)
重启动: 因为有先后。需要硬件配合,而NXP的核和周边设计非常灵活可重配置,所以涉及重启都有重启重配置(所有核可重启,所有周边设备都是可开关可配置必要时省电)系统。 使用它们有专门的寄存器 在 复位控制寄存器0 RESET_CTRL0,地址0x4005 3100, 和 复位控制寄存器1 RESET_CTRL1,地址0x4005 3104。 重启仅需要RESET_CTRL0。
参考手册英文15章,中文13章,UM10503, 第13 章:LPC43xx 复位产生单元(RGU)
Chapter 15: LPC43xx/LPC43Sxx Reset Generation Unit (RGU)
重启只需要一句代码:
unsigned int *RESET_CONTROL = (unsigned int *) 0x40053100;
*(RESET_CONTROL + 0) = (1 << 13); //重启主核M4 位13 M4_RST ;
好了------------------------------------------------------------
LPC43xx.h 中 有 LPC_RGU_Type,define LPC_RGU , 可使用 LPC_RGU->RESET_CTRL0
若你用LPCOPEN库, rgu.h 有函数Chip_RGU_TriggerReset供调用。
LPCOpen库 [url=http://www.nxp.com.cn/design/microcontrollers-developer-resources/lpcopen-libraries-and-examples/lpcopen-software-development-platform-lpc43xx PCOPEN-SOFTWARE-FOR-LPC43XX]http://www.nxp.com.cn/design/mi ... OFTWARE-FOR-LPC43XX[/url]
例子:
LPC4300_DFP和 LPCOpen--定义在rgu_18xx_43xx.h, 都有双核例程可参考。 调试你可在system Viewer中找到RGU。
其实,你给的代码中也有线索,在cr_startup_lpc43xx.c 有函数 void ResetISR(void) 第三、四行代码就是复位周边和M0的。
经验教训:注意设计不良的板子可能干扰重启,特别是那些涉及启动选择、ISP、IAP的管脚。
我现在手头没板子, 你就自己测试吧。
CMSIS兼容通常仅指Core基本部分,其他要么通过附加包如RTOS, 厂家驱动Driver,来可选增强并在发展中, 在Zone即Preview部分的多核支持, 基本尚是空白。
实际由 厂家驱动Driver通过寄存器操作实现。好在通常比较简单只是需要认真看手册和例程。
CCTV 元旦主题是鼓舞中国,新的一年,大家就都和谐成长吧。
|
|