完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近用NUC123做一个BOOTLOADER升级项目,用自己写的上位机发送bin文件给单片机升级。在单片机接收上位机的最后一帧数据,并写入rom成功后,回复一个应答信号给上位机结束传输,然后修改寄存器,设为复位后从aprom启动。
outpw(&SYS->RSTSRC, 3);//clear bit outpw(&FMC->ISPCON, FMC->ISPCON & 0xFFFFFFFC);//设置下次从aprom启动 outpw(&SCB->AIRCR, (V6M_AIRCR_VECTKEY_DATA | V6M_AIRCR_SYSRESETREQ));//复位 但是,问题出在发送应答信号后,我直接执行上面三行程序,复位芯片,芯片复位后却依然在ldrom里面执行。 此时,若修改单片机代码,发出应答信号后延时一小段时间再执行设置启动和复位,或者直接在上位机代码里修改为发出最后一帧数据后自动结束传输,此时单片机运行正常,并且切换到aprom里执行app程序。我想大家有没知道哪里不对,导致这个情况发生,怎么解决。(单片机在接收接收后,我已经关闭掉串口和所有中断了,初步怀疑是复位导致串口引脚电平变化使上位机接收到的应答信号有误,会一直重发最后一帧数据,这个数据信号干扰到单片机切换aprom,不知道对不对?) |
|
相关推荐
1个回答
|
|
KEY_Pos | V6M_AIRCR_SYSRESETREQ_Msk));//软件复位单片机并从aprom启动。
但是在切换到aprom启动的时候,程序出现了卡死现象,调试发现出现了硬件死锁。这种情况可能是因为程序切换到aprom之前,某些时钟或者外设没有被正常关闭导致的。可以在写入最后一帧数据的时候,做一个最后的清理操作,关闭所有硬件资源和时钟,然后再进行切换。 另外还需要注意的是,FMC_ISPCON寄存器的BIT1必须为1才能从aprom启动,如果写成了0,程序将不会从aprom启动。此外,还需要保证aprom区域的起始地址在向量表的末尾,否则程序同样不能正常启动。 |
|
|
|
只有小组成员才能发言,加入小组>>
3311 浏览 9 评论
2994 浏览 16 评论
3493 浏览 1 评论
9058 浏览 16 评论
4087 浏览 18 评论
1178浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:28 , Processed in 1.127336 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号